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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d50fd38cf0117e70fd633e537165fe4a14651d4d0904b7b29af0db94b9a8f9be
|
|
| MD5 |
67326620f08cb4c658bc4c0851b31a8a
|
|
| BLAKE2b-256 |
cd5db51bb9bbba1463090ab6df5137a1d677c14682e259eb8b818d7565210e19
|
Provenance
The following attestation bundles were made for gh_tokens_loader-0.1.2.tar.gz:
Publisher:
ci.yml on evamaxfield/gh-tokens-loader
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gh_tokens_loader-0.1.2.tar.gz -
Subject digest:
d50fd38cf0117e70fd633e537165fe4a14651d4d0904b7b29af0db94b9a8f9be - Sigstore transparency entry: 171181715
- Sigstore integration time:
-
Permalink:
evamaxfield/gh-tokens-loader@143e9e8f6c7b6a96abc6d6ea2ed51f5e803314c2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/evamaxfield
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@143e9e8f6c7b6a96abc6d6ea2ed51f5e803314c2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gh_tokens_loader-0.1.2-py3-none-any.whl.
File metadata
- Download URL: gh_tokens_loader-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3de29fa3107fcbddc2df40c04cf251d46a7fcecda30d02aedcb53f213a5803f
|
|
| MD5 |
1e196c1d1fdb71da3ea1260e70488b77
|
|
| BLAKE2b-256 |
4d8b7db208454536dc715baff1db4a6de446b2cb1ebe96413887de462df9b2da
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gh_tokens_loader-0.1.2-py3-none-any.whl -
Subject digest:
c3de29fa3107fcbddc2df40c04cf251d46a7fcecda30d02aedcb53f213a5803f - Sigstore transparency entry: 171181716
- Sigstore integration time:
-
Permalink:
evamaxfield/gh-tokens-loader@143e9e8f6c7b6a96abc6d6ea2ed51f5e803314c2 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/evamaxfield
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@143e9e8f6c7b6a96abc6d6ea2ed51f5e803314c2 -
Trigger Event:
push
-
Statement type: