Skip to content

Commit 02af10d

Browse files
authored
Merge pull request #21 from OSLL/issue_15_time_filter
Issue 15 time filter done
2 parents 54825fd + a2bbd06 commit 02af10d

File tree

3 files changed

+50
-18
lines changed

3 files changed

+50
-18
lines changed

git_logger.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import csv
22
import requests
33
import json
4+
import pytz
45

56
from github import Github, Repository, GithubException, PullRequest
67

78
EMPTY_FIELD = 'Empty field'
8-
9+
timezone = 'Europe/Moscow'
910

1011
def login(token):
1112
client = Github(login_or_token=token)
@@ -65,8 +66,12 @@ def log_commit_to_stdout(info):
6566
print(info)
6667

6768

68-
def log_repository_commits(repository: Repository, csv_name):
69+
def log_repository_commits(repository: Repository, csv_name, start, finish):
6970
for commit in repository.get_commits():
71+
if commit.commit.author.date.astimezone(
72+
pytz.timezone(timezone)) < start or commit.commit.author.date.astimezone(
73+
pytz.timezone(timezone)) > finish:
74+
continue
7075
if commit.commit is not None:
7176
info = {'repository name': repository.full_name,
7277
'author name': commit.commit.author.name,
@@ -160,11 +165,13 @@ def get_connected_pulls(issue_number, repo_owner, repo_name, token):
160165
else:
161166
return list_url
162167
return 'Empty field'
168+
163169

164-
165-
166-
def log_repository_issues(repository: Repository, csv_name, token):
170+
def log_repository_issues(repository: Repository, csv_name, token, start, finish):
167171
for issue in repository.get_issues(state='all'):
172+
if issue.created_at.astimezone(pytz.timezone(timezone)) < start or issue.created_at.astimezone(
173+
pytz.timezone(timezone)) > finish:
174+
continue
168175
info_tmp = {
169176
'repository name': repository.full_name, 'number': issue.number, 'title': issue.title,
170177
'state': issue.state, 'task': issue.body,
@@ -215,7 +222,7 @@ def log_repository_issues(repository: Repository, csv_name, token):
215222

216223

217224
def log_pr_to_csv(info, csv_name):
218-
fieldnames = ['repository name', 'title', 'state', 'commit into', 'commit from', 'created at', 'creator name',
225+
fieldnames = ['repository name', 'title', 'id', 'state', 'commit into', 'commit from', 'created at', 'creator name',
219226
'creator login', 'creator email',
220227
'changed files', 'comment body', 'comment created at', 'comment author name', 'comment author login',
221228
'comment author email', 'merger name', 'merger login', 'merger email', 'source branch',
@@ -273,13 +280,17 @@ def get_related_issues(pull_request_number, repo_owner, repo_name, token):
273280
issue_node = issue["node"]
274281
list_issues_url.append(issue_node["url"])
275282
return list_issues_url
283+
276284

277-
278-
def log_repositories_pr(repository: Repository, csv_name, token):
285+
def log_repositories_pr(repository: Repository, csv_name, token, start, finish):
279286
for pull in repository.get_pulls(state='all'):
287+
if pull.created_at.astimezone(pytz.timezone(timezone)) < start or pull.created_at.astimezone(
288+
pytz.timezone(timezone)) > finish:
289+
continue
280290
info_tmp = {
281291
'repository name': repository.full_name,
282292
'title': pull.title,
293+
'id': pull.number,
283294
'state': pull.state,
284295
'commit into': pull.base.label,
285296
'commit from': pull.head.label,
@@ -326,13 +337,14 @@ def log_repositories_pr(repository: Repository, csv_name, token):
326337
log_pr_to_stdout(info_tmp)
327338

328339

329-
def log_pull_requests(client: Github, repositories, csv_name, token):
340+
def log_pull_requests(client: Github, repositories, csv_name, token, start, finish):
330341
with open(csv_name, 'w', newline='') as file:
331342
writer = csv.writer(file)
332343
writer.writerow(
333344
(
334345
'repository name',
335346
'title',
347+
'id',
336348
'state',
337349
'commit into',
338350
'commit from',
@@ -358,10 +370,10 @@ def log_pull_requests(client: Github, repositories, csv_name, token):
358370
)
359371

360372
for repo in get_next_repo(client, repositories):
361-
log_repositories_pr(repo, csv_name, token)
373+
log_repositories_pr(repo, csv_name, token, start, finish)
362374

363375

364-
def log_issues(client: Github, repositories, csv_name, token):
376+
def log_issues(client: Github, repositories, csv_name, token, start, finish):
365377
with open(csv_name, 'w', newline='') as file:
366378
writer = csv.writer(file)
367379
writer.writerow(
@@ -391,10 +403,10 @@ def log_issues(client: Github, repositories, csv_name, token):
391403
)
392404

393405
for repo in get_next_repo(client, repositories):
394-
log_repository_issues(repo, csv_name, token)
406+
log_repository_issues(repo, csv_name, token, start, finish)
395407

396408

397-
def log_commits(client: Github, repositories, csv_name):
409+
def log_commits(client: Github, repositories, csv_name, start, finish):
398410
with open(csv_name, 'w', newline='') as file:
399411
writer = csv.writer(file)
400412
writer.writerow(
@@ -410,4 +422,4 @@ def log_commits(client: Github, repositories, csv_name):
410422
)
411423

412424
for repo in get_next_repo(client, repositories):
413-
log_repository_commits(repo, csv_name)
425+
log_repository_commits(repo, csv_name, start, finish)

main.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import argparse
2+
from datetime import datetime
3+
import pytz
4+
25
import git_logger
36

47

@@ -9,9 +12,20 @@ def parse_args():
912
parser.add_argument('-t', '--token', type=str, required=True, help='token github account')
1013
parser.add_argument('-l', '--list', type=str, required=True, help='repos names file')
1114
parser.add_argument('-o', '--out', type=str, required=True, help='output filename')
15+
parser.add_argument('-s', '--start', type=str, required=False, help='start time', default='2000/01/01-00:00:00')
16+
parser.add_argument('-f', '--finish', type=str, required=False, help='finish time', default='2400/01/01-00:00:00')
1217
return parser.parse_args()
1318

1419

20+
def parse_time(datetime_str):
21+
start = datetime_str[0].split('/') + datetime_str[1].split(':') if len(datetime_str) == 2 \
22+
else datetime_str[0].split('/') + ['00', '00', '00']
23+
start = [int(i) for i in start]
24+
start_datetime = datetime(year=start[0], month=start[1], day=start[2], hour=start[3], minute=start[4],
25+
second=start[5])
26+
return start_datetime.astimezone(pytz.timezone(git_logger.timezone))
27+
28+
1529
def main():
1630
args = parse_args()
1731
token = args.token
@@ -23,12 +37,17 @@ def main():
2337
except Exception as e:
2438
print(e)
2539
else:
40+
if args.start:
41+
start = parse_time(args.start.split('-'))
42+
if args.finish:
43+
finish = parse_time(args.finish.split('-'))
2644
if not args.p and not args.i:
27-
git_logger.log_commits(client, repositories, csv_name)
45+
git_logger.log_commits(client, repositories, csv_name, start, finish)
2846
if args.p:
29-
git_logger.log_pull_requests(client, repositories, csv_name, token)
47+
git_logger.log_pull_requests(client, repositories, csv_name, token, start, finish)
3048
if args.i:
31-
git_logger.log_issues(client, repositories, csv_name, token)
49+
git_logger.log_issues(client, repositories, csv_name, token, start, finish)
50+
3251

3352

3453
if __name__ == '__main__':

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
PyGithub~=1.55
2-
requests~=2.31.0
2+
pytz~=2023.3
3+
requests~=2.31.0

0 commit comments

Comments
 (0)