@@ -16,22 +16,40 @@ def get_tokens_from_file(tokens_path: str) -> list[str]:
1616 return tokens
1717
1818
19- class GitClients :
19+ def get_repos_from_file (repos_path : str ) -> list [str ]:
20+ with open (repos_path , 'r' ) as file :
21+ list_repos = [x for x in file .read ().split ('\n ' ) if x ]
22+
23+ return list_repos
24+
25+
26+ class Clients :
2027 def __init__ (self , source : str , tokens : list [str ], base_url : str | None = None ):
21- self .clients = self ._init_clients (source , tokens , base_url )
22- self .cur_client = None
28+ # Возможно это можно переписать покрасивее
29+ if source == 'github' :
30+ self .clients = self ._init_clients (source , tokens , base_url )
31+ elif base_url == 'forgejo' :
32+ self .client = RepositoryFactory .create_api (source , tokens [0 ], base_url )
33+ self .token = tokens [0 ]
34+ else :
35+ print (f"Unavailable source { source } , use [ 'github' | 'forgejo' ] instead" )
36+
37+ self .source = source
2338
2439 def _init_clients (
2540 self , source : str , tokens : list [str ], base_url : str | None
2641 ) -> list [dict ]:
2742 clients = [
28- {"client" : login (source , token , base_url ), "token" : token }
43+ {
44+ "client" : RepositoryFactory .create_api (source , token , base_url ),
45+ "token" : token ,
46+ }
2947 for token in tokens
3048 ]
3149
3250 return clients
3351
34- def get_next_client (self ) -> IRepositoryAPI :
52+ def _get_next_git_client (self ) -> tuple [ IRepositoryAPI , str ] :
3553 client = None
3654 max_remaining_limit = - 1
3755
@@ -51,24 +69,29 @@ def get_next_client(self) -> IRepositoryAPI:
5169 if client is None :
5270 raise Exception ("No git clients available" )
5371
54- self .cur_client = client
55- return client
72+ return client ['client' ], client ['token' ]
5673
74+ def _get_next_forgejo_client (self ) -> tuple [IRepositoryAPI , str ]:
75+ return self .client , self .token
5776
58- def get_next_repo (clients : GitClients , repositories ):
59- with open (repositories , 'r' ) as file :
60- list_repos = [x for x in file .read ().split ('\n ' ) if x ]
61- print (list_repos )
62- for repo_name in list_repos :
77+ def get_next_client (self ) -> tuple [IRepositoryAPI , str ]:
78+ if self .source == 'github' :
79+ return self ._get_next_git_client ()
80+ elif self .source == 'forgejo' :
81+ return self ._get_next_forgejo_client
82+
83+
84+ def get_next_binded_repo (clients : Clients , repositories : list [str ]):
85+ for repo_name in repositories :
6386 try :
64- cur_client = clients .get_next_client ()
65- repo = cur_client [ ' client' ] .get_repository (repo_name )
87+ client , token = clients .get_next_client ()
88+ repo = client .get_repository (repo_name )
6689 except Exception as err :
6790 print (f'get_next_repo(): error { err } ' )
6891 print (f'get_next_repo(): failed to load repository "{ repo_name } "' )
6992 exit (1 )
7093 else :
71- yield repo , cur_client [ ' token' ]
94+ yield client , repo , token
7295
7396
7497def get_assignee_story (git_object ):
0 commit comments