跳转到主要内容

一个简单的GitHub客户端,仅提供认证和访问REST和GraphQL API。

项目描述

Task Status pre-commit.ci status Code Coverage PyPI version License

simple-github

一个简单的Python GitHub客户端,用于处理认证并提供对REST和GraphQL API的轻松访问。

为什么使用simple-github?

如果您考虑使用simple-github...

  1. 您不希望编写自己的认证(特别是应用程序认证),但又不想陷入面向对象包装器。
  2. 您想使用REST和GraphQL端点。

功能

  • 使用个人访问令牌进行认证,作为GitHub应用程序或GitHub应用程序安装。
  • 应用程序令牌到期时的自动刷新。
  • 查询REST和GraphQL端点。
  • 在两个端点之间共享aiohttp会话。

安装

使用pip安装

pip install simple-github

示例用法

使用访问令牌进行认证

在最简单的情况下,您可以使用提供的访问令牌

from simple_github import TokenClient
token = "<access token>"
async with TokenClient(token) as session:
    resp = await session.get("/octocat")
    resp.raise_for_status()
    data = await resp.json()
    await resp.close()

返回值是一个aiohttp.ClientResponse对象。

如果同步调用,只需从示例中移除async / await

from simple_github import TokenClient
token = "<access token>"
with TokenClient(token) as session:
    resp = session.get("/octocat")
    resp.raise_for_status()
    data = resp.json()

在这种情况下,返回值是一个requests.Response对象。

作为GitHub应用程序安装进行认证

要作为应用程序安装进行认证,您需要

  1. 您的应用程序的GitHub应用程序ID。
  2. 与您的应用关联的私钥。这可以从您的应用设置页面生成。
  3. 安装该应用的机构或用户。
  4. 可选:限制访问的仓库列表。
from simple_github import AppClient
app_id = 123
privkey = "<private key>"
owner = "mozilla-releng"

async with AppClient(app_id, privkey, owner=owner) as session:
    resp = await session.get("/octocat")

您还可以指定仓库以限制访问。

async with AppClient(app_id, privkey, owner=owner, repositories=["simple-github"]) as session:
    resp = await session.get("/octocat")

作为Github应用进行身份验证

您还可以作为应用本身进行身份验证。这主要用于管理应用。为此,只需省略owner参数。

async with AppClient(app_id, privkey) as session:
    resp = await session.get("/octocat")

无身份验证

最后,您可以创建一个无需任何身份验证的客户端。这主要用于在提供身份验证方法不是必需的情况下,例如提高速率限制。这允许更简单的实现。

from simple_github import PublicClient

async with PublicClient() as session:
    resp = await session.get("/octocat")

查询REST API

simple-github仅为Github的REST API提供了一个非常基本的包装。您可以通过传递路径片段到session.getsession.post来查询它。

例如,您可以通过GET请求列出拉取请求

resp = await session.get("/repos/mozilla-releng/simple-github/pulls")
pulls = await resp.json()
await resp.close()
open_pulls = [p for p in pulls if p["state"] == "open"]

或者您可以通过POST请求创建一个拉取请求

data = {
    "title": "Add feature X",
    "body": "This adds new feature X",
    "head": "simple-github:featureX",
    "base": "main",
}
await session.post("/repos/mozilla-releng/simple-github/pulls", data=data)

查询GraphQL API

simple-github还支持GraphQL API。在此示例中,我们获取文件内容

query = """
  query getFileContents {
    repository(owner: "mozilla-releng", name: "simple-github") {
      object(expression: "HEAD:README.md") {
        ... on Blob {
          text
        }
      }
    }
  }
"""
contents = await session.execute(query)

您可以通过session.executevariables参数使用GraphQL变量。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

simple_github-2.1.0.tar.gz (130.8 kB 查看散列)

上传

构建分布

simple_github-2.1.0-py3-none-any.whl (13.4 kB 查看散列)

上传 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面