Skip to content

Commit 2f8681d

Browse files
authored
Merge branch 'master' into add_forgejo_workflow_dud
2 parents a7d6703 + e10653c commit 2f8681d

File tree

6 files changed

+60
-27
lines changed

6 files changed

+60
-27
lines changed

ForgejoRepoAPI.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,9 @@ def get_rate_limiting(self) -> tuple[int, int]:
333333
def get_workflow_runs(self, repo) -> list[WorkflowRun]:
334334
return []
335335

336+
def get_base_url(self) -> str:
337+
return self.client.base_url
338+
336339

337340
# Точка входа для тестирования
338341
if __name__ == "__main__":

GitHubRepoAPI.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ def get_workflow_runs(self, repo) -> list[WorkflowRun]:
267267
)
268268
return []
269269

270+
def get_base_url(self) -> str:
271+
return 'https://api.github.com'
272+
270273

271274
# Точка входа для тестирования
272275
if __name__ == "__main__":

git_logger.py

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
from interface_wrapper import (
2+
RepositoryFactory,
3+
IRepositoryAPI
4+
)
5+
from GitHubRepoAPI import GitHubRepoAPI
16
from time import sleep
7+
import requests
28

3-
from constants import TIMEDELTA
4-
from interface_wrapper import IRepositoryAPI, RepositoryFactory
9+
TIMEDELTA = 0.05
10+
TIMEZONE = 'Europe/Moscow'
511

612

713
def login(token, base_url):
@@ -53,7 +59,6 @@ def _get_next_client(self) -> tuple[IRepositoryAPI, str]:
5359

5460
if client is None:
5561
raise Exception("No git clients available")
56-
5762
return client, self.token_map[client]
5863

5964
def get_next_client(self) -> tuple[IRepositoryAPI, str]:
@@ -72,24 +77,42 @@ def get_next_binded_repo(clients: Clients, repositories: list[str]):
7277
yield client, repo, token
7378

7479

75-
def get_assignee_story(git_object):
76-
# TODO
77-
return ""
78-
79-
'''assignee_result = ""
80-
events = (
81-
git_object.get_issue_events()
82-
if type(github_object) is PullRequest.PullRequest
83-
else github_object.get_events()
84-
)
85-
for event in events:
86-
if event.event in ["assigned", "unassigned"]:
87-
date = event.created_at
88-
assigner = github_object.user.login
89-
assignee = event.assignee.login
90-
assignee_result += f"{date}: {assigner} -"
91-
if event.event == "unassigned":
92-
assignee_result += "/"
93-
assignee_result += f"> {assignee}; "
94-
sleep(TIMEDELTA)
95-
return assignee_result'''
80+
def get_assignee_story(git_object, client, token, repository):
81+
assignee_result = ""
82+
83+
try:
84+
repo_owner = repository.owner.login
85+
repo_name = repository.name
86+
issue_index = git_object._id # Для pull request и issue одинаково
87+
88+
base_url = client.get_base_url().rstrip('/')
89+
90+
url = f"{base_url}/repos/{repo_owner}/{repo_name}/issues/{issue_index}/timeline"
91+
headers = {
92+
"Authorization": f"Bearer {token}" if client is GitHubRepoAPI else f"token {token}",
93+
"Accept": "application/json"
94+
}
95+
96+
response = requests.get(url, headers=headers)
97+
if response.status_code != 200:
98+
raise Exception(f"Failed to fetch issue timeline: {response.status_code}, {response.text}")
99+
100+
events = response.json()
101+
102+
for event in events:
103+
if event.get('event') in ["assigned", "unassigned"]:
104+
date = event.get('created_at')
105+
assigner = event.get('actor', {}).get('login', 'unknown')
106+
assignee = event.get('assignee', {}).get('login', 'unknown')
107+
108+
assignee_result += f"{date}: {assigner} -"
109+
if event['event'] == "unassigned":
110+
assignee_result += "/"
111+
assignee_result += f"> {assignee}; "
112+
113+
sleep(TIMEDELTA)
114+
115+
except Exception as e:
116+
print(f"get_assignee_story(): error {e}")
117+
118+
return assignee_result

interface_wrapper.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class Repository:
6060

6161
@dataclass
6262
class Issue:
63-
_id: str
63+
_id: int
6464
title: str
6565
state: str
6666
created_at: datetime
@@ -193,6 +193,10 @@ def get_rate_limiting(self) -> tuple[int, int]:
193193
def get_workflow_runs(self, repo: Repository) -> list[WorkflowRun]:
194194
pass
195195

196+
@abstractmethod
197+
def get_base_url(self) -> str:
198+
pass
199+
196200

197201
class RepositoryFactory:
198202
@staticmethod

issues_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def get_info(obj, attr):
205205
closer_name=issue.closed_by.username if issue.closed_by else None,
206206
closer_login=issue.closed_by.login if issue.closed_by else None,
207207
closer_email=issue.closed_by.email if issue.closed_by else None,
208-
assignee_story=get_assignee_story(issue),
208+
assignee_story=get_assignee_story(issue, client, token, repository),
209209
connected_pull_requests=(
210210
get_connected_pulls(token, issue._id, repository.owner, repository.name)
211211
if issue._id is not None

pull_requests_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def get_info(obj, attr):
150150
merger_email=pull.merged_by.email if pull.merged_by else None,
151151
source_branch=pull.head_ref,
152152
target_branch=pull.base_ref,
153-
assignee_story=get_assignee_story(pull),
153+
assignee_story=get_assignee_story(pull, client, token, repository),
154154
related_issues=(
155155
get_related_issues(pull._id, repository.owner, repository.name, token)
156156
if pull.issue_url is not None

0 commit comments

Comments
 (0)