Spaces:
Running
Running
File size: 3,731 Bytes
d80253f b9b07ad d80253f b9b07ad d80253f 5c5d1c5 d80253f 5c5d1c5 d80253f b9b07ad d80253f b9b07ad d80253f 5c5d1c5 d80253f b9b07ad d80253f b9b07ad d80253f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
from dataclasses import dataclass
import requests
@dataclass
class User:
name: str
organizations: list[str]
@dataclass
class Commit:
message: str
user: User
additions: int
deletions: int
def call_with_query(query, token):
url = 'https://api.github.com/graphql'
r = requests.post(url, json={'query': query}, headers={'Authorization': f'Bearer {token}'})
return r.json()
def get_tag_commit_date(token, repository, tag):
owner, name = repository.split('/')
query = f"""
query GetTagCommit {{
repository(owner: "{owner}", name: "{name}"){{
object(expression: "{tag}") {{
... on Commit {{
oid
message
committedDate
author {{
user {{
login
}}
}}
}}
}}
}}
}}
"""
return call_with_query(query, token)['data']['repository']['object']['committedDate']
def get_commits(token, repository, branch, since):
owner, name = repository.split('/')
def get_page_result(next_page=''):
query = f"""
query GetCommits {{
repository(owner: "{owner}", name: "{name}"){{
nameWithOwner
object(expression: "{branch}") {{
... on Commit {{
oid
history(first: 100, since: "{since}"{next_page}) {{
nodes {{
message
deletions
additions
author {{
user {{
login
organizations(first: 100) {{
nodes {{
name
}}
}}
}}
}}
}}
pageInfo {{
endCursor
hasNextPage
}}
}}
}}
}}
}}
}}
"""
result = call_with_query(query, token)
if result['data']['repository']['object'] is None:
raise ValueError("Either the tag or the branch were incorrect.")
nodes = result['data']['repository']['object']['history']['nodes']
cursor = result['data']['repository']['object']['history']['pageInfo']['endCursor']
return nodes, cursor
nodes, cursor = get_page_result()
while cursor is not None:
_nodes, cursor = get_page_result(f' after:"{cursor}"')
nodes.extend(_nodes)
commits = []
for node in nodes:
if node['author']['user'] is None:
commits.append(Commit(
message=node['message'].split('\n')[0],
user=User(name='<NOT FOUND>', organizations=[]),
additions=node.get('additions'),
deletions=node.get('deletions')
))
else:
commits.append(Commit(
message=node['message'].split('\n')[0],
user=User(name=node['author']['user']['login'], organizations=[n['name'] for n in node['author']['user']['organizations']['nodes']]),
additions=node.get('additions'),
deletions=node.get('deletions')
))
return commits
|