Python Package PyGithub: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 69: Line 69:
</syntaxhighlight>
</syntaxhighlight>
====<tt>state</tt>====
====<tt>state</tt>====
If the state is invalid (not one of 'open', 'closed' or 'all'), the method returns a result corresponding to 'open'.
If the state is invalid (not one of 'open', 'closed' or 'all'), the method returns a result corresponding to 'open'. For more details, see: {{Internal|GitHub_Concepts#PR_States|GitHub Concepts &#124; PR States}}
 
====<tt>base</tt>====
====<tt>base</tt>====
The base branch name. If no such branch, the method returns an empty list.
The base branch name. If no such branch, the method returns an empty list.

Revision as of 23:20, 9 January 2023

External

Internal

Overview

A package used to interact with GitHub APIs.

Example

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)

Programming Model

Repository

https://pygithub.readthedocs.io/en/latest/examples/Repository.html

Attributes:

  • full_name

Get a Repository

github = Github(...)
repo = github.get_repo('some-owner/some-repo')

Issues

https://pygithub.readthedocs.io/en/latest/examples/Issue.html
repo = ...
issues = repo.get_issues(state=state, milestone=milestone)

Milestones

repo = ...
milestones = repo.get_milestones()

Pull Requests (PRs)

Get Multiple PRs from a Repository

Calls GET /repos/<owner>/<repo>/pulls. See: https://docs.github.com/en/rest/reference/pulls for reference. Returns a paginated list of PullRequest instances.

repository = ...
paginated_list = repository.get_pulls(
  state='open'|'closed'|'all',
  base='...',
  sort='...',
  direction='...'
  per_page=30
)

state

If the state is invalid (not one of 'open', 'closed' or 'all'), the method returns a result corresponding to 'open'. For more details, see:

GitHub Concepts | PR States

base

The base branch name. If no such branch, the method returns an empty list.

sort

A string indicating what to sort results by:

  • 'popularity': sort by the number of comments.
  • 'created': (default)
  • 'updated':
  • 'long-running': will sort by date created and will limit the results to pull requests that have been open for more than a month and have had activity within the past month.

direction

The direction of the sort. Default: 'desc' when sort is created or sort is not specified, otherwise 'asc'.

per_page

Number of results per page, as integer. Default 30, max 100.

page

Page number of the results to fetch, default 1.

Get One PR from a Repository

Calls GET /repos/<owner>/<repo>/pulls/<pr-number>.

See: https://docs.github.com/en/rest/reference/pulls

Utilities

PaginatedList

The total number of elements can be obtained with paginated_list.totalCount.