Skip to main content

Python API for accessing GitHub

Project description

Overview

A python3 API for accessing github

Build Status

Linux, MacOSX, Windows

Authentication

Access tokens are generated by github at this link https://github.com/settings/tokens/new

Installation

(Uploading to PyPi in the near future)

$ pip install --use-feature=in-tree-build .

Examples

Usage

ghc = GitHubClient(token=githubtoken)

ascii_art = ghc.MetaGetOctocat("Hello World").data.decode('utf-8')
    
print(ascii_art)
    
print(f"rate-limit remaining={ghc.rateLimitRemaining}")
               MMM.           .MMM
               MMMMMMMMMMMMMMMMMMM
               MMMMMMMMMMMMMMMMMMM      _____________
              MMMMMMMMMMMMMMMMMMMMM    |             |
             MMMMMMMMMMMMMMMMMMMMMMM   | Hello World |
            MMMMMMMMMMMMMMMMMMMMMMMM   |_   _________|
            MMMM::- -:::::::- -::MMMM    |/
             MM~:~ 00~:::::~ 00~:~MM
        .. MMMMM::.00:::+:::.00::MMMMM ..
              .MM::::: ._. :::::MM.
                 MMMM;:::::;MMMM
          -MM        MMMMMMM
          ^  M+     MMMMMMMMM
              MMMMMMM MM MM MM
                   MM MM MM MM
                   MM MM MM MM
                .~~MM~MM~MM~MM~~.
             ~~~~MM:~MM~~~MM~:MM~~~~
            ~~~~~~==~==~~~==~==~~~~~~
             ~~~~~~==~==~==~==~~~~~~
                 :~==~==~==~==~~

rate-limit remaining=4998

GitHubClient Methods

GitHubClient Methods

Pagination

Many of github's api calls return a collection of results as a list. For example:

commits = ghc.ReposListCommits("owner", "repo", per_page=30, page=1)    

ResposListCommits returns a list of commits for the specified repository. However, it will only return the first 'per_page' entries. To get the next set of commits, increment 'page' by 1.

commits = ghc.ReposListCommits("owner", "repo", per_page=30, page=2)    

Automatic Pagination

Given that in many cases all of a particular set of a data is desired, a convenient class method is provided for instance methods that do pagination:

commits = GitHubClient.paginate(ghc.ReposListCommits, "owner", "repo", pagination_limit=1000)

The first parameter is the paginating instance method and the remaining parameters are the parameters you would supply the method if calling it discretely. The optional 'pagination_limit' parameter can be specified to put a limit on the amount of data retrieved. If not specified GitHubClient.paginate will attempt to retrieve every record.

An 'extractor' method may be provided for responses that contain a list, as opposed to a list itself, for example: GitHubClient.ActionsListArtifactsForRepo returns and instance of:

class ActionsListArtifactsForRepoSuccess(ResponseBase):
    def __init__(self, artifacts:list, total_count:int):
        ResponseBase.__init__(self)
        self._artifacts = artifacts
        self._total_count = total_count
        return
        
    def _getartifacts(self):
        return self._artifacts and [ entry and Artifact(**entry) for entry in self._artifacts ]
        
    artifacts = property(_getartifacts)

In order to paginate the result, the artifacts property must be extracted:

from operator import attrgetter

artifacts = GitHubClient.paginate(ghc.ActionsListArtifactsForRepo, 
                                  owner, reponame, 
                                  extractor=attrgetter('artifacts'))

USE THIS METHOD WITH CAUTION. Have some situational awareness of how much data you will be asking for. Otherwise the rate-limit on the authentication you're using could be fully consumed.

To this end another method is provided that provides a generator object instead. Iterating over it will still appear as if it were one 'list' but the list is broken up into discrete queries, so that if you're scanning for something you can stop, without having to download the entire collection.

for repo in GitHubClient.generate(ghc.ReposListForAuthenticatedUser, type=None):
    print(f"{repo.name}")

Quick Rate Limit Check:

python -c "import githubV3py ;  print(githubV3py.GitHubClient(token='_token_').RateLimitGet().rate.remaining)"

Troubleshooting

Intellisense not working in WingIDE

In order for intellisense to work under WingIDE, the 'main entry point' must import the githubV3py package or import another package/module that does.

Corrective Action:

right click the file you wish to execute in the 'Project' tab/tool and select "Set as Main Entry Point".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

githubV3py-0.0.1-py3-none-any.whl (272.8 kB view details)

Uploaded Python 3

File details

Details for the file githubV3py-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: githubV3py-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 272.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for githubV3py-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4981efff6ab9ea31ea81b83f6a0780509eee409af6b7cd7aaede2ea4dd778e27
MD5 6c57649ff20af1468cea2fa8c9bd073f
BLAKE2b-256 be129252ae04a1a322db2cc37ca024d9ce9db7af8ff928932ec9accd59d4e273

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page