Created
          October 22, 2021 17:56 
        
      - 
      
 - 
        
Save parvezmrobin/0c3bcd886a0eeefbbf69b31fe9f49418 to your computer and use it in GitHub Desktop.  
    Access GitHub GraphQL API From Python Using GQL
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | from gql import gql | |
| def create_graphql_query(repo: str, commit_id: str): | |
| """ | |
| Create a GraphQL query | |
| Documentation: https://docs.github.com/en/graphql | |
| """ | |
| return gql(f'''query {{ | |
| search( | |
| type: ISSUE, | |
| query: "type:pr is:merged linked:issue repo:{repo} {commit_id}" | |
| first: 100 | |
| ) {{ | |
| issueCount | |
| pageInfo {{ | |
| hasNextPage, | |
| endCursor, | |
| }} | |
| nodes {{ | |
| ... on PullRequest {{ | |
| id | |
| number | |
| title | |
| baseRefName | |
| createdAt | |
| repository {{ | |
| name | |
| }} | |
| labels(first:100) {{ | |
| totalCount | |
| nodes {{ | |
| name | |
| }} | |
| }} | |
| mergeCommit {{ | |
| authoredDate | |
| oid | |
| }} | |
| commits(first: 250) {{ | |
| totalCount | |
| pageInfo {{ | |
| hasNextPage | |
| endCursor | |
| }} | |
| nodes {{ | |
| commit {{ | |
| authoredDate | |
| oid | |
| message | |
| }} | |
| }} | |
| }} | |
| closingIssuesReferences(first: 10) {{ | |
| totalCount | |
| nodes {{ | |
| id | |
| number | |
| title | |
| body | |
| bodyText | |
| labels(first: 100) {{ | |
| totalCount | |
| nodes {{ | |
| name | |
| }} | |
| }} | |
| comments(first:100) {{ | |
| totalCount | |
| nodes {{ | |
| body | |
| bodyText | |
| }} | |
| }} | |
| }} | |
| }} | |
| }} | |
| }} | |
| }} | |
| }}''') | |
| import json | |
| from gql import Client | |
| from gql.transport.requests import RequestsHTTPTransport | |
| # Reading the GitHub token from a config file | |
| URL = 'https://api.github.com/graphql' | |
| with open('config.json') as configFile: | |
| config = json.load(configFile) | |
| GITHUB_TOKEN = config['githubToken'] | |
| HEADERS = { | |
| 'Authorization': f'Bearer {GITHUB_TOKEN}' | |
| } | |
| # Create necessary objects | |
| transport = RequestsHTTPTransport(url=URL, headers=HEADERS) | |
| client = Client(transport=transport) | |
| import winsound | |
| import json | |
| result, _repo, _commit = None, None, None | |
| try: | |
| for i, (_repo, _commit) in commit_repos.iterrows(): | |
| query = create_graphql_query( | |
| repo_map[_repo], | |
| _commit, | |
| ) | |
| result = client.execute(query) | |
| assert result['search']['issueCount'] in [0, 1] | |
| # if a corresponding issue found, write it | |
| if result['search']['issueCount'] == 1: | |
| result['repo'] = _repo | |
| with open(f'output/issues/json/{_commit}.json', 'w') as issueJsonFile: | |
| json.dump(result, issueJsonFile, indent=4) | |
| except Exception as e: | |
| # Print the errors | |
| print(_repo, _commit) | |
| print(result) | |
| print(e) | |
| # Notify yourself that an error occured | |
| duration = 5000 # milliseconds | |
| freq = 640 # Hz | |
| winsound.Beep(freq, duration) | |
| # Notify yourself that it is done | |
| duration = 1000 # milliseconds | |
| freq = 440 # Hz | |
| winsound.Beep(freq, duration) | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment