PyGithub Programming Model: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 12: Line 12:


==Authentication with Username and Password==
==Authentication with Username and Password==
<syntaxhighlight lang='py'>
github = Github(base_url='https://github.com/api/v3', login_or_token='someusername', password='somepassword')
</syntaxhighlight>
Note that the invocation '''does not''' fail if the username or the password is invalid. Subsequent calls are made as unauthenticated user.
==Authentication with JWT==
==Authentication with JWT==
=Configuring Retry=
=Configuring Retry=

Revision as of 23:49, 15 May 2023

Internal

Authentication

Various authentication mechanism are invoked by appropriately configuring the main Github class.

Authentication with Personal Access Token (PAT)

github_pat = os.environ.get('GITHUB_PAT')
if not github_pat:
    raise ValueError("'GITHUB_PAT' not found in environment")
github = Github(base_url='https://github.com/api/v3', login_or_token=github_pat)

Authentication with Username and Password

github = Github(base_url='https://github.com/api/v3', login_or_token='someusername', password='somepassword')

Note that the invocation does not fail if the username or the password is invalid. Subsequent calls are made as unauthenticated user.

Authentication with JWT

Configuring Retry

import os
from github import Github
from urllib3 import Retry


def access_github():
    # github = Github('user', 'password')
    github_pat = os.environ.get('GITHUB_PAT')
    if not github_pat:
        raise ValueError("'GITHUB_PAT' not setup")
    base_url = 'https://github.com'
    api_endpoint = 'api/v3'
    status_forcelist = [403, 500, 502, 504]  # retry 403s, 5XX from GitHub
    retry = Retry(total=10, backoff_factor=0.2, raise_on_status=True, status_forcelist=status_forcelist)
    github = Github(base_url=f'{base_url}/{api_endpoint}', login_or_token=github_pat, retry=retry, per_page=100)

    for repo in github.get_user().get_repos():
        print(repo.name)