24_deb_pkg_gov/gh_gsql_req.py
2023-11-06 16:20:35 -06:00

93 lines
2.8 KiB
Python

import requests
import datetime as dt
import json
import os
key = os.environ.get('KKEXKEY')
def main(vcs, early_cutoff):
gsql_dict = {}
vcs_list = vcs[0].split('/')
repo_name = '"' + vcs_list[-1] + '"'
repo_owner = '"' + vcs_list[-2] + '"'
gsql_dict["original_returned_content"] = get_discussion_gql(repo_owner, repo_name)
gsql_dict["time_cleaned_comm"] = within_time(gsql_dict["original_returned_content"], early_cutoff)
return gsql_dict
def get_discussion_gql(repo_owner, repo_name):
url = "https://api.github.com/graphql"
data_string = ("""
query {
repository(owner: """ + repo_owner + """, name: """ + repo_name + """) {
discussions(first: 3) {
# type: DiscussionConnection
totalCount # Int!
edges {
# type: DiscussionEdge
cursor
node {
# type: Discussion
id
title # String!
bodyText # String!
createdViaEmail # Boolean!
createdAt # DateTime!
answer {
#type: DiscussionComment
bodyText # String!
}
comments(first: 10){
# type: DiscussionCommentConnection
totalCount # Int!
edges {
# type: DiscussionCommentEdge
node {
# type: DiscussionComment
id
bodyText # String!
}
}
}
}
}
}
}
}
""")
data = {"query" : data_string}
data_json = json.dumps(data)
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8', 'Authorization': 'bearer ' + key}
r = requests.post(url=url, data=data_json, headers=headers)
#print(r.content)
return r.json()
def within_time(comment_content, early_cutoff):
try:
list_of_comments = json.loads(comment_content)["data"]["repository"]["discussions"]["edges"]
valid_comments = []
for comment in list_of_comments:
if dt.datetime.fromisoformat(comment['node']['createdAt'][:-1]) < early_cutoff:
break
else:
valid_comments.append(comment)
return valid_comments
except TypeError:
print("no discussions found")
return []
if __name__ == "__main__":
get_discussion_gql()
# stashed info about page cursors
''' pageInfo {
# type: PageInfo (from the public schema)
startCursor
endCursor
hasNextPage
hasPreviousPage
}
'''