Skip to content

Commit 9718116

Browse files
authored
resolve git_logger.py
1 parent 8809a40 commit 9718116

File tree

1 file changed

+117
-7
lines changed

1 file changed

+117
-7
lines changed

git_logger.py

Lines changed: 117 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import csv
2+
import requests
3+
import json
24
import pytz
35

46
from github import Github, Repository, GithubException, PullRequest
@@ -76,7 +78,8 @@ def log_repository_commits(repository: Repository, csv_name, start, finish):
7678
'author login': EMPTY_FIELD,
7779
'author email': EMPTY_FIELD,
7880
'date and time': commit.commit.author.date.astimezone(pytz.timezone('Europe/Moscow')),
79-
'changed files': '; '.join([file.filename for file in commit.files])}
81+
'changed files': '; '.join([file.filename for file in commit.files]),
82+
'commit id': commit.commit.sha}}
8083

8184
if commit.author is not None:
8285
info['author login'] = commit.author.login
@@ -103,7 +106,68 @@ def log_issue_to_stdout(info):
103106
print(info)
104107

105108

106-
def log_repository_issues(repository: Repository, csv_name, start, finish):
109+
def get_connected_pulls(issue_number, repo_owner, repo_name, token):
110+
access_token = token
111+
repo_owner = repo_owner.login
112+
# Формирование запроса GraphQL
113+
query = """
114+
{
115+
repository(owner: "%s", name: "%s") {
116+
issue(number: %d) {
117+
timelineItems(first: 50, itemTypes:[CONNECTED_EVENT,CROSS_REFERENCED_EVENT]) {
118+
filteredCount
119+
nodes {
120+
... on ConnectedEvent {
121+
ConnectedEvent: subject {
122+
... on PullRequest {
123+
number
124+
title
125+
url
126+
}
127+
}
128+
}
129+
... on CrossReferencedEvent {
130+
CrossReferencedEvent: source {
131+
... on PullRequest {
132+
number
133+
title
134+
url
135+
}
136+
}
137+
}
138+
}
139+
}
140+
}
141+
}
142+
}""" % (repo_owner, repo_name, issue_number)
143+
144+
# Формирование заголовков запроса
145+
headers = {
146+
"Authorization": f"Bearer {access_token}",
147+
"Content-Type": "application/json"
148+
}
149+
150+
# Отправка запроса GraphQL
151+
response = requests.post("https://api.github.com/graphql", headers=headers, data=json.dumps({"query": query}))
152+
response_data = response.json()
153+
# Обработка полученных данных
154+
pull_request_data = response_data["data"]["repository"]["issue"]
155+
list_url = []
156+
if (pull_request_data is not None):
157+
issues_data = pull_request_data["timelineItems"]["nodes"]
158+
for pulls in issues_data:
159+
if (pulls.get("CrossReferencedEvent") != None and pulls.get("CrossReferencedEvent").get("url") not in list_url) :
160+
list_url.append(pulls.get("CrossReferencedEvent").get("url"))
161+
if (pulls.get("ConnectedEvent") != None and pulls.get("ConnectedEvent").get("url") not in list_url):
162+
list_url.append(pulls.get("ConnectedEvent").get("url"))
163+
if (list_url == []):
164+
return 'Empty field'
165+
else:
166+
return list_url
167+
return 'Empty field'
168+
169+
170+
def log_repository_issues(repository: Repository, csv_name, token, start, finish):
107171
for issue in repository.get_issues(state='all'):
108172
if issue.created_at.astimezone(pytz.timezone('Europe/Moscow')) < start or issue.created_at.astimezone(
109173
pytz.timezone('Europe/Moscow')) > finish:
@@ -172,7 +236,53 @@ def log_pr_to_stdout(info):
172236
print(info)
173237

174238

175-
def log_repositories_pr(repository: Repository, csv_name, start, finish):
239+
def get_related_issues(pull_request_number, repo_owner, repo_name, token):
240+
access_token = token
241+
repo_owner = repo_owner.login
242+
243+
# Формирование запроса GraphQL
244+
query = """
245+
{
246+
repository(owner: "%s", name: "%s") {
247+
pullRequest(number: %d) {
248+
id
249+
closingIssuesReferences(first: 50) {
250+
edges {
251+
node {
252+
id
253+
body
254+
number
255+
title
256+
url
257+
}
258+
}
259+
}
260+
}
261+
}
262+
}
263+
""" % (repo_owner, repo_name, pull_request_number)
264+
265+
# Формирование заголовков запроса
266+
headers = {
267+
"Authorization": f"Bearer {access_token}",
268+
"Content-Type": "application/json"
269+
}
270+
271+
# Отправка запроса GraphQL
272+
response = requests.post("https://api.github.com/graphql", headers=headers, data=json.dumps({"query": query}))
273+
response_data = response.json()
274+
# Обработка полученных данных
275+
pull_request_data = response_data["data"]["repository"]["pullRequest"]
276+
issues_data = pull_request_data["closingIssuesReferences"]["edges"]
277+
list_issues_url = []
278+
# сохранение информации об issues
279+
for issue in issues_data:
280+
issue_node = issue["node"]
281+
list_issues_url.append(issue_node["url"])
282+
return list_issues_url
283+
284+
285+
def log_repositories_pr(repository: Repository, csv_name, token, start, finish):
176286
for pull in repository.get_pulls(state='all'):
177287
if pull.created_at.astimezone(pytz.timezone('Europe/Moscow')) < start or pull.created_at.astimezone(
178288
pytz.timezone('Europe/Moscow')) > finish:
@@ -227,7 +337,7 @@ def log_repositories_pr(repository: Repository, csv_name, start, finish):
227337
log_pr_to_stdout(info_tmp)
228338

229339

230-
def log_pull_requests(client: Github, repositories, csv_name, start, finish):
340+
def log_pull_requests(client: Github, repositories, csv_name, token, start, finish):
231341
with open(csv_name, 'w', newline='') as file:
232342
writer = csv.writer(file)
233343
writer.writerow(
@@ -260,10 +370,10 @@ def log_pull_requests(client: Github, repositories, csv_name, start, finish):
260370
)
261371

262372
for repo in get_next_repo(client, repositories):
263-
log_repositories_pr(repo, csv_name, start, finish)
373+
log_repositories_pr(repo, csv_name, token, start, finish)
264374

265375

266-
def log_issues(client: Github, repositories, csv_name, start, finish):
376+
def log_issues(client: Github, repositories, csv_name, token, start, finish):
267377
with open(csv_name, 'w', newline='') as file:
268378
writer = csv.writer(file)
269379
writer.writerow(
@@ -293,7 +403,7 @@ def log_issues(client: Github, repositories, csv_name, start, finish):
293403
)
294404

295405
for repo in get_next_repo(client, repositories):
296-
log_repository_issues(repo, csv_name, start, finish)
406+
log_repository_issues(repo, csv_name, token, start, finish)
297407

298408

299409
def log_commits(client: Github, repositories, csv_name, start, finish):

0 commit comments

Comments
 (0)