PyGithub Concepts: Difference between revisions
(→Github) |
|||
Line 43: | Line 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Pagination== | ==Pagination== | ||
Responses that potentially may include a large number of elements are returned as <code>PaginatedList</code>s. The page size is controlled by the value of the <code>per_page</code> <code>Github</code> constructor parameter. | |||
=User= | =User= | ||
There are <code>AuthenticatedUser</code>s and <code>NamedUser</code>s. | There are <code>AuthenticatedUser</code>s and <code>NamedUser</code>s. |
Revision as of 00:02, 16 May 2023
Internal
Github
The main class to instantiate to access the GitHub API. It is used to configure authentication, via username and password, personal access token (PAT) or JWT, the base URL, the timeout, the user agent, the Retry strategy, the page size and the pool size.
Base URL
The base_url
consists of the host URL and API endpoint:
host_url = 'https://github.com'
api_endpoint = 'api/v3'
base_url = f'{host_url}/{api_endpoint}'
github = Github(base_url=base_url,, ...)
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
Authenticated SSL Client
If the Github server requires the client to authenticate, and the client does not, or uses a self-signed certificate, an invocation fails with:
requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /api/v3/user/repos?per_page=100 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))
The Retry Strategy
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='...', retry=retry, ...)
Pagination
Responses that potentially may include a large number of elements are returned as PaginatedList
s. The page size is controlled by the value of the per_page
Github
constructor parameter.
User
There are AuthenticatedUser
s and NamedUser
s.