GitHub SDK for Python
Project description
✨ The modern, all-batteries-included GitHub SDK for Python ✨
✨ Support both sync and async calls, fully typed ✨
✨ Always up to date, like octokit ✨
Installation
pip install githubkit
# or, use poetry
poetry add githubkit
# or, use pdm
pdm add githubkit
if you want to auth as github app, extra dependencies are required:
pip install githubkit[auth-app]
# or, use poetry
poetry add githubkit[auth-app]
# or, use pdm
pdm add githubkit[auth-app]
if you want to mix sync and async calls in oauth device callback, extra dependencies are required:
pip install githubkit[auth-oauth-device]
# or, use poetry
poetry add githubkit[auth-oauth-device]
# or, use pdm
pdm add githubkit[auth-oauth-device]
Usage
Authentication
Initialize a github client with no authentication:
from githubkit import GitHub
github = GitHub()
# or, use UnauthAuthStrategy
github = GitHub(UnauthAuthStrategy())
or using PAT (Token):
from githubkit import GitHub, TokenAuthStrategy
github = GitHub("<your_token_here>")
# or, use TokenAuthStrategy
github = GitHub(TokenAuthStrategy("<your_token_here>"))
or using GitHub APP authentication:
from githubkit import GitHub, AppAuthStrategy
github = GitHub(
AppAuthStrategy(
"<app_id>", "<private_key>", "<optional_client_id>", "<optional_client_secret>"
)
)
or using GitHub APP Installation authentication:
from githubkit import GitHub, AppInstallationAuthStrategy
github = GitHub(
AppInstallationAuthStrategy(
"<app_id>", "<private_key>", installation_id, "<optional_client_id>", "<optional_client_secret>",
)
)
or using OAuth APP authentication:
from githubkit import GitHub, OAuthAppAuthStrategy
github = GitHub(OAuthAppAuthStrategy("<client_id_here>", "<client_secret_here>"))
or using GitHub APP / OAuth APP web flow authentication:
from githubkit import GitHub, OAuthWebAuthStrategy
github = GitHub(
OAuthWebAuthStrategy(
"<client_id_here>", "<client_secret_here>", "<web_flow_exchange_code_here>"
)
)
or using GitHub Action authentication:
from githubkit import GitHub, ActionAuthStrategy
github = GitHub(ActionAuthStrategy())
Calling Rest API
APIs are fully typed. Typing in the following examples is just for reference only.
Simple sync call:
from githubkit import Response
from githubkit.rest import FullRepository
resp: Response[FullRepository] = github.rest.repos.get(owner="owner", repo="repo")
repo: FullRepository = resp.parsed_data
Simple async call:
from githubkit import Response
from githubkit.rest import FullRepository
resp: Response[FullRepository] = await github.rest.repos.async_get(owner="owner", repo="repo")
repo: FullRepository = resp.parsed_data
Call API with context (reusing client):
from githubkit import Response
from githubkit.rest import FullRepository
# with GitHub("<your_token_here>") as github:
with github:
resp: Response[FullRepository] = github.rest.repos.get(owner="owner", repo="repo")
repo: FullRepository = resp.parsed_data
from githubkit import Response
from githubkit.rest import FullRepository
# async with GitHub("<your_token_here>") as github:
async with github:
resp: Response[FullRepository] = await github.rest.repos.async_get(owner="owner", repo="repo")
repo: FullRepository = resp.parsed_data
Pagination
from githubkit.rest import Issue
for issue in github.paginate(
github.rest.issues.list_for_repo, owner="owner", repo="repo", state="open"
):
issue: Issue
print(issue.number)
from githubkit.rest import Issue
async for issue in github.paginate(
github.rest.issues.async_list_for_repo, owner="owner", repo="repo", state="open"
):
issue: Issue
print(issue.number)
Calling GraphQL API
Simple sync call:
data: Dict[str, Any] = github.graphql(query, variables={"foo": "bar"})
Simple async call:
data: Dict[str, Any] = github.async_graphql(query, variables={"foo": "bar"})
Webhook Verification
Simple webhook payload verification:
from githubkit.webhooks import verify
valid: bool = verify(secret, request.body, request.headers["X-Hub-Signature-256"])
Sign the webhook payload manually:
from githubkit.webhooks import sign
signature: str = sign(secret, payload, method="sha256")
Webhook Parsing
Parse the payload with event name:
from githubkit.webhooks import parse, WebhookEvent
event: WebhookEvent = parse(request.headers["X-GitHub-Event"], request.body)
Parse the payload without event name (may cost longer time):
from githubkit.webhooks import parse_without_name, WebhookEvent
event: WebhookEvent = parse_without_name(request.body)
Parse dict like payload:
from githubkit.webhooks import parse_obj, parse_obj_without_name, WebhookEvent
event: WebhookEvent = parse_obj(request.headers["X-GitHub-Event"], request.json())
event: WebhookEvent = parse_obj_without_name(request.json())
Switch between AuthStrategy
You can change the auth strategy and get a new client simplely using with_auth
.
Change from AppAuthStrategy
to AppInstallationAuthStrategy
:
from githubkit import GitHub, AppAuthStrategy
github = GitHub(AppAuthStrategy("<app_id>", "<private_key>"))
installation_github = github.with_auth(
github.auth.as_installation(installation_id)
)
Change from OAuthAppAuthStrategy
to OAuthWebAuthStrategy
:
from githubkit import GitHub, OAuthAppAuthStrategy
github = GitHub(OAuthAppAuthStrategy("<client_id>", "<client_secret>"))
user_github = github.with_auth(github.auth.as_web_user("<code>"))
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
File details
Details for the file githubkit-0.8.4.tar.gz
.
File metadata
- Download URL: githubkit-0.8.4.tar.gz
- Upload date:
- Size: 348.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.8 Linux/5.15.0-1022-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 915eaba5d5e2137fbaac37ec8f8eee715eb942e56e870f24958cd18ead00b12f |
|
MD5 | b4c9d6a39959f29f0de421cab3676e3b |
|
BLAKE2b-256 | f23e86a6f6fa900bea6999f297e954586af45cc58729c2ced2f1e4025bffc9bc |
File details
Details for the file githubkit-0.8.4-py3-none-any.whl
.
File metadata
- Download URL: githubkit-0.8.4-py3-none-any.whl
- Upload date:
- Size: 379.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.8 Linux/5.15.0-1022-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68da0f40577bda0a37f78489fba91fafd6a00407465d975b33f996c14ab51dae |
|
MD5 | c5436079bfcd5a2a8388099dfa014bd1 |
|
BLAKE2b-256 | 464a8e6967b0e8573d2aad5e6752fcdc2f2e035a609e83cda54800c4a9ca1db8 |