Skip to main content

Simply utility library for loading GitHub tokens from a YAML file to be used for large-scale mining from the GitHub API.

Project description

GitHub Tokens Loader

A simple utility library to load GitHub tokens from a structured file which helps track who the token is linked to and when it expires.

Usage

GitHub Tokens File

To use this library, create a file with the following structure:

tokens:
  jane:
    token: "github_pat_56..."
    expiration_date: null
  john:
    token: "github_pat_41..."
    expiration_date: "2026-02-13"
  bob:
    token: "ghp_VeaD3..."
    expiration_date: null
  sally:
    token: "ghp_VVv5E..."
    expiration_date: "2023-02-13"

Each token has a short name (generally who or what it is linked to), the token itself, and an optional expiration date. The expiration date should be in the format YYYY-MM-DD.

⚠️⚠️ Important: Do not share this file with anyone else. Keep it secure and private. It is recommended to add the filename to your .gitignore as well. ⚠️⚠️

Loading Tokens

To load the tokens from the file, use the following code:

from gh_tokens_loader import load_github_tokens

tokens = load_github_tokens("path/to/tokens.yaml")

This will return only the tokens that are valid (i.e., not expired).

Why

I am a researcher who spends a lot of time mining the GitHub API for data about scientific software. Due to the rate limits on the GitHub API, my research collaborators and I will commonly pool our tokens. I found myself copy pasting some form of this code around to different projects and decided to make it a library.

In my own usage, I generally use the GitHubTokensCycler that is also builtin to the library:

import time
from concurrent.futures import ThreadPoolExecutor

from gh_tokens_loader import GitHubTokensCycler

# Load tokens
gh_tokens_cycler = GitHubTokensCycler("path/to/tokens.yaml")

# Imagine some function that uses the GitHub API
def get_repo_data(repo: str, gh_token: str) -> dict:
    # Important to sleep to avoid rate limits
    time.sleep(1)

    # Use the token to get data from the GitHub API
    # ...
    # Return the data
    return {"some": "data"}

# Imagine some list of repos
repos = ["repo1", "repo2", "repo3", "..."]

# Thread with cycling tokens
with ThreadPoolExecutor(max_workers=len(gh_tokens_cycler)) as exe:
    results = list(exe.map(
        get_repo_data,
        repos,
        [next(gh_tokens_cycler) for _ in range(len(repos))],
    ))

# Do something with the results
# ...

The GitHubTokensCycler will occasionally also refresh it's internal set of tokens to only include valid tokens.

License

This project is licensed under the Mozilla Public License 2.0 - see the LICENSE file for details.

Project details


Download files

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

Source Distribution

gh_tokens_loader-0.1.2.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

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

gh_tokens_loader-0.1.2-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file gh_tokens_loader-0.1.2.tar.gz.

File metadata

  • Download URL: gh_tokens_loader-0.1.2.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for gh_tokens_loader-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d50fd38cf0117e70fd633e537165fe4a14651d4d0904b7b29af0db94b9a8f9be
MD5 67326620f08cb4c658bc4c0851b31a8a
BLAKE2b-256 cd5db51bb9bbba1463090ab6df5137a1d677c14682e259eb8b818d7565210e19

See more details on using hashes here.

Provenance

The following attestation bundles were made for gh_tokens_loader-0.1.2.tar.gz:

Publisher: ci.yml on evamaxfield/gh-tokens-loader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gh_tokens_loader-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for gh_tokens_loader-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c3de29fa3107fcbddc2df40c04cf251d46a7fcecda30d02aedcb53f213a5803f
MD5 1e196c1d1fdb71da3ea1260e70488b77
BLAKE2b-256 4d8b7db208454536dc715baff1db4a6de446b2cb1ebe96413887de462df9b2da

See more details on using hashes here.

Provenance

The following attestation bundles were made for gh_tokens_loader-0.1.2-py3-none-any.whl:

Publisher: ci.yml on evamaxfield/gh-tokens-loader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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