Skip to content

Commit 42926f0

Browse files
committed
unit test for token usage
1 parent cb7ffb5 commit 42926f0

File tree

5 files changed

+147
-91
lines changed

5 files changed

+147
-91
lines changed

git_logger.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
from time import sleep
33

44
TIMEDELTA = 0.05
5-
TIMEZONE = 'Europe/Moscow'
6-
75

86
def login(source, token, base_url):
97
client = RepositoryFactory.create_api(source, token, base_url)

interface_wrapper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from dataclasses import dataclass
44
import logging
55

6-
from github import Github
6+
from github import Github, Auth
77
from pyforgejo import PyforgejoApi
88

99
# Настройка логирования
@@ -182,7 +182,7 @@ def create_api(
182182
from ForgejoRepoAPI import ForgejoRepoAPI
183183

184184
if source == 'github':
185-
return GitHubRepoAPI(Github(token))
185+
return GitHubRepoAPI(Github(auth=Auth.Token(token)))
186186
elif source == 'forgejo':
187187
if not isinstance(base_url, str):
188188
raise ValueError(

main.py

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,42 @@ def parse_args():
118118
return parser.parse_args()
119119

120120

121+
def run(args, binded_repos, repos_for_wiki=None):
122+
start = parse_time(args.start.split('-'))
123+
finish = parse_time(args.finish.split('-'))
124+
125+
if args.commits:
126+
commits_parser.log_commits(
127+
binded_repos, args.out, start, finish, args.branch, args.forks_include
128+
)
129+
if args.pull_requests:
130+
pull_requests_parser.log_pull_requests(
131+
binded_repos,
132+
args.out,
133+
start,
134+
finish,
135+
args.forks_include,
136+
args.pr_comments,
137+
)
138+
if args.issues:
139+
issues_parser.log_issues(
140+
binded_repos, args.out, start, finish, args.forks_include
141+
)
142+
if args.invites:
143+
invites_parser.log_invitations(
144+
binded_repos,
145+
args.out,
146+
)
147+
if args.contributors:
148+
contributors_parser.log_contributors(binded_repos, args.out, args.forks_include)
149+
if args.wikis:
150+
wiki_parser.wiki_parser(repos_for_wiki, args.download_repos, args.out)
151+
if args.export_google_sheets:
152+
export_sheets.write_data_to_table(
153+
args.out, args.google_token, args.table_id, args.sheet_id
154+
)
155+
156+
121157
def main():
122158
args = parse_args()
123159

@@ -128,51 +164,16 @@ def main():
128164

129165
repositories = git_logger.get_repos_from_file(args.list)
130166

131-
csv_name = args.out
132-
path_drepo = args.download_repos
133-
fork_flag = args.forks_include
134-
log_pr_comments = args.pr_comments
135-
136167
print(repositories)
137168

138169
try:
139170
clients = git_logger.Clients("github", tokens)
140171
binded_repos = git_logger.get_next_binded_repo(clients, repositories)
141-
start = parse_time(args.start.split('-'))
142-
finish = parse_time(args.finish.split('-'))
143172
except Exception as e:
144173
print(e)
145174
print(traceback.print_exc())
146175
else:
147-
if args.commits:
148-
commits_parser.log_commits(
149-
binded_repos, csv_name, start, finish, args.branch, fork_flag
150-
)
151-
if args.pull_requests:
152-
pull_requests_parser.log_pull_requests(
153-
binded_repos,
154-
csv_name,
155-
start,
156-
finish,
157-
fork_flag,
158-
log_pr_comments,
159-
)
160-
if args.issues:
161-
issues_parser.log_issues(binded_repos, csv_name, start, finish, fork_flag)
162-
if args.invites:
163-
invites_parser.log_invitations(
164-
binded_repos,
165-
csv_name,
166-
)
167-
if args.wikis:
168-
wiki_parser.wiki_parser(repositories, path_drepo, csv_name)
169-
if args.contributors:
170-
contributors_parser.log_contributors(binded_repos, csv_name, fork_flag)
171-
if args.export_google_sheets:
172-
export_sheets.write_data_to_table(
173-
csv_name, args.google_token, args.table_id, args.sheet_id
174-
)
175-
176+
run(args, binded_repos)
176177

177178
if __name__ == '__main__':
178179
main()

test_token_usage.py

Lines changed: 105 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,12 @@
11
import unittest
22
import argparse
33
import sys
4-
from utils import parse_time
5-
from datetime import datetime
6-
from interface_wrapper import RepositoryFactory, IRepositoryAPI
7-
8-
import git_logger
9-
10-
from repo_parser import (
11-
commits_parser,
12-
contributors_parser,
13-
pull_requests_parser,
14-
invites_parser,
15-
issues_parser,
16-
wiki_parser,
17-
)
184

5+
from main import run
196

20-
def fix_rate_limit(clients: git_logger.Clients):
21-
return [c['client'].get_rate_limiting() for c in clients.clients]
22-
7+
import git_logger
238

24-
def parse_args():
9+
def parse_args(args):
2510
parser = argparse.ArgumentParser()
2611
parser.add_argument('--tt1', type=str, required=True, help='first test token')
2712
parser.add_argument('--tt2', type=str, required=True, help='second test token')
@@ -36,45 +21,117 @@ def parse_args():
3621

3722
parser.add_argument('-o', '--out', type=str, required=True, help='output filename')
3823

39-
return parser.parse_args()
40-
24+
return parser.parse_args(args)
4125

42-
class TestCommitsParser(unittest.TestCase):
26+
class TestTokenUsage(unittest.TestCase):
4327
def setUp(self):
44-
args = parse_args()
45-
print(args)
28+
test_args = parse_args(sys.argv[1:])
29+
30+
self.tokens = [test_args.tt1, test_args.tt2]
31+
self.repo = test_args.repo
32+
self.output_csv = test_args.out
33+
34+
self.args = argparse.Namespace(
35+
commits=False,
36+
issues=False,
37+
pull_requests=False,
38+
wikis=False,
39+
contributors=False,
40+
invites=False,
41+
start="2000/01/01-00:00:00",
42+
finish="2400/01/01-00:00:00",
43+
branch="default",
44+
forks_include=False,
45+
pr_comments=False,
46+
export_google_sheets=False,
47+
out=test_args.out,
48+
)
49+
50+
@staticmethod
51+
def _get_rate_limit(clients: git_logger.Clients):
52+
return [c['client'].get_rate_limiting()[0] for c in clients.clients]
53+
54+
@staticmethod
55+
def _is_only_one_token_used(limit_start, limit_finish):
56+
return (bool(limit_start[0] - limit_finish[0])
57+
!= bool(limit_start[1] - limit_finish[1]))
58+
59+
@staticmethod
60+
def _is_max_token_used(limit_start, limit_finish):
61+
if limit_start[0] - limit_finish[0]:
62+
return limit_start[0] == max(limit_start)
63+
else:
64+
return limit_start[1] == max(limit_start)
65+
66+
@staticmethod
67+
def _change_tokens_order(tokens, key):
68+
key %= len(tokens)
69+
return tokens[key:] + tokens[:key]
70+
71+
def _get_usage(self, binded_repos, clients):
72+
limit_start = self._get_rate_limit(clients)
73+
74+
run(self.args, binded_repos)
4675

47-
self.token1 = args.tt1
48-
self.token2 = args.tt2
49-
self.repo = args.test_repo
50-
self.output_csv = args.out
76+
limit_finish = self._get_rate_limit(clients)
5177

52-
self.start = parse_time('2000/01/01-00:00:00')
53-
self.finish = parse_time('2400/01/01-00:00:00')
54-
self.branch = 'default'
55-
self.fork_flag = False
78+
return limit_start, limit_finish
5679

5780
def test_commits_parser(self):
58-
clients1 = git_logger.Clients("github", [self.token1, self.token2])
59-
binded_repos1 = git_logger.get_next_binded_repo(clients1, [self.test_repo])
60-
61-
rate_limit_start = fix_rate_limit(clients1)
62-
63-
commits_parser.log_commits(
64-
binded_repos1,
65-
self.output_csv,
66-
self.start,
67-
self.finish,
68-
self.branch,
69-
self.fork_flag,
70-
)
81+
self.args.commits = True
82+
self.assertTrue(False)
83+
for i in range(2):
84+
clients = git_logger.Clients("github", self._change_tokens_order(self.tokens, i))
85+
binded_repos = git_logger.get_next_binded_repo(clients, [self.repo])
86+
87+
limit_start, limit_finish = self._get_usage(binded_repos, clients)
88+
89+
self.assertTrue(self._is_only_one_token_used(limit_start, limit_finish))
90+
self.assertTrue(self._is_max_token_used(limit_start, limit_finish))
91+
92+
def test_contributors_parser(self):
93+
self.args.contributors = True
94+
for i in range(2):
95+
clients = git_logger.Clients("github", self._change_tokens_order(self.tokens, i))
96+
binded_repos = git_logger.get_next_binded_repo(clients, [self.repo])
97+
98+
limit_start, limit_finish = self._get_usage(binded_repos, clients)
99+
100+
self.assertTrue(self._is_only_one_token_used(limit_start, limit_finish))
101+
self.assertTrue(self._is_max_token_used(limit_start, limit_finish))
102+
103+
def test_issues_parser(self):
104+
self.args.issues = True
105+
for i in range(2):
106+
clients = git_logger.Clients("github", self._change_tokens_order(self.tokens, i))
107+
binded_repos = git_logger.get_next_binded_repo(clients, [self.repo])
108+
109+
limit_start, limit_finish = self._get_usage(binded_repos, clients)
110+
111+
self.assertTrue(self._is_only_one_token_used(limit_start, limit_finish))
112+
self.assertTrue(self._is_max_token_used(limit_start, limit_finish))
113+
114+
def test_invites_parser(self):
115+
self.args.invites = True
116+
for i in range(2):
117+
clients = git_logger.Clients("github", self._change_tokens_order(self.tokens, i))
118+
binded_repos = git_logger.get_next_binded_repo(clients, [self.repo])
119+
120+
limit_start, limit_finish = self._get_usage(binded_repos, clients)
71121

72-
rate_limit_finish = fix_rate_limit(clients1)
122+
self.assertTrue(self._is_only_one_token_used(limit_start, limit_finish))
123+
self.assertTrue(self._is_max_token_used(limit_start, limit_finish))
73124

74-
print(rate_limit_start, rate_limit_finish)
125+
def test_pull_requests_parser(self):
126+
self.args.pull_requests = True
127+
for i in range(2):
128+
clients = git_logger.Clients("github", self._change_tokens_order(self.tokens, i))
129+
binded_repos = git_logger.get_next_binded_repo(clients, [self.repo])
75130

76-
pass
131+
limit_start, limit_finish = self._get_usage(binded_repos, clients)
77132

133+
self.assertTrue(self._is_only_one_token_used(limit_start, limit_finish))
134+
self.assertTrue(self._is_max_token_used(limit_start, limit_finish))
78135

79136
if __name__ == '__main__':
80-
unittest.main()
137+
unittest.main(argv=[sys.argv[0]])

utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import csv
22
from datetime import datetime
33
import pytz
4-
import git_logger
54

65
TITLE_LEN = 80
76
MIN_SIDE_PADDING = 4
87
SIDE_WHITE_SPACES = 1
98

10-
119
class logger:
10+
#TODO: отключение вывода в stdout
1211
@staticmethod
1312
def log_title(title: str, title_len: int = TITLE_LEN):
1413
final_len = max(
@@ -49,6 +48,7 @@ def log_error(error: str):
4948
def log_warning(warning: str):
5049
pass
5150

51+
TIMEZONE = 'Europe/Moscow'
5252

5353
def parse_time(datetime_str) -> datetime:
5454
start = (
@@ -65,4 +65,4 @@ def parse_time(datetime_str) -> datetime:
6565
minute=start[4],
6666
second=start[5],
6767
)
68-
return start_datetime.astimezone(pytz.timezone(git_logger.TIMEZONE))
68+
return start_datetime.astimezone(pytz.timezone(TIMEZONE))

0 commit comments

Comments
 (0)