1+ from interface_wrapper import (
2+ RepositoryFactory ,
3+ IRepositoryAPI
4+ )
5+ from GitHubRepoAPI import GitHubRepoAPI
16from 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
713def 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
0 commit comments