gitee-client 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gitee_client-1.0.0/PKG-INFO +430 -0
- gitee_client-1.0.0/README.md +404 -0
- gitee_client-1.0.0/gitee_client/__init__.py +36 -0
- gitee_client-1.0.0/gitee_client/api/__init__.py +4 -0
- gitee_client-1.0.0/gitee_client/api/activity.py +642 -0
- gitee_client-1.0.0/gitee_client/api/base.py +104 -0
- gitee_client-1.0.0/gitee_client/api/checks.py +233 -0
- gitee_client-1.0.0/gitee_client/api/emails.py +29 -0
- gitee_client-1.0.0/gitee_client/api/enterprises.py +497 -0
- gitee_client-1.0.0/gitee_client/api/gists.py +384 -0
- gitee_client-1.0.0/gitee_client/api/git_data.py +69 -0
- gitee_client-1.0.0/gitee_client/api/issues.py +788 -0
- gitee_client-1.0.0/gitee_client/api/labels.py +299 -0
- gitee_client-1.0.0/gitee_client/api/milestones.py +151 -0
- gitee_client-1.0.0/gitee_client/api/miscellaneous.py +141 -0
- gitee_client-1.0.0/gitee_client/api/organizations.py +374 -0
- gitee_client-1.0.0/gitee_client/api/pulls.py +722 -0
- gitee_client-1.0.0/gitee_client/api/repos.py +2007 -0
- gitee_client-1.0.0/gitee_client/api/search.py +169 -0
- gitee_client-1.0.0/gitee_client/api/users.py +423 -0
- gitee_client-1.0.0/gitee_client/api/webhooks.py +179 -0
- gitee_client-1.0.0/gitee_client/client.py +314 -0
- gitee_client-1.0.0/gitee_client/error.py +104 -0
- gitee_client-1.0.0/gitee_client/models/__init__.py +11 -0
- gitee_client-1.0.0/gitee_client/models/activity.py +78 -0
- gitee_client-1.0.0/gitee_client/models/check.py +36 -0
- gitee_client-1.0.0/gitee_client/models/common.py +278 -0
- gitee_client-1.0.0/gitee_client/models/enterprise.py +42 -0
- gitee_client-1.0.0/gitee_client/models/git.py +15 -0
- gitee_client-1.0.0/gitee_client/models/issue.py +83 -0
- gitee_client-1.0.0/gitee_client/models/org.py +71 -0
- gitee_client-1.0.0/gitee_client/models/pull_request.py +101 -0
- gitee_client-1.0.0/gitee_client/models/repo.py +494 -0
- gitee_client-1.0.0/gitee_client/pagination.py +100 -0
- gitee_client-1.0.0/gitee_client/utils.py +42 -0
- gitee_client-1.0.0/gitee_client.egg-info/PKG-INFO +430 -0
- gitee_client-1.0.0/gitee_client.egg-info/SOURCES.txt +40 -0
- gitee_client-1.0.0/gitee_client.egg-info/dependency_links.txt +1 -0
- gitee_client-1.0.0/gitee_client.egg-info/requires.txt +1 -0
- gitee_client-1.0.0/gitee_client.egg-info/top_level.txt +1 -0
- gitee_client-1.0.0/pyproject.toml +43 -0
- gitee_client-1.0.0/setup.cfg +4 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitee-client
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Gitee API v5 Python 客户端库 — 覆盖全部 264 个端点
|
|
5
|
+
Author: TableRogue
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://gitee.com/TableRogue/gitee_client
|
|
8
|
+
Project-URL: Repository, https://gitee.com/TableRogue/gitee_client
|
|
9
|
+
Project-URL: Issues, https://gitee.com/TableRogue/gitee_client/issues
|
|
10
|
+
Keywords: gitee,api,client,git,china
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Requires-Dist: requests>=2.25
|
|
26
|
+
|
|
27
|
+
# Gitee API v5 Python Client
|
|
28
|
+
|
|
29
|
+
基于 [Gitee Open API v5](https://gitee.com/api/v5/swagger.json) 的完整 Python 客户端库。
|
|
30
|
+
|
|
31
|
+
## 特性
|
|
32
|
+
|
|
33
|
+
- **完整覆盖** — 175 个端点、16 个资源分组,全部可用
|
|
34
|
+
- **直观的命名** — `client.repos.create_user_repos(...)`, `client.issues.list_repos_issues(...)`
|
|
35
|
+
- **类型安全** — 82 个 TypedDict 数据模型,完整的类型提示
|
|
36
|
+
- **自动分页** — `list_*_all()` 方法自动遍历所有页面
|
|
37
|
+
- **统一的错误处理** — 异常层次结构清晰
|
|
38
|
+
- **轻量依赖** — 仅需 `requests`
|
|
39
|
+
|
|
40
|
+
## 安装
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pip install requests # 唯一依赖
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
将 `gitee_client/` 目录复制到你的项目中即可使用。
|
|
47
|
+
|
|
48
|
+
## 快速开始
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from gitee_client import GiteeClient
|
|
52
|
+
|
|
53
|
+
# 初始化(自动从 GITEE_ACCESS_TOKEN 环境变量读取 token)
|
|
54
|
+
client = GiteeClient()
|
|
55
|
+
|
|
56
|
+
# 或显式传入 token
|
|
57
|
+
client = GiteeClient(access_token="your_access_token")
|
|
58
|
+
|
|
59
|
+
# 也可用作上下文管理器
|
|
60
|
+
with GiteeClient() as client:
|
|
61
|
+
repos = client.repos.list_user_repos()
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 使用示例
|
|
65
|
+
|
|
66
|
+
### 仓库操作
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
# 列出当前用户的所有仓库
|
|
70
|
+
repos = client.repos.list_user_repos()
|
|
71
|
+
|
|
72
|
+
# 遍历所有仓库(自动分页)
|
|
73
|
+
for repo in client.repos.list_user_repos_all():
|
|
74
|
+
print(repo["full_name"])
|
|
75
|
+
|
|
76
|
+
# 创建仓库
|
|
77
|
+
new_repo = client.repos.create_user_repos(
|
|
78
|
+
name="my-project",
|
|
79
|
+
description="项目描述",
|
|
80
|
+
auto_init=True,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# 获取指定仓库
|
|
84
|
+
repo = client.repos.get_repos(owner="username", repo="repo-name")
|
|
85
|
+
|
|
86
|
+
# 更新仓库设置
|
|
87
|
+
client.repos.update_repos(
|
|
88
|
+
owner="username", repo="repo-name",
|
|
89
|
+
name="repo-name",
|
|
90
|
+
description="新的描述",
|
|
91
|
+
private=True,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# 删除仓库
|
|
95
|
+
client.repos.delete_repos(owner="username", repo="repo-name")
|
|
96
|
+
|
|
97
|
+
# 列出某个用户的公开仓库
|
|
98
|
+
repos = client.repos.list_users_repos(username="someone")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Issue 操作
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
# 列出仓库的所有 Issue
|
|
105
|
+
issues = client.issues.list_repos_issues(
|
|
106
|
+
owner="username", repo="repo-name", state="open"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
# 创建 Issue
|
|
110
|
+
issue = client.issues.create_repos_issues(
|
|
111
|
+
owner="username", repo="repo-name",
|
|
112
|
+
title="Bug 报告",
|
|
113
|
+
body="详细描述...",
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# 获取单个 Issue
|
|
117
|
+
issue = client.issues.get_repos_issues(
|
|
118
|
+
owner="username", repo="repo-name", number=1
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# 更新 Issue
|
|
122
|
+
client.issues.update_repos_issues(
|
|
123
|
+
owner="username", repo="repo-name",
|
|
124
|
+
number=1, title="更新后的标题"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
# 列出 Issue 评论
|
|
128
|
+
comments = client.issues.list_repos_issues_comments(
|
|
129
|
+
owner="username", repo="repo-name", number=1
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# 创建 Issue 评论
|
|
133
|
+
client.issues.create_repos_issues_comments(
|
|
134
|
+
owner="username", repo="repo-name",
|
|
135
|
+
number=1, body="我的评论"
|
|
136
|
+
)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Pull Request 操作
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
# 列出 Pull Requests
|
|
143
|
+
prs = client.pulls.list_repos_pulls(
|
|
144
|
+
owner="username", repo="repo-name", state="open"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
# 创建 Pull Request
|
|
148
|
+
pr = client.pulls.create_repos_pulls(
|
|
149
|
+
owner="username", repo="repo-name",
|
|
150
|
+
title="新功能",
|
|
151
|
+
head="feature-branch",
|
|
152
|
+
base="master",
|
|
153
|
+
body="实现说明...",
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
# 获取单个 PR
|
|
157
|
+
pr = client.pulls.get_repos_pulls(
|
|
158
|
+
owner="username", repo="repo-name", number=1
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
# 合并 PR
|
|
162
|
+
client.pulls.update_repos_pulls_merge(
|
|
163
|
+
owner="username", repo="repo-name", number=1
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# PR 审查
|
|
167
|
+
client.pulls.create_repos_pulls_review(
|
|
168
|
+
owner="username", repo="repo-name", number=1
|
|
169
|
+
)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 用户操作
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
# 获取当前用户信息
|
|
176
|
+
me = client.users.list_user()
|
|
177
|
+
|
|
178
|
+
# 获取指定用户信息
|
|
179
|
+
user = client.users.get_users(username="someone")
|
|
180
|
+
|
|
181
|
+
# 更新用户资料
|
|
182
|
+
client.users.update_user(name="新名字", blog="https://example.com")
|
|
183
|
+
|
|
184
|
+
# 关注用户
|
|
185
|
+
client.users.update_user_following(username="someone")
|
|
186
|
+
|
|
187
|
+
# 取消关注
|
|
188
|
+
client.users.delete_user_following(username="someone")
|
|
189
|
+
|
|
190
|
+
# 列出关注者
|
|
191
|
+
followers = client.users.list_user_followers()
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 搜索
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
# 搜索仓库
|
|
198
|
+
results = client.search.list_search_repositories(q="gitee", language="python")
|
|
199
|
+
|
|
200
|
+
# 遍历所有搜索结果
|
|
201
|
+
for repo in client.search.list_search_repositories_all(q="open source"):
|
|
202
|
+
print(repo["full_name"])
|
|
203
|
+
|
|
204
|
+
# 搜索 Issue
|
|
205
|
+
issues = client.search.list_search_issues(q="bug", repo="owner/repo")
|
|
206
|
+
|
|
207
|
+
# 搜索用户
|
|
208
|
+
users = client.search.list_search_users(q="developer")
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 组织操作
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# 列出用户所属的组织
|
|
215
|
+
orgs = client.organizations.list_user_orgs()
|
|
216
|
+
|
|
217
|
+
# 获取组织信息
|
|
218
|
+
org = client.organizations.get_orgs(org="org-name")
|
|
219
|
+
|
|
220
|
+
# 列出组织成员
|
|
221
|
+
members = client.organizations.list_orgs_members(org="org-name")
|
|
222
|
+
|
|
223
|
+
# 创建组织
|
|
224
|
+
client.organizations.create_users_organization(
|
|
225
|
+
name="new-org",
|
|
226
|
+
org="new-org",
|
|
227
|
+
)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Gist 操作
|
|
231
|
+
|
|
232
|
+
```python
|
|
233
|
+
# 列出代码片段
|
|
234
|
+
gists = client.gists.list_gists()
|
|
235
|
+
|
|
236
|
+
# 创建代码片段
|
|
237
|
+
gist = client.gists.create_gists(
|
|
238
|
+
files={"hello.py": {"content": "print('Hello World')"}},
|
|
239
|
+
description="我的第一个 Gist",
|
|
240
|
+
public=True,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# 获取单个代码片段
|
|
244
|
+
gist = client.gists.get_gists(id="gist_id")
|
|
245
|
+
|
|
246
|
+
# 删除代码片段
|
|
247
|
+
client.gists.delete_gists(id="gist_id")
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 标签和里程碑
|
|
251
|
+
|
|
252
|
+
```python
|
|
253
|
+
# 列出仓库标签
|
|
254
|
+
labels = client.labels.list_repos_labels(owner="user", repo="repo")
|
|
255
|
+
|
|
256
|
+
# 创建标签
|
|
257
|
+
client.labels.create_repos_labels(
|
|
258
|
+
owner="user", repo="repo",
|
|
259
|
+
name="bug", color="#ff0000"
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# 列出里程碑
|
|
263
|
+
milestones = client.milestones.list_repos_milestones(owner="user", repo="repo")
|
|
264
|
+
|
|
265
|
+
# 创建里程碑
|
|
266
|
+
client.milestones.create_repos_milestones(
|
|
267
|
+
owner="user", repo="repo",
|
|
268
|
+
title="v1.0",
|
|
269
|
+
due_on="2026-12-31",
|
|
270
|
+
)
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Webhook 管理
|
|
274
|
+
|
|
275
|
+
```python
|
|
276
|
+
# 列出 Webhooks
|
|
277
|
+
hooks = client.webhooks.list_repos_hooks(owner="user", repo="repo")
|
|
278
|
+
|
|
279
|
+
# 创建 Webhook
|
|
280
|
+
hook = client.webhooks.create_repos_hooks(
|
|
281
|
+
owner="user", repo="repo",
|
|
282
|
+
url="https://example.com/webhook",
|
|
283
|
+
password="secret",
|
|
284
|
+
push_events=True,
|
|
285
|
+
)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### 企业版功能
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# 列出企业成员
|
|
292
|
+
members = client.enterprises.list_enterprises_members(enterprise="enterprise-name")
|
|
293
|
+
|
|
294
|
+
# 获取企业信息
|
|
295
|
+
enterprise = client.enterprises.get_enterprises(enterprise="enterprise-name")
|
|
296
|
+
|
|
297
|
+
# 企业 Issue 列表
|
|
298
|
+
issues = client.issues.list_enterprises_issues(enterprise="enterprise-name")
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 其他功能
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
# 获取 Emoji 列表
|
|
305
|
+
emojis = client.misc.list_emojis()
|
|
306
|
+
|
|
307
|
+
# 获取 Gitignore 模板列表
|
|
308
|
+
templates = client.misc.list_gitignore_templates()
|
|
309
|
+
|
|
310
|
+
# 获取 License 列表
|
|
311
|
+
licenses = client.misc.list_licenses()
|
|
312
|
+
|
|
313
|
+
# 渲染 Markdown
|
|
314
|
+
html = client.misc.create_markdown(text="# Hello\n\nThis is **markdown**.")
|
|
315
|
+
|
|
316
|
+
# 获取授权用户的邮箱
|
|
317
|
+
emails = client.emails.list_emails()
|
|
318
|
+
|
|
319
|
+
# 获取 Gitee 指数
|
|
320
|
+
metrics = client.git_data.get_repos_git_gitee_metrics(owner="user", repo="repo")
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## API 资源分组
|
|
324
|
+
|
|
325
|
+
| 属性 | 模块 | 端点数量 | 说明 |
|
|
326
|
+
|------|------|---------|------|
|
|
327
|
+
| `client.repos` | 仓库 | 76 | 仓库 CRUD、分支、标签、发布、协作者、提交、内容等 |
|
|
328
|
+
| `client.pulls` | Pull Requests | 27 | PR 的创建、审查、合并、测试、指派等 |
|
|
329
|
+
| `client.activity` | 动态 | 26 | 通知、私信、动态、Watch 等 |
|
|
330
|
+
| `client.issues` | Issues | 21 | Issue 的增删改查、评论、操作日志等 |
|
|
331
|
+
| `client.users` | 用户 | 18 | 用户资料、关注、SSH 公钥等 |
|
|
332
|
+
| `client.enterprises` | 企业 | 17 | 企业管理、成员管理、周报等 |
|
|
333
|
+
| `client.gists` | Gists | 17 | 代码片段的增删改查、评论、Star、Fork 等 |
|
|
334
|
+
| `client.labels` | 标签 | 16 | 仓库标签、Issue 标签的增删改查 |
|
|
335
|
+
| `client.organizations` | 组织 | 14 | 组织管理、成员管理、关注者等 |
|
|
336
|
+
| `client.misc` | 杂项 | 9 | Emoji、Gitignore 模板、License、Markdown 渲染 |
|
|
337
|
+
| `client.webhooks` | Webhooks | 6 | Webhook 的增删改查和测试 |
|
|
338
|
+
| `client.checks` | 检查 | 5 | Check Runs 的创建、更新、查询 |
|
|
339
|
+
| `client.milestones` | 里程碑 | 5 | 里程碑的增删改查 |
|
|
340
|
+
| `client.search` | 搜索 | 3 | 搜索仓库、Issue、用户 |
|
|
341
|
+
| `client.git_data` | Git 数据 | 3 | Blob、Tree、Gitee 指数 |
|
|
342
|
+
| `client.emails` | 邮箱 | 1 | 获取授权用户邮箱 |
|
|
343
|
+
|
|
344
|
+
## 方法命名规则
|
|
345
|
+
|
|
346
|
+
方法名遵循 `{动作}_{资源路径}` 的命名模式:
|
|
347
|
+
|
|
348
|
+
- `list_*` — GET 请求,返回列表(支持分页)
|
|
349
|
+
- `get_*` — GET 请求,返回单个资源
|
|
350
|
+
- `create_*` — POST 请求,创建资源
|
|
351
|
+
- `update_*` — PUT/PATCH 请求,更新资源
|
|
352
|
+
- `delete_*` — DELETE 请求,删除资源
|
|
353
|
+
|
|
354
|
+
带有 `_all` 后缀的方法(如 `list_user_repos_all()`)是自动分页的便捷包装,返回生成器遍历所有结果。
|
|
355
|
+
|
|
356
|
+
## 分页
|
|
357
|
+
|
|
358
|
+
支持分页的 `list_*` 方法接受 `page` 和 `per_page` 参数:
|
|
359
|
+
|
|
360
|
+
```python
|
|
361
|
+
# 手动分页
|
|
362
|
+
page1 = client.repos.list_user_repos(page=1, per_page=20)
|
|
363
|
+
|
|
364
|
+
# 自动遍历所有页面
|
|
365
|
+
for repo in client.repos.list_user_repos_all(per_page=50):
|
|
366
|
+
print(repo["full_name"])
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## 错误处理
|
|
370
|
+
|
|
371
|
+
```python
|
|
372
|
+
from gitee_client import (
|
|
373
|
+
GiteeError, GiteeAPIError, GiteeAuthError,
|
|
374
|
+
GiteeNotFoundError, GiteeValidationError,
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
try:
|
|
378
|
+
client.repos.get_repos(owner="nonexistent", repo="repo")
|
|
379
|
+
except GiteeNotFoundError as e:
|
|
380
|
+
print(f"资源不存在: {e}")
|
|
381
|
+
except GiteeAuthError as e:
|
|
382
|
+
print(f"认证失败: {e}")
|
|
383
|
+
except GiteeAPIError as e:
|
|
384
|
+
print(f"API 错误 {e.status_code}: {e.error_message}")
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
异常层次结构:
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
GiteeError
|
|
391
|
+
└── GiteeAPIError
|
|
392
|
+
├── GiteeAuthError (401, 403)
|
|
393
|
+
├── GiteeNotFoundError (404)
|
|
394
|
+
├── GiteeValidationError (422)
|
|
395
|
+
├── GiteeRateLimitError (429)
|
|
396
|
+
└── GiteeServerError (5xx)
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
## 认证
|
|
400
|
+
|
|
401
|
+
通过 Gitee 个人访问令牌([获取 token](https://gitee.com/profile/personal_access_tokens))进行认证:
|
|
402
|
+
|
|
403
|
+
```python
|
|
404
|
+
# 方式 1: 环境变量
|
|
405
|
+
export GITEE_ACCESS_TOKEN="your_token_here"
|
|
406
|
+
|
|
407
|
+
# 方式 2: 直接传入
|
|
408
|
+
client = GiteeClient(access_token="your_token_here")
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## 数据模型
|
|
412
|
+
|
|
413
|
+
所有响应数据都有对应的 TypedDict 类型定义:
|
|
414
|
+
|
|
415
|
+
```python
|
|
416
|
+
from gitee_client.models import Project, User, Issue, PullRequest
|
|
417
|
+
|
|
418
|
+
def process_repo(repo: Project) -> None:
|
|
419
|
+
print(repo["full_name"]) # IDE 自动补全
|
|
420
|
+
print(repo["html_url"])
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## 依赖
|
|
424
|
+
|
|
425
|
+
- Python >= 3.8
|
|
426
|
+
- requests
|
|
427
|
+
|
|
428
|
+
## 许可
|
|
429
|
+
|
|
430
|
+
MIT
|