2023年10月26日木曜日

python で gitlab api を操作する

python で gitlab api を操作する

概要

今回はユーザのアクティブを取得するサンプルコードを紹介します
ちなみに前回はRubyで取得しています

環境

  • Ubuntu 22.04
  • Python 3.11.3
  • python-gitlab 3.15.0

インストール

  • pipenv install python-gitlab

サンプルコード

import datetime
from dataclasses import dataclass

import gitlab


@dataclass
class Result:
    title: str
    web_url: str


@dataclass
class Event:
    project_id: int
    target_title: str
    target_type: str

    def __eq__(self, other):
        return self.target_title == other.target_title


gl = gitlab.Gitlab(
    url="https://your.gitlab.url.here", private_token="xxxx"
)

date = datetime.datetime.now() - datetime.timedelta(days=7)
user = gl.users.get(18)

events = []
gitlab_events = user.events.list(
    iterator=True,
    query_parameters={"after": date.strftime("%Y-%m-%d")},
)
for event in gitlab_events:
    e = Event(
        project_id=event.project_id,
        target_title=event.target_title,
        target_type=event.target_type,
    )
    if not e in events:
        events.append(e)

results = []
for event in events:
    if event.target_type in ["Note", "Issue", "MergeRequest"]:
        project = gl.projects.get(event.project_id)
        for issue in project.issues.list(iterator=True):
            if issue.title == event.target_title:
                r = Result(title=issue.title, web_url=issue.web_url)
                results.append(r)
        for mr in project.mergerequests.list(iterator=True):
            if mr.title == event.target_title:
                r = Result(title=mr.title, web_url=mr.web_url)
                results.append(r)

for r in results:
    print(f"* {r.title} -> {r.web_url}")

ちょっと解説

イベントを取得したあと同一タイトルのイベントをまとめています
そしてまとめたイベントを元にイベントが発生した Issue or MergeRequest の URL を取得しています

また取得する期間は一週間になります

参考サイト

0 件のコメント:

コメントを投稿