Skip to content

Commit e114667

Browse files
add dataclasses
1 parent a5e27a4 commit e114667

File tree

5 files changed

+174
-164
lines changed

5 files changed

+174
-164
lines changed

commits_parser.py

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
from utils import logger
1+
from dataclasses import dataclass, asdict
22
import pytz
33
from time import sleep
44

5-
# from github import Github, Repository, GithubException, PullRequest
5+
from utils import logger
66
from interface_wrapper import IRepositoryAPI, Repository
77

88
EMPTY_FIELD = 'Empty field'
99
TIMEDELTA = 0.05
1010
TIMEZONE = 'Europe/Moscow'
11-
FIELDNAMES = (
12-
'repository name',
13-
'author name',
14-
'author login',
15-
'author email',
16-
'date and time',
17-
'changed files',
18-
'commit id',
19-
'branch',
20-
)
11+
2112
GOOGLE_MAX_CELL_LEN = 50000
2213

2314

15+
@dataclass(kw_only=True, frozen=True)
16+
class CommitData:
17+
repository_name: str = ''
18+
author_name: str = ''
19+
author_email: str = ''
20+
datetime: str = ''
21+
changed_files: str = ''
22+
commit_id: str = ''
23+
branch: str = ''
24+
25+
2426
def log_repository_commits(
2527
client: IRepositoryAPI, repository: Repository, csv_name, start, finish, branch
2628
):
@@ -45,18 +47,19 @@ def log_repository_commits(
4547
continue
4648

4749
changed_files = '; '.join([file for file in commit.files])
48-
commit_data = [
49-
repository.name,
50-
commit.author.username,
51-
commit.author.email or EMPTY_FIELD,
52-
commit.date,
53-
changed_files[:GOOGLE_MAX_CELL_LEN],
54-
commit._id,
55-
branch,
56-
]
57-
info = dict(zip(FIELDNAMES, commit_data))
50+
changed_files = changed_files[:GOOGLE_MAX_CELL_LEN]
51+
commit_data = CommitData(
52+
repository_name=repository.name,
53+
author_name=commit.author.username,
54+
author_email=commit.author.email or EMPTY_FIELD,
55+
datetime=commit.date.astimezone(pytz.timezone(TIMEZONE)).isoformat(),
56+
changed_files=changed_files,
57+
commit_id=commit._id,
58+
branch=branch,
59+
)
60+
info = asdict(commit_data)
5861

59-
logger.log_to_csv(csv_name, FIELDNAMES, info)
62+
logger.log_to_csv(csv_name, list(info.keys()), info)
6063
logger.log_to_stdout(info)
6164

6265
sleep(TIMEDELTA)
@@ -65,7 +68,8 @@ def log_repository_commits(
6568
def log_commits(
6669
client: IRepositoryAPI, working_repos, csv_name, start, finish, branch, fork_flag
6770
):
68-
logger.log_to_csv(csv_name, FIELDNAMES)
71+
info = asdict(CommitData())
72+
logger.log_to_csv(csv_name, list(info.keys()))
6973

7074
for repo, token in working_repos:
7175
try:

contributors_parser.py

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
from utils import logger
2-
from time import sleep
1+
from dataclasses import dataclass, asdict
32
from typing import Generator
3+
from time import sleep
4+
5+
from utils import logger
46
from interface_wrapper import IRepositoryAPI, Repository
57

68
EMPTY_FIELD = 'Empty field'
79
TIMEDELTA = 0.05
810
TIMEZONE = 'Europe/Moscow'
9-
FIELDNAMES = (
10-
'repository name',
11-
'login',
12-
'name',
13-
'email',
14-
'url',
15-
'permissions',
16-
'total_commits',
17-
'id',
18-
'node_id',
19-
'type',
20-
'bio',
21-
'site_admin',
22-
)
11+
12+
13+
@dataclass(kw_only=True, frozen=True)
14+
class ContributorData:
15+
repository_name: str = ''
16+
login: str = ''
17+
name: str = ''
18+
email: str = ''
19+
url: str = ''
20+
permissions: str = ''
21+
total_commits: int = 0
22+
node_id: str = ''
23+
type: str = ''
24+
bio: str = ''
25+
site_admin: bool = False
2326

2427

2528
def log_repository_contributors(
@@ -36,22 +39,24 @@ def nvl(val):
3639
repository, contributor
3740
)
3841

39-
info_tmp = {
40-
'repository name': repository.name,
41-
'login': contributor.login,
42-
'name': nvl(contributor.username),
43-
'email': nvl(contributor_stat['email']),
44-
'url': contributor.html_url,
45-
'permissions': nvl(contributor_permissions),
46-
'total_commits': contributor_stat['total_commits'],
47-
'node_id': contributor.node_id,
48-
'type': contributor.type,
49-
'bio': nvl(contributor.bio),
50-
'site_admin': contributor.site_admin,
51-
}
52-
53-
logger.log_to_csv(csv_name, FIELDNAMES, info_tmp)
54-
logger.log_to_stdout(info_tmp)
42+
contributor_data = ContributorData(
43+
repository_name=repository.name,
44+
login=contributor.login,
45+
name=nvl(contributor.username),
46+
email=nvl(contributor_stat['email']),
47+
url=contributor.html_url,
48+
permissions=nvl(contributor_permissions),
49+
total_commits=contributor_stat['total_commits'],
50+
node_id=contributor.node_id,
51+
type=contributor.type,
52+
bio=nvl(contributor.bio),
53+
site_admin=contributor.site_admin,
54+
)
55+
56+
info_dict = asdict(contributor_data)
57+
58+
logger.log_to_csv(csv_name, list(info_dict.keys()), info_dict)
59+
logger.log_to_stdout(info_dict)
5560

5661
sleep(TIMEDELTA)
5762

@@ -80,7 +85,8 @@ def get_contributors_stats(client: IRepositoryAPI, repository: Repository) -> di
8085
def log_contributors(
8186
client: IRepositoryAPI, working_repos: Generator, csv_name: str, fork_flag: bool
8287
):
83-
logger.log_to_csv(csv_name, FIELDNAMES)
88+
info = asdict(ContributorData())
89+
logger.log_to_csv(csv_name, list(info.keys()))
8490

8591
for repo, token in working_repos:
8692
try:

git_logger.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ def get_next_repo(clients: GitClients, repositories):
6969
print(f'get_next_repo(): failed to load repository "{repo_name}"')
7070
exit(1)
7171
else:
72-
print(cur_client['token'])
7372
yield repo, cur_client['token']
7473

7574

invites_parser.py

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,40 @@
1-
from utils import logger
1+
from dataclasses import dataclass, asdict
22
from time import sleep
3+
from utils import logger
34
from interface_wrapper import IRepositoryAPI, Repository
45

5-
FIELDNAMES = (
6-
'repository name',
7-
'invited login',
8-
'invite creation date',
9-
'invitation url',
10-
)
6+
117
TIMEDELTA = 0.05
128

139

14-
def log_inviter(repo, invite, writer):
15-
invite_info = [
16-
repo.full_name,
17-
invite.invitee.login,
18-
invite.created_at.strftime("%d/%m/%Y, %H:%M:%S"),
19-
invite.html_url,
20-
]
21-
writer.writerow(invite_info)
22-
print(invite_info)
10+
@dataclass(kw_only=True, frozen=True)
11+
class InviteData:
12+
repository_name: str = ''
13+
invited_login: str = ''
14+
invite_creation_date: str = ''
15+
invitation_url: str = ''
2316

2417

2518
def log_repository_invitations(
26-
client: IRepositoryAPI, repository: Repository, csv_name
19+
client: IRepositoryAPI, repository: Repository, csv_name: str
2720
):
2821
invitations = client.get_invites(repository)
2922
for invite in invitations:
30-
invite_info = {
31-
'repository name': repository.name,
32-
'invited login': invite.invitee.login,
33-
'invite creation date': invite.created_at.strftime("%d/%m/%Y, %H:%M:%S"),
34-
'invitation url': invite.html_url,
35-
}
36-
logger.log_to_csv(csv_name, FIELDNAMES, invite_info)
37-
logger.log_to_stdout(invite_info)
23+
invite_data = InviteData(
24+
repository_name=repository.name,
25+
invited_login=invite.invitee.login,
26+
invite_creation_date=invite.created_at.strftime("%d/%m/%Y, %H:%M:%S"),
27+
invitation_url=invite.html_url,
28+
)
29+
invite_dict = asdict(invite_data)
30+
logger.log_to_csv(csv_name, list(invite_dict.keys()), invite_dict)
31+
logger.log_to_stdout(invite_dict)
3832
sleep(TIMEDELTA)
3933

4034

41-
def log_invitations(client: IRepositoryAPI, working_repos, csv_name):
42-
logger.log_to_csv(csv_name, FIELDNAMES)
35+
def log_invitations(client: IRepositoryAPI, working_repos, csv_name: str):
36+
info = asdict(InviteData())
37+
logger.log_to_csv(csv_name, list(info.keys()))
4338

4439
for repo, token in working_repos:
4540
logger.log_title(repo.name)

0 commit comments

Comments
 (0)