Skip to content

Commit 96c709a

Browse files
Revert "79 changed calls" (#90)
1 parent f343475 commit 96c709a

File tree

9 files changed

+183
-290
lines changed

9 files changed

+183
-290
lines changed

.DS_Store

-6 KB
Binary file not shown.

GitHubRepoAPI.py

Lines changed: 5 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,19 @@
88
WikiPage,
99
Branch,
1010
IRepositoryAPI,
11-
User,
12-
Comment
1311
)
1412
from github import Github
1513

1614

1715
class GitHubRepoAPI(IRepositoryAPI):
1816

1917
def __init__(self, client):
20-
self.client = Github(client)
18+
self.client = client
2119

2220
def get_repository(self, id: str) -> Repository | None:
2321
try:
2422
repo = self.client.get_repo(id)
25-
return Repository(_id=repo.full_name, name=repo.name, url=repo.html_url, default_branch=Branch(name=repo.default_branch, last_commit=None), owner=User(login=repo.owner.login,username=repo.owner.name,email=repo.owner.email))
23+
return Repository(_id=repo.full_name, name=repo.name, url=repo.html_url)
2624
except Exception as e:
2725
logging.error(f"Failed to get repository {id} from GitHub: {e}")
2826
return None
@@ -38,10 +36,6 @@ def get_commits(self, repo: Repository) -> list[Commit]:
3836
c.author.login if c.author else "unknown", c.commit.author.email
3937
),
4038
date=c.commit.author.date,
41-
files=[
42-
f.filename
43-
for f in c.files
44-
]
4539
)
4640
for c in commits
4741
]
@@ -68,17 +62,8 @@ def get_issues(self, repo: Repository) -> list[Issue]:
6862
Issue(
6963
_id=i.number,
7064
title=i.title,
65+
author=Contributor(i.user.login, i.user.email or ""),
7166
state=i.state,
72-
created_at=i.created_at,
73-
closed_at=i.closed_at,
74-
closed_by=User(login=i.closed_by.login,username=i.closed_by.name,email=i.closed_by.email) if i.closed_by else None,
75-
body=i.body,
76-
user=User(login=i.user.login,username=i.user.name,email=i.user.email),
77-
labels= [
78-
l.name
79-
for l in i.labels
80-
],
81-
milestone=i.milestone.title if i.milestone else None
8267
)
8368
for i in issues
8469
]
@@ -93,24 +78,8 @@ def get_pull_requests(self, repo: Repository) -> list[PullRequest]:
9378
PullRequest(
9479
_id=p.number,
9580
title=p.title,
96-
author=User(login=p.user.login, username=p.user.name, email=p.user.email),
81+
author=Contributor(p.user.login, p.user.email or ""),
9782
state=p.state,
98-
created_at=p.created_at,
99-
head_label=p.head.label,
100-
base_label=p.base.label,
101-
head_ref=p.head.ref,
102-
base_ref=p.base.ref,
103-
merged_by=User(login=p.merged_by.login, username=p.merged_by.name, email=p.merged_by.email) if p.merged_by else None,
104-
files=[
105-
f.filename
106-
for f in p.get_files()
107-
],
108-
issue_url=p.issue_url,
109-
labels= [
110-
l.name
111-
for l in p.labels
112-
],
113-
milestone=p.milestone.title if p.milestone else None
11483
)
11584
for p in pulls
11685
]
@@ -153,39 +122,7 @@ def get_branches(self, repo: Repository) -> list[Branch]:
153122
return []
154123

155124
def get_wiki_pages(self, repo: Repository) -> list[WikiPage]:
156-
return
157-
158-
def get_forks(self, repo: Repository) -> list[Repository]:
159-
repo_client = self.client.get_repo(repo._id)
160-
result = []
161-
for r in repo_client.get_forks():
162-
result.append(Repository(_id=repo.full_name, name=repo.name, url=repo.html_url))
163-
return result
164-
165-
def get_comments(self, repo, obj) -> list[Comment]:
166-
result = []
167-
if type(obj) == Issue:
168-
# TODO оптимизировать
169-
issues = self.client.get_repo(repo._id).get_issues(state='all')
170-
issue = None
171-
for i in issues:
172-
if i.number == obj._id:
173-
issue = i
174-
break
175-
for c in issue.get_comments():
176-
result.append(Comment(body=c.body,created_at=c.created_at,author=User(login=c.user.login,username=c.user.name,email=c.user.email)))
177-
elif type(obj) == PullRequest:
178-
# TODO оптимизировать
179-
pulls = self.client.get_repo(repo._id).get_pulls(state='all')
180-
pull = None
181-
for p in pulls:
182-
if p.number == obj._id:
183-
pull = p
184-
break
185-
for c in pull.get_comments():
186-
result.append(Comment(body=c.body,created_at=c.created_at,author=User(login=c.user.login,username=c.user.name,email=c.user.email)))
187-
188-
return result
125+
pass
189126

190127

191128
# Точка входа для тестирования

commits_parser.py

Lines changed: 31 additions & 29 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 github import Github, Repository, GithubException, PullRequest
55

66
EMPTY_FIELD = 'Empty field'
77
TIMEDELTA = 0.05
@@ -17,12 +17,12 @@
1717
'branch',
1818
)
1919

20-
def log_repository_commits(client: IRepositoryAPI, repository, csv_name, start, finish, branch):
20+
21+
def log_repository_commits(repository: Repository, csv_name, start, finish, branch):
2122
branches = []
2223
match branch:
2324
case 'all':
24-
branches = client.get_branches(repository)
25-
for branch in branches:
25+
for branch in repository.get_branches():
2626
branches.append(branch.name)
2727
case None:
2828
branches.append(repository.default_branch)
@@ -31,44 +31,46 @@ def log_repository_commits(client: IRepositoryAPI, repository, csv_name, start,
3131

3232
for branch in branches:
3333
print(f'Processing branch {branch}')
34-
# Используем обёртку для получения коммитов
35-
commits = client.get_commits(repository)
36-
for commit in commits:
34+
# TODO add support of since and until in https://pygithub.readthedocs.io/en/stable/github_objects/Repository.html#github.Repository.Repository.get_commits
35+
for commit in repository.get_commits(sha=branch):
3736
if (
38-
commit.date.astimezone(pytz.timezone(TIMEZONE)) < start
39-
or commit.date.astimezone(pytz.timezone(TIMEZONE)) > finish
37+
commit.commit.author.date.astimezone(pytz.timezone(TIMEZONE)) < start
38+
or commit.commit.author.date.astimezone(pytz.timezone(TIMEZONE))
39+
> finish
4040
):
4141
continue
42-
commit_data = [
43-
repository.name,
44-
commit.author.username,
45-
commit.author.email or EMPTY_FIELD,
46-
commit.date,
47-
'; '.join([file for file in commit.files]),
48-
commit._id,
49-
branch,
50-
]
51-
info = dict(zip(FIELDNAMES, commit_data))
42+
if commit.commit is not None:
43+
nvl = lambda val: val or EMPTY_FIELD
44+
commit_data = [
45+
repository.full_name,
46+
commit.commit.author.name,
47+
nvl(commit.author.login if commit.author else None),
48+
nvl(commit.commit.author.email),
49+
commit.commit.author.date,
50+
'; '.join([file.filename for file in commit.files]),
51+
commit.commit.sha,
52+
branch,
53+
]
54+
info = dict(zip(FIELDNAMES, commit_data))
5255

53-
logger.log_to_csv(csv_name, FIELDNAMES, info)
54-
logger.log_to_stdout(info)
56+
logger.log_to_csv(csv_name, FIELDNAMES, info)
57+
logger.log_to_stdout(info)
58+
59+
sleep(TIMEDELTA)
5560

56-
sleep(TIMEDELTA)
5761

5862
def log_commits(
59-
client: IRepositoryAPI, working_repos, csv_name, start, finish, branch, fork_flag
63+
client: Github, working_repos, csv_name, start, finish, branch, fork_flag
6064
):
6165
logger.log_to_csv(csv_name, FIELDNAMES)
6266

6367
for repo in working_repos:
6468
try:
65-
logger.log_title(repo.name)
66-
log_repository_commits(client, repo, csv_name, start, finish, branch)
69+
logger.log_title(repo.full_name)
70+
log_repository_commits(repo, csv_name, start, finish, branch)
6771
if fork_flag:
68-
# TODO
69-
forked_repos = client.get_forks(repo)
70-
for forked_repo in forked_repos:
71-
logger.log_title("FORKED:", forked_repo.name)
72+
for forked_repo in repo.get_forks():
73+
logger.log_title("FORKED:", forked_repo.full_name)
7274
log_repository_commits(forked_repo, csv_name, start, finish, branch)
7375
sleep(TIMEDELTA)
7476
sleep(TIMEDELTA)

contributors_parser.py

Lines changed: 13 additions & 13 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 github import Github, Repository, GithubException
55

66
EMPTY_FIELD = 'Empty field'
77
TIMEDELTA = 0.05
@@ -21,8 +21,9 @@
2121
'site_admin',
2222
)
2323

24-
def log_repository_contributors(client: IRepositoryAPI, repository: Repository, csv_name: str):
25-
contributors_stats = get_contributors_stats(client, repository)
24+
25+
def log_repository_contributors(repository: Repository, csv_name: str):
26+
contributors_stats = get_contributors_stats(repository)
2627

2728
nvl = lambda val: val or EMPTY_FIELD
2829

@@ -50,13 +51,11 @@ def log_repository_contributors(client: IRepositoryAPI, repository: Repository,
5051

5152
sleep(TIMEDELTA)
5253

53-
def get_contributors_stats(client: IRepositoryAPI, repository: Repository) -> dict:
54-
contributors_stats = dict()
5554

56-
# Используем обёртку для получения коммитов
57-
commits = client.get_commits(repository)
55+
def get_contributors_stats(repository: Repository) -> dict:
56+
contributors_stats = dict()
5857

59-
for commit in commits:
58+
for commit in repository.get_commits():
6059
contributor = commit.author
6160

6261
if not contributor.login in contributors_stats:
@@ -72,8 +71,9 @@ def get_contributors_stats(client: IRepositoryAPI, repository: Repository) -> di
7271

7372
return contributors_stats
7473

74+
7575
def log_contributors(
76-
client: IRepositoryAPI, working_repos: Generator, csv_name: str, fork_flag: bool
76+
client: Github, working_repos: Generator, csv_name: str, fork_flag: bool
7777
):
7878
logger.log_to_csv(csv_name, FIELDNAMES)
7979

@@ -83,11 +83,11 @@ def log_contributors(
8383
log_repository_contributors(repo, csv_name)
8484

8585
if fork_flag:
86-
for forked_repo in client.get_forks():
87-
logger.log_title("FORKED:", forked_repo.name)
88-
log_repository_contributors(client, forked_repo, csv_name)
86+
for forked_repo in repo.get_forks():
87+
logger.log_title("FORKED:", forked_repo.full_name)
88+
log_repository_contributors(forked_repo, csv_name)
8989
sleep(TIMEDELTA)
9090

91-
except e:
91+
except GithubException as e:
9292
print(e)
9393
exit(1)

git_logger.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,39 @@
1+
from github import Github, GithubException, PullRequest
12
from time import sleep
2-
from interface_wrapper import IRepositoryAPI, RepositoryFactory
33

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

7+
78
def login(token):
9+
client = Github(login_or_token=token)
10+
811
try:
9-
client = RepositoryFactory.create_api("github", token)
10-
except Exception as err:
11-
print(f'Github: Connect: error {err}')
12+
client.get_user().login
13+
except GithubException as err:
14+
print(f'Github: Connect: error {err.data}')
1215
print('Github: Connect: user could not be authenticated please try again.')
1316
exit(1)
1417
else:
1518
return client
1619

17-
def get_next_repo(client: IRepositoryAPI, repositories):
20+
21+
def get_next_repo(client: Github, repositories):
1822
with open(repositories, 'r') as file:
1923
list_repos = [x for x in file.read().split('\n') if x]
2024
print(list_repos)
2125
for repo_name in list_repos:
2226
try:
23-
repo = client.get_repository(repo_name)
24-
if not repo:
25-
raise Exception(f"Repository {repo_name} not found.")
26-
except Exception as err:
27-
print(f'Github: Connect: error {err}')
27+
repo = client.get_repo(repo_name)
28+
except GithubException as err:
29+
print(f'Github: Connect: error {err.data}')
2830
print(f'Github: Connect: failed to load repository "{repo_name}"')
2931
exit(1)
3032
else:
3133
yield repo
3234

35+
3336
def get_assignee_story(github_object):
34-
#TODO
35-
return ""
3637
assignee_result = ""
3738
events = (
3839
github_object.get_issue_events()

0 commit comments

Comments
 (0)