Skip to content

Commit 89cfcb7

Browse files
f
1 parent aece711 commit 89cfcb7

File tree

6 files changed

+40
-46
lines changed

6 files changed

+40
-46
lines changed

commits_parser.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from utils import logger
22
import pytz
33
from time import sleep
4-
from interface_wrapper import IRepositoryAPI
4+
from interface_wrapper import IRepositoryAPI, IClients
55

66
EMPTY_FIELD = 'Empty field'
77
TIMEDELTA = 0.05
@@ -60,12 +60,13 @@ def log_repository_commits(
6060

6161

6262
def log_commits(
63-
client: IRepositoryAPI, working_repos, csv_name, start, finish, branch, fork_flag
63+
clients: IClients, working_repos, csv_name, start, finish, branch, fork_flag
6464
):
6565
logger.log_to_csv(csv_name, FIELDNAMES)
6666

67-
for repo, token in working_repos:
67+
for repo in working_repos:
6868
try:
69+
client = clients.get_next_client()
6970
logger.log_title(repo.name)
7071
log_repository_commits(client, repo, csv_name, start, finish, branch)
7172
if fork_flag:

contributors_parser.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from utils import logger
22
from time import sleep
33
from typing import Generator
4-
from interface_wrapper import IRepositoryAPI, Repository
4+
from interface_wrapper import IRepositoryAPI, Repository, IClients
55

66
EMPTY_FIELD = 'Empty field'
77
TIMEDELTA = 0.05
@@ -78,12 +78,13 @@ def get_contributors_stats(client: IRepositoryAPI, repository: Repository) -> di
7878

7979

8080
def log_contributors(
81-
client: IRepositoryAPI, working_repos: Generator, csv_name: str, fork_flag: bool
81+
clients: IClients, working_repos: Generator, csv_name: str, fork_flag: bool
8282
):
8383
logger.log_to_csv(csv_name, FIELDNAMES)
8484

85-
for repo, token in working_repos:
85+
for repo in working_repos:
8686
try:
87+
client = clients.get_next_client()
8788
logger.log_title(repo.full_name)
8889
log_repository_contributors(repo, csv_name)
8990

@@ -93,6 +94,6 @@ def log_contributors(
9394
log_repository_contributors(client, forked_repo, csv_name)
9495
sleep(TIMEDELTA)
9596

96-
except e:
97+
except Exception as e:
9798
print(e)
9899
exit(1)

git_logger.py

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
from time import sleep
2-
from interface_wrapper import IRepositoryAPI, RepositoryFactory
2+
from interface_wrapper import IRepositoryAPI, RepositoryFactory, IClients
33

44
TIMEDELTA = 0.05
55
TIMEZONE = 'Europe/Moscow'
66

77

88
def login(token):
9-
try:
9+
if 1:
1010
client = RepositoryFactory.create_api("github", token)
11-
except Exception as err:
12-
print(f'Github: Connect: error {err}')
13-
print('Github: Connect: user could not be authenticated please try again.')
14-
exit(1)
15-
else:
11+
# except Exception as err:
12+
# print(f'Github: Connect: error {err}')
13+
# print('Github: Connect: user could not be authenticated please try again.')
14+
# exit(1)
15+
# else:
1616
return client
1717

1818

@@ -23,10 +23,11 @@ def get_tokens_from_file(tokens_path: str) -> list[str]:
2323
return tokens
2424

2525

26-
class GithubClients:
26+
class GithubClients(IClients):
2727
def __init__(self, tokens: list[str]):
2828
self.clients = self._init_clients(tokens)
2929
self.cur_client = None
30+
self.last_client = -1
3031

3132
def _init_clients(self, tokens: list[str]) -> list[dict]:
3233
clients = [{"client": login(token), "token": token} for token in tokens]
@@ -35,44 +36,30 @@ def _init_clients(self, tokens: list[str]) -> list[dict]:
3536
return clients
3637

3738
def get_next_client(self):
38-
client = None
39-
max_remaining_limit = -1
40-
41-
for client_tmp in self.clients:
42-
remaining_limit, limit = client_tmp["client"].rate_limiting
43-
44-
# можно добавить вывод износа токена
45-
# можно дополнительно проверять на 403 и временно пропускать эти токены,
46-
# либо завести константу "минимальный коэффициент износа" и не трогать "изношенные" токены
47-
48-
if remaining_limit > max_remaining_limit:
49-
client = client_tmp
50-
max_remaining_limit = remaining_limit
51-
52-
sleep(TIMEDELTA)
53-
54-
if client is None:
39+
if not self.clients:
5540
raise Exception("No github-clients available")
5641

57-
self.cur_client = client
58-
return client
42+
self.last_client = (self.last_client + 1) % len(self.clients)
43+
self.cur_client = self.clients[self.last_client]
44+
return self.cur_client
45+
5946

6047

61-
def get_next_repo(client: IRepositoryAPI, repositories):
48+
def get_next_repo(clients: IClients, repositories):
6249
with open(repositories, 'r') as file:
6350
list_repos = [x for x in file.read().split('\n') if x]
6451
print(list_repos)
6552
for repo_name in list_repos:
66-
try:
53+
if 1:
6754
cur_client = clients.get_next_client()
6855
repo = cur_client['client'].get_repository(repo_name)
6956
if not repo:
7057
raise Exception(f"Repository {repo_name} not found.")
71-
except Exception as err:
72-
print(f'Github: Connect: error {err}')
73-
print(f'Github: Connect: failed to load repository "{repo_name}"')
74-
exit(1)
75-
else:
58+
# except Exception as err:
59+
# print(f'Github: Connect: error {err}')
60+
# print(f'Github: Connect: failed to load repository "{repo_name}"')
61+
# exit(1)
62+
# else:
7663
yield repo
7764

7865

interface_wrapper.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ class WikiPage:
9595
content: str
9696

9797

98+
class IClients(ABC):
99+
@abstractmethod
100+
def get_next_client(self): ...
101+
102+
98103
# Интерфейс API
99104
class IRepositoryAPI(ABC):
100105

main.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def main():
151151

152152
if args.commits:
153153
commits_parser.log_commits(
154-
working_repos, csv_name, start, finish, args.branch, fork_flag
154+
clients, working_repos, csv_name, start, finish, args.branch, fork_flag
155155
)
156156
if args.pull_requests:
157157
pull_requests_parser.log_pull_requests(
@@ -163,13 +163,13 @@ def main():
163163
log_pr_comments,
164164
)
165165
if args.issues:
166-
issues_parser.log_issues(working_repos, csv_name, start, finish, fork_flag)
166+
issues_parser.log_issues(clients, working_repos, csv_name, start, finish, fork_flag)
167167
if args.invites:
168-
invites_parser.log_invitations(working_repos, csv_name)
168+
invites_parser.log_invitations(clients, working_repos, csv_name)
169169
if args.wikis:
170170
wikipars.wikiparser(clients, repositories, path_drepo, csv_name)
171171
if args.contributors:
172-
contributors_parser.log_contributors(working_repos, csv_name, fork_flag)
172+
contributors_parser.log_contributors(clients, working_repos, csv_name, fork_flag)
173173
if args.export_google_sheets:
174174
export_sheets.write_data_to_table(
175175
csv_name, args.google_token, args.table_id, args.sheet_id

wikipars.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def log_wiki_to_csv(info, csv_name):
2222
writer.writerow(info)
2323

2424

25-
def wikiparser(client, repositories, path_drepo, csv_name):
25+
def wikiparser(clients, repositories, path_drepo, csv_name):
2626
with open(csv_name, 'w', newline='') as file:
2727
writer = csv.writer(file)
2828
writer.writerow(WIKI_FIELDNAMES)

0 commit comments

Comments
 (0)