概要
今回はユーザのアクティブを取得するサンプルコードを紹介します
ちなみに前回は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 件のコメント:
コメントを投稿