Skip to content

Commit 4ea23ad

Browse files
committed
small fixes
1 parent d7792ee commit 4ea23ad

File tree

6 files changed

+43
-19
lines changed

6 files changed

+43
-19
lines changed

ForgejoRepoAPI.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,9 @@ def get_invites(self, repo: Repository) -> list[Invite]:
305305
def get_rate_limiting(self) -> tuple[int, int]:
306306
return sys.maxsize, sys.maxsize
307307

308+
def get_base_url(self) -> str:
309+
return self.client.base_url
310+
308311

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

GitHubRepoAPI.py

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

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

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

git_logger.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
RepositoryFactory,
33
IRepositoryAPI
44
)
5+
from GitHubRepoAPI import GitHubRepoAPI
56
from time import sleep
67
import requests
78

@@ -21,7 +22,14 @@ def get_tokens_from_file(tokens_path: str) -> list[str]:
2122
return tokens
2223

2324

24-
class GitClients:
25+
def get_repos_from_file(repos_path: str) -> list[str]:
26+
with open(repos_path, 'r') as file:
27+
list_repos = [x for x in file.read().split('\n') if x]
28+
29+
return list_repos
30+
31+
32+
class Clients:
2533
def __init__(self, source: str, tokens: list[str], base_url: str | None = None):
2634
self.clients = self._init_clients(source, tokens, base_url)
2735
self.cur_client = None
@@ -54,38 +62,45 @@ def get_next_client(self) -> IRepositoryAPI:
5462
return client
5563

5664

57-
def get_next_repo(clients: GitClients, repositories):
65+
def get_next_repo(clients: Clients, repositories):
5866
with open(repositories, 'r') as file:
5967
list_repos = [x for x in file.read().split('\n') if x]
60-
print(list_repos)
6168
for repo_name in list_repos:
6269
try:
6370
cur_client = clients.get_next_client()
6471
repo = cur_client['client'].get_repository(repo_name)
6572
except Exception as err:
6673
print(f'get_next_repo(): error {err}')
6774
print(f'get_next_repo(): failed to load repository "{repo_name}"')
68-
exit(1)
6975
else:
70-
print(cur_client['token'])
71-
yield repo, cur_client['token']
76+
yield cur_client['client'], repo, cur_client['token']
77+
78+
79+
def get_next_binded_repo(clients: Clients, repositories: list[str]):
80+
for repo_name in repositories:
81+
try:
82+
cur_client = clients.get_next_client()
83+
repo = cur_client['client'].get_repository(repo_name)
84+
except Exception as err:
85+
print(f'get_next_binded_repo(): error {err}')
86+
print(f'get_next_binded_repo(): failed to load repository "{repo_name}"')
87+
else:
88+
yield cur_client['client'], repo, cur_client['token']
7289

7390

74-
def get_assignee_story(git_object):
91+
def get_assignee_story(git_object, client, token, repository):
7592
assignee_result = ""
7693

7794
try:
78-
repo_owner = git_object.repository.owner.username
79-
repo_name = git_object.repository.name
80-
issue_index = git_object.number # Для pull request и issue одинаково
95+
repo_owner = repository.owner.login
96+
repo_name = repository.name
97+
issue_index = git_object._id # Для pull request и issue одинаково
8198

82-
client = git_object._client # доступ к api-клиенту
83-
token = client.token
84-
base_url = client.base_url.rstrip('/')
99+
base_url = client.get_base_url().rstrip('/')
85100

86101
url = f"{base_url}/repos/{repo_owner}/{repo_name}/issues/{issue_index}/timeline"
87102
headers = {
88-
"Authorization": f"token {token}",
103+
"Authorization": f"Bearer {token}" if client is GitHubRepoAPI else f"token {token}",
89104
"Accept": "application/json"
90105
}
91106

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
# Фабрика для создания API
198202
class RepositoryFactory:

issues_parser.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def get_info(obj, attr):
152152
closer_name=issue.closed_by.username if issue.closed_by else None,
153153
closer_login=issue.closed_by.login if issue.closed_by else None,
154154
closer_email=issue.closed_by.email if issue.closed_by else None,
155-
assignee_story=get_assignee_story(issue),
155+
assignee_story=get_assignee_story(issue, client, token, repository),
156156
connected_pull_requests=(
157157
get_connected_pulls(issue._id, repository.owner, repository.name, token)
158158
if issue._id is not None
@@ -213,4 +213,3 @@ def log_issues(
213213
sleep(TIMEDELTA)
214214
except Exception as e:
215215
print("log_issues exception:", e)
216-
exit(1)

utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ def log_title(title: str, title_len: int = TITLE_LEN):
2121
@staticmethod
2222
def log_to_csv(csv_name: str, field_names: tuple[str], row: dict | None = None):
2323
if isinstance(row, dict):
24-
with open(csv_name, 'a', newline='') as file:
24+
with open(csv_name, 'a', encoding='utf-8', newline='') as file:
2525
writer = csv.DictWriter(file, fieldnames=field_names)
2626
writer.writerow(row)
2727
elif row is None:
28-
with open(csv_name, 'w', newline='') as file:
28+
with open(csv_name, 'w', encoding='utf-8', newline='') as file:
2929
writer = csv.writer(file)
3030
writer.writerow(field_names)
3131
else:

0 commit comments

Comments
 (0)