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
Usage
Initialization
Initialize a github client using PAT (Token):
from githubkit import GitHub, TokenAuthStrategy
github = GitHub("<your_token_here>")
# or, use TokenAuthStrategy
github = GitHub(TokenAuthStrategy("<your_token_here>"))
or using basic authentication:
from githubkit import GitHub, BasicAuthStrategy
github = GitHub(BasicAuthStrategy("<client_id_here>", "<client_secret_here>"))
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())
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
GitHubKit-0.5.0.tar.gz
(268.7 kB
view hashes)
Built Distribution
GitHubKit-0.5.0-py3-none-any.whl
(295.7 kB
view hashes)
Close
Hashes for GitHubKit-0.5.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c7d6bb27965c5074aee16d37eff92b0cf1fbc15dca05fcc7e06dfdd64b76d9b |
|
MD5 | 38d9d6a87f3cd93bdcd1e34a9a33b9d7 |
|
BLAKE2b-256 | 34923b83dceb13700201ce81f917309005868bfcdfde4ba28df18b27bf5e81d8 |