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 } '''