gitcode-api 1.2.20__py3-none-any.whl → 1.3.0__py3-none-any.whl

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.
Files changed (43) hide show
  1. gitcode_api/__init__.py +8 -2
  2. gitcode_api/_base_client.py +7 -2
  3. gitcode_api/_exceptions.py +8 -0
  4. gitcode_api/exceptions.py +19 -0
  5. gitcode_api/llm/mcp.py +5 -5
  6. gitcode_api/models.py +205 -0
  7. gitcode_api/resources/__init__.py +1 -1
  8. gitcode_api/resources/_shared/__init__.py +18 -0
  9. gitcode_api/resources/_shared/base.py +129 -0
  10. gitcode_api/resources/{_shared.py → _shared/fetch_template.py} +133 -259
  11. gitcode_api/resources/account/__init__.py +17 -0
  12. gitcode_api/resources/account/oauth_resource_group.py +159 -0
  13. gitcode_api/resources/account/orgs_resource_group.py +422 -0
  14. gitcode_api/resources/account/search_resource_group.py +236 -0
  15. gitcode_api/resources/account/users_resource_group.py +249 -0
  16. gitcode_api/resources/collaboration/__init__.py +20 -0
  17. gitcode_api/resources/collaboration/_helpers.py +10 -0
  18. gitcode_api/resources/collaboration/issues_resource_group.py +855 -0
  19. gitcode_api/resources/collaboration/labels_resource_group.py +248 -0
  20. gitcode_api/resources/collaboration/members_resource_group.py +195 -0
  21. gitcode_api/resources/collaboration/milestones_resource_group.py +192 -0
  22. gitcode_api/resources/collaboration/pulls_resource_group.py +1300 -0
  23. gitcode_api/resources/misc/__init__.py +14 -0
  24. gitcode_api/resources/misc/releases_resource_group.py +445 -0
  25. gitcode_api/resources/misc/tags_resource_group.py +286 -0
  26. gitcode_api/resources/misc/webhooks_resource_group.py +192 -0
  27. gitcode_api/resources/repositories/__init__.py +17 -0
  28. gitcode_api/resources/repositories/branches_resource_group.py +151 -0
  29. gitcode_api/resources/repositories/commits_resource_group.py +333 -0
  30. gitcode_api/resources/repositories/repo_contents_resource_group.py +459 -0
  31. gitcode_api/resources/repositories/repos_resource_group.py +1279 -0
  32. gitcode_api/version.txt +1 -1
  33. {gitcode_api-1.2.20.dist-info → gitcode_api-1.3.0.dist-info}/METADATA +3 -3
  34. gitcode_api-1.3.0.dist-info/RECORD +52 -0
  35. gitcode_api/resources/account.py +0 -1086
  36. gitcode_api/resources/collaboration.py +0 -2818
  37. gitcode_api/resources/misc.py +0 -901
  38. gitcode_api/resources/repositories.py +0 -2197
  39. gitcode_api-1.2.20.dist-info/RECORD +0 -31
  40. {gitcode_api-1.2.20.dist-info → gitcode_api-1.3.0.dist-info}/WHEEL +0 -0
  41. {gitcode_api-1.2.20.dist-info → gitcode_api-1.3.0.dist-info}/entry_points.txt +0 -0
  42. {gitcode_api-1.2.20.dist-info → gitcode_api-1.3.0.dist-info}/licenses/LICENSE +0 -0
  43. {gitcode_api-1.2.20.dist-info → gitcode_api-1.3.0.dist-info}/top_level.txt +0 -0
@@ -1,901 +0,0 @@
1
- """Release, tag, and webhook resource groups."""
2
-
3
- from pathlib import Path
4
- from typing import List, Optional, Union
5
-
6
- from .._models import ProtectedTag, Release, ReleaseUploadURL, Tag, Webhook
7
- from ._shared import AsyncResource, SyncResource
8
-
9
-
10
- class ReleasesResource(SyncResource):
11
- """Synchronous release endpoints."""
12
-
13
- def create(
14
- self,
15
- *,
16
- tag: str,
17
- name: str,
18
- body: str,
19
- owner: Optional[str] = None,
20
- repo: Optional[str] = None,
21
- target_commitish: Optional[str] = None,
22
- release_status: Optional[str] = None,
23
- ) -> Release:
24
- """Create a repository release.
25
-
26
- :param tag: Tag name for the release.
27
- :param name: Release title.
28
- :param body: Release description.
29
- :param owner: Repository owner path. Uses the client default when omitted.
30
- :param repo: Repository path. Uses the client default when omitted.
31
- :param target_commitish: Branch name or commit SHA for creating a missing tag.
32
- :param release_status: Release status, such as ``pre`` or ``latest``.
33
- :returns: Created release payload.
34
- """
35
- return self._model(
36
- "POST",
37
- self._client._repo_path("releases", owner=owner, repo=repo),
38
- Release,
39
- json={
40
- "tag_name": tag,
41
- "name": name,
42
- "body": body,
43
- "target_commitish": target_commitish,
44
- "release_status": release_status,
45
- },
46
- )
47
-
48
- def update(
49
- self,
50
- *,
51
- tag: str,
52
- name: str,
53
- body: str,
54
- owner: Optional[str] = None,
55
- repo: Optional[str] = None,
56
- release_status: Optional[str] = None,
57
- ) -> Release:
58
- """Update a repository release.
59
-
60
- :param tag: Tag name in the release URL path.
61
- :param name: Release name.
62
- :param body: Release description.
63
- :param owner: Repository owner path. Uses the client default when omitted.
64
- :param repo: Repository path. Uses the client default when omitted.
65
- :param release_status: Release status, such as ``pre`` or ``latest``.
66
- :returns: Updated release payload.
67
- """
68
- return self._model(
69
- "PATCH",
70
- self._client._repo_path("releases", tag, owner=owner, repo=repo),
71
- Release,
72
- json={"name": name, "body": body, "release_status": release_status},
73
- )
74
-
75
- def get_upload_url(
76
- self, *, tag: str, file_name: str, owner: Optional[str] = None, repo: Optional[str] = None
77
- ) -> ReleaseUploadURL:
78
- """Get a pre-signed URL for uploading a release attachment.
79
-
80
- :param tag: Tag name in the release URL path.
81
- :param file_name: Attachment file name to upload.
82
- :param owner: Repository owner path. Uses the client default when omitted.
83
- :param repo: Repository path. Uses the client default when omitted.
84
- :returns: Upload URL and required headers.
85
- """
86
- return self._model(
87
- "GET",
88
- self._client._repo_path("releases", tag, "upload_url", owner=owner, repo=repo),
89
- ReleaseUploadURL,
90
- params={"file_name": file_name},
91
- )
92
-
93
- def upload(
94
- self,
95
- *,
96
- tag: str,
97
- file_name: str,
98
- content: Union[bytes, str],
99
- owner: Optional[str] = None,
100
- repo: Optional[str] = None,
101
- upload_timeout: Optional[float] = 300.0,
102
- ) -> None:
103
- """Upload a release attachment through the pre-signed upload URL.
104
-
105
- :param tag: Tag name in the release URL path.
106
- :param file_name: Attachment file name to upload.
107
- :param content: Attachment bytes, or a local file path to read as bytes.
108
- :param owner: Repository owner path. Uses the client default when omitted.
109
- :param repo: Repository path. Uses the client default when omitted.
110
- :param upload_timeout: Timeout for upload operation. Default to 300 (5 minutes).
111
- """
112
- upload_content = Path(content).read_bytes() if isinstance(content, str) else content
113
- if not isinstance(upload_content, bytes):
114
- raise TypeError("content must be bytes or a file path string.")
115
-
116
- upload_url = self.get_upload_url(tag=tag, file_name=file_name, owner=owner, repo=repo)
117
- if not upload_url.url:
118
- raise ValueError("Release upload URL response did not include a URL.")
119
-
120
- self._client._client.request(
121
- "PUT",
122
- upload_url.url,
123
- content=upload_content,
124
- headers=upload_url.headers or {},
125
- timeout=upload_timeout,
126
- )
127
-
128
- def get_by_tag(self, *, tag: str, owner: Optional[str] = None, repo: Optional[str] = None) -> Release:
129
- """Get a repository release by tag name.
130
-
131
- :param tag: Git tag the release is attached to.
132
- :param owner: Repository owner path. Uses the client default when omitted.
133
- :param repo: Repository path. Uses the client default when omitted.
134
- :returns: Release metadata for that tag.
135
- """
136
- return self._model(
137
- "GET",
138
- self._client._repo_path("releases", "tags", tag, owner=owner, repo=repo),
139
- Release,
140
- )
141
-
142
- def list(
143
- self,
144
- *,
145
- owner: Optional[str] = None,
146
- repo: Optional[str] = None,
147
- direction: Optional[str] = None,
148
- page: Optional[int] = None,
149
- per_page: Optional[int] = None,
150
- ) -> List[Release]:
151
- """List releases for a repository.
152
-
153
- :param owner: Repository owner path. Uses the client default when omitted.
154
- :param repo: Repository path. Uses the client default when omitted.
155
- :param direction: Sort direction, for example ``asc`` or ``desc``.
156
- :param page: Page number.
157
- :param per_page: Page size, up to 100.
158
- :returns: Releases ordered as returned by the API.
159
- """
160
- return self._models(
161
- "GET",
162
- self._client._repo_path("releases", owner=owner, repo=repo),
163
- Release,
164
- params={"direction": direction, "page": page, "per_page": per_page},
165
- )
166
-
167
- def get_latest(
168
- self, *, owner: Optional[str] = None, repo: Optional[str] = None, type: Optional[str] = None
169
- ) -> Release:
170
- """Get the latest repository release.
171
-
172
- :param owner: Repository owner path. Uses the client default when omitted.
173
- :param repo: Repository path. Uses the client default when omitted.
174
- :param type: Selection type, either ``updated`` or ``latest``.
175
- :returns: Latest release metadata.
176
- """
177
- return self._model(
178
- "GET",
179
- self._client._repo_path("releases", "latest", owner=owner, repo=repo),
180
- Release,
181
- params={"type": type},
182
- )
183
-
184
- def get(
185
- self,
186
- *,
187
- tag: str,
188
- owner: Optional[str] = None,
189
- repo: Optional[str] = None,
190
- temp_download_url: Optional[Union[bool, str]] = None,
191
- ) -> Release:
192
- """Get a repository release by tag path.
193
-
194
- :param tag: Tag name in the release URL path.
195
- :param owner: Repository owner path. Uses the client default when omitted.
196
- :param repo: Repository path. Uses the client default when omitted.
197
- :param temp_download_url: Whether to return temporary source package and attachment URLs.
198
- :returns: Release metadata.
199
- """
200
- return self._model(
201
- "GET",
202
- self._client._repo_path("releases", tag, owner=owner, repo=repo),
203
- Release,
204
- params={"temp_download_url": temp_download_url},
205
- )
206
-
207
- def download_attachment(
208
- self, *, tag: str, file_name: str, owner: Optional[str] = None, repo: Optional[str] = None
209
- ) -> bytes:
210
- """Download a release attachment as bytes.
211
-
212
- :param tag: Tag name in the release URL path.
213
- :param file_name: Attachment file name.
214
- :param owner: Repository owner path. Uses the client default when omitted.
215
- :param repo: Repository path. Uses the client default when omitted.
216
- :returns: Attachment bytes.
217
- """
218
- return self._request(
219
- "GET",
220
- self._client._repo_path("releases", tag, "attach_files", file_name, "download", owner=owner, repo=repo),
221
- raw=True,
222
- )
223
-
224
-
225
- class TagsResource(SyncResource):
226
- """Synchronous tag endpoints."""
227
-
228
- def list(
229
- self,
230
- *,
231
- owner: Optional[str] = None,
232
- repo: Optional[str] = None,
233
- page: Optional[int] = None,
234
- per_page: Optional[int] = None,
235
- ) -> List[Tag]:
236
- """List tags for a repository.
237
-
238
- :param owner: Repository owner path. Uses the client default when omitted.
239
- :param repo: Repository path. Uses the client default when omitted.
240
- :param page: Page number.
241
- :param per_page: Page size.
242
- :returns: Tags.
243
- """
244
- return self._models(
245
- "GET",
246
- self._client._repo_path("tags", owner=owner, repo=repo),
247
- Tag,
248
- params={"page": page, "per_page": per_page},
249
- )
250
-
251
- def create(
252
- self,
253
- *,
254
- refs: str,
255
- tag_name: str,
256
- owner: Optional[str] = None,
257
- repo: Optional[str] = None,
258
- tag_message: Optional[str] = None,
259
- ) -> Tag:
260
- """Create a tag for a repository.
261
-
262
- :param refs: Object SHA or ref the tag should point to.
263
- :param tag_name: Name of the new tag.
264
- :param owner: Repository owner path. Uses the client default when omitted.
265
- :param repo: Repository path. Uses the client default when omitted.
266
- :param tag_message: Optional annotated tag message.
267
- :returns: Created tag.
268
- """
269
- return self._model(
270
- "POST",
271
- self._client._repo_path("tags", owner=owner, repo=repo),
272
- Tag,
273
- json={"refs": refs, "tag_name": tag_name, "tag_message": tag_message},
274
- )
275
-
276
- def list_protected(
277
- self,
278
- *,
279
- owner: Optional[str] = None,
280
- repo: Optional[str] = None,
281
- page: Optional[int] = None,
282
- per_page: Optional[int] = None,
283
- ) -> List[ProtectedTag]:
284
- """List protected tags for a repository.
285
-
286
- :param owner: Repository owner path. Uses the client default when omitted.
287
- :param repo: Repository path. Uses the client default when omitted.
288
- :param page: Page number.
289
- :param per_page: Page size.
290
- :returns: Protected tag rules.
291
- """
292
- return self._models(
293
- "GET",
294
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
295
- ProtectedTag,
296
- params={"page": page, "per_page": per_page},
297
- )
298
-
299
- def delete_protected(self, *, tag_name: str, owner: Optional[str] = None, repo: Optional[str] = None) -> None:
300
- """Delete a protected tag rule.
301
-
302
- :param tag_name: Protected tag name in the URL path.
303
- :param owner: Repository owner path. Uses the client default when omitted.
304
- :param repo: Repository path. Uses the client default when omitted.
305
- """
306
- self._request("DELETE", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo))
307
-
308
- def get_protected(self, *, tag_name: str, owner: Optional[str] = None, repo: Optional[str] = None) -> ProtectedTag:
309
- """Get details for a protected tag rule.
310
-
311
- :param tag_name: Tag name in the path.
312
- :param owner: Repository owner path. Uses the client default when omitted.
313
- :param repo: Repository path. Uses the client default when omitted.
314
- :returns: Protected tag configuration.
315
- """
316
- return self._model(
317
- "GET",
318
- self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo),
319
- ProtectedTag,
320
- )
321
-
322
- def create_protected(
323
- self,
324
- *,
325
- name: str,
326
- owner: Optional[str] = None,
327
- repo: Optional[str] = None,
328
- create_access_level: Optional[int] = None,
329
- ) -> ProtectedTag:
330
- """Create a protected tag rule.
331
-
332
- :param name: Tag name or pattern to protect.
333
- :param owner: Repository owner path. Uses the client default when omitted.
334
- :param repo: Repository path. Uses the client default when omitted.
335
- :param create_access_level: Minimum access level required to create matching tags (API-specific integer).
336
- :returns: Created rule.
337
- """
338
- return self._model(
339
- "POST",
340
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
341
- ProtectedTag,
342
- json={"name": name, "create_access_level": create_access_level},
343
- )
344
-
345
- def update_protected(
346
- self, *, name: str, create_access_level: int, owner: Optional[str] = None, repo: Optional[str] = None
347
- ) -> ProtectedTag:
348
- """Update a protected tag rule."""
349
- return self._model(
350
- "PUT",
351
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
352
- ProtectedTag,
353
- json={"name": name, "create_access_level": create_access_level},
354
- )
355
-
356
-
357
- class WebhooksResource(SyncResource):
358
- """Synchronous webhook endpoints."""
359
-
360
- def list(
361
- self,
362
- *,
363
- owner: Optional[str] = None,
364
- repo: Optional[str] = None,
365
- page: Optional[int] = None,
366
- per_page: Optional[int] = None,
367
- ) -> List[Webhook]:
368
- """List webhooks for a repository.
369
-
370
- :param owner: Repository owner path. Uses the client default when omitted.
371
- :param repo: Repository path. Uses the client default when omitted.
372
- :param page: Page number.
373
- :param per_page: Page size.
374
- :returns: Hook configurations.
375
- """
376
- return self._models(
377
- "GET",
378
- self._client._repo_path("hooks", owner=owner, repo=repo),
379
- Webhook,
380
- params={"page": page, "per_page": per_page},
381
- )
382
-
383
- def create(self, *, url: str, owner: Optional[str] = None, repo: Optional[str] = None, **payload) -> Webhook:
384
- """Create a repository webhook.
385
-
386
- :param url: Payload URL GitCode should POST events to.
387
- :param owner: Repository owner path. Uses the client default when omitted.
388
- :param repo: Repository path. Uses the client default when omitted.
389
- :param payload: Additional fields from the Webhooks API (events list, secret, content type, etc.).
390
- :returns: Created webhook.
391
- """
392
- payload["url"] = url
393
- return self._model("POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload)
394
-
395
- def get(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> Webhook:
396
- """Get a repository webhook by identifier.
397
-
398
- :param hook_id: Webhook id from the API.
399
- :param owner: Repository owner path. Uses the client default when omitted.
400
- :param repo: Repository path. Uses the client default when omitted.
401
- :returns: Webhook configuration.
402
- """
403
- return self._model("GET", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook)
404
-
405
- def update(
406
- self,
407
- *,
408
- hook_id: Union[int, str],
409
- url: str,
410
- owner: Optional[str] = None,
411
- repo: Optional[str] = None,
412
- **payload,
413
- ) -> Webhook:
414
- """Update a repository webhook.
415
-
416
- :param hook_id: Webhook id.
417
- :param url: New payload URL (merged into the JSON body).
418
- :param owner: Repository owner path. Uses the client default when omitted.
419
- :param repo: Repository path. Uses the client default when omitted.
420
- :param payload: Other mutable webhook fields accepted by the API.
421
- :returns: Updated webhook.
422
- """
423
- payload["url"] = url
424
- return self._model(
425
- "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
426
- )
427
-
428
- def delete(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> None:
429
- """Delete a repository webhook.
430
-
431
- :param hook_id: Webhook id.
432
- :param owner: Repository owner path. Uses the client default when omitted.
433
- :param repo: Repository path. Uses the client default when omitted.
434
- """
435
- self._request("DELETE", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo))
436
-
437
- def test(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> None:
438
- """Send a test delivery for a repository webhook.
439
-
440
- :param hook_id: Webhook id.
441
- :param owner: Repository owner path. Uses the client default when omitted.
442
- :param repo: Repository path. Uses the client default when omitted.
443
- """
444
- self._request("POST", self._client._repo_path("hooks", hook_id, "tests", owner=owner, repo=repo))
445
-
446
-
447
- class AsyncReleasesResource(AsyncResource):
448
- """Asynchronous release endpoints.
449
-
450
- Mirrors :class:`ReleasesResource`; see that class for parameters (Release API in ``docs/rest_api``).
451
- """
452
-
453
- async def create(
454
- self,
455
- *,
456
- tag: str,
457
- name: str,
458
- body: str,
459
- owner: Optional[str] = None,
460
- repo: Optional[str] = None,
461
- target_commitish: Optional[str] = None,
462
- release_status: Optional[str] = None,
463
- ) -> Release:
464
- """Create a repository release.
465
-
466
- :param tag: Tag name for the release.
467
- :param name: Release title.
468
- :param body: Release description.
469
- :param owner: Repository owner path. Uses the client default when omitted.
470
- :param repo: Repository path. Uses the client default when omitted.
471
- :param target_commitish: Branch name or commit SHA for creating a missing tag.
472
- :param release_status: Release status, such as ``pre`` or ``latest``.
473
- :returns: Created release payload.
474
- """
475
- return await self._model(
476
- "POST",
477
- self._client._repo_path("releases", owner=owner, repo=repo),
478
- Release,
479
- json={
480
- "tag_name": tag,
481
- "name": name,
482
- "body": body,
483
- "target_commitish": target_commitish,
484
- "release_status": release_status,
485
- },
486
- )
487
-
488
- async def update(
489
- self,
490
- *,
491
- tag: str,
492
- name: str,
493
- body: str,
494
- owner: Optional[str] = None,
495
- repo: Optional[str] = None,
496
- release_status: Optional[str] = None,
497
- ) -> Release:
498
- """Update a repository release.
499
-
500
- :param tag: Tag name in the release URL path.
501
- :param name: Release name.
502
- :param body: Release description.
503
- :param owner: Repository owner path. Uses the client default when omitted.
504
- :param repo: Repository path. Uses the client default when omitted.
505
- :param release_status: Release status, such as ``pre`` or ``latest``.
506
- :returns: Updated release payload.
507
- """
508
- return await self._model(
509
- "PATCH",
510
- self._client._repo_path("releases", tag, owner=owner, repo=repo),
511
- Release,
512
- json={"name": name, "body": body, "release_status": release_status},
513
- )
514
-
515
- async def get_upload_url(
516
- self, *, tag: str, file_name: str, owner: Optional[str] = None, repo: Optional[str] = None
517
- ) -> ReleaseUploadURL:
518
- """Get a pre-signed URL for uploading a release attachment.
519
-
520
- :param tag: Tag name in the release URL path.
521
- :param file_name: Attachment file name to upload.
522
- :param owner: Repository owner path. Uses the client default when omitted.
523
- :param repo: Repository path. Uses the client default when omitted.
524
- :returns: Upload URL and required headers.
525
- """
526
- return await self._model(
527
- "GET",
528
- self._client._repo_path("releases", tag, "upload_url", owner=owner, repo=repo),
529
- ReleaseUploadURL,
530
- params={"file_name": file_name},
531
- )
532
-
533
- async def upload(
534
- self,
535
- *,
536
- tag: str,
537
- file_name: str,
538
- content: Union[bytes, str],
539
- owner: Optional[str] = None,
540
- repo: Optional[str] = None,
541
- upload_timeout: Optional[float] = 300.0,
542
- ) -> None:
543
- """Upload a release attachment through the pre-signed upload URL.
544
-
545
- :param tag: Tag name in the release URL path.
546
- :param file_name: Attachment file name to upload.
547
- :param content: Attachment bytes, or a local file path to read as bytes.
548
- :param owner: Repository owner path. Uses the client default when omitted.
549
- :param repo: Repository path. Uses the client default when omitted.
550
- :param upload_timeout: Timeout for upload operation. Default to 300 (5 minutes).
551
- """
552
- upload_content = Path(content).read_bytes() if isinstance(content, str) else content
553
- if not isinstance(upload_content, bytes):
554
- raise TypeError("content must be bytes or a file path string.")
555
-
556
- upload_url = await self.get_upload_url(tag=tag, file_name=file_name, owner=owner, repo=repo)
557
- if not upload_url.url:
558
- raise ValueError("Release upload URL response did not include a URL.")
559
-
560
- await self._client._client.request(
561
- "PUT",
562
- upload_url.url,
563
- content=upload_content,
564
- headers=upload_url.headers or {},
565
- timeout=upload_timeout,
566
- )
567
-
568
- async def get_by_tag(self, *, tag: str, owner: Optional[str] = None, repo: Optional[str] = None) -> Release:
569
- """Get a repository release by tag name.
570
-
571
- :param tag: Git tag the release is attached to.
572
- :param owner: Repository owner path. Uses the client default when omitted.
573
- :param repo: Repository path. Uses the client default when omitted.
574
- :returns: Release metadata for that tag.
575
- """
576
- return await self._model(
577
- "GET", self._client._repo_path("releases", "tags", tag, owner=owner, repo=repo), Release
578
- )
579
-
580
- async def list(
581
- self,
582
- *,
583
- owner: Optional[str] = None,
584
- repo: Optional[str] = None,
585
- direction: Optional[str] = None,
586
- page: Optional[int] = None,
587
- per_page: Optional[int] = None,
588
- ) -> List[Release]:
589
- """List releases for a repository.
590
-
591
- :param owner: Repository owner path. Uses the client default when omitted.
592
- :param repo: Repository path. Uses the client default when omitted.
593
- :param direction: Sort direction, for example ``asc`` or ``desc``.
594
- :param page: Page number.
595
- :param per_page: Page size, up to 100.
596
- :returns: Releases ordered as returned by the API.
597
- """
598
- return await self._models(
599
- "GET",
600
- self._client._repo_path("releases", owner=owner, repo=repo),
601
- Release,
602
- params={"direction": direction, "page": page, "per_page": per_page},
603
- )
604
-
605
- async def get_latest(
606
- self, *, owner: Optional[str] = None, repo: Optional[str] = None, type: Optional[str] = None
607
- ) -> Release:
608
- """Get the latest repository release.
609
-
610
- :param owner: Repository owner path. Uses the client default when omitted.
611
- :param repo: Repository path. Uses the client default when omitted.
612
- :param type: Selection type, either ``updated`` or ``latest``.
613
- :returns: Latest release metadata.
614
- """
615
- return await self._model(
616
- "GET",
617
- self._client._repo_path("releases", "latest", owner=owner, repo=repo),
618
- Release,
619
- params={"type": type},
620
- )
621
-
622
- async def get(
623
- self,
624
- *,
625
- tag: str,
626
- owner: Optional[str] = None,
627
- repo: Optional[str] = None,
628
- temp_download_url: Optional[Union[bool, str]] = None,
629
- ) -> Release:
630
- """Get a repository release by tag path.
631
-
632
- :param tag: Tag name in the release URL path.
633
- :param owner: Repository owner path. Uses the client default when omitted.
634
- :param repo: Repository path. Uses the client default when omitted.
635
- :param temp_download_url: Whether to return temporary source package and attachment URLs.
636
- :returns: Release metadata.
637
- """
638
- return await self._model(
639
- "GET",
640
- self._client._repo_path("releases", tag, owner=owner, repo=repo),
641
- Release,
642
- params={"temp_download_url": temp_download_url},
643
- )
644
-
645
- async def download_attachment(
646
- self, *, tag: str, file_name: str, owner: Optional[str] = None, repo: Optional[str] = None
647
- ) -> bytes:
648
- """Download a release attachment as bytes.
649
-
650
- :param tag: Tag name in the release URL path.
651
- :param file_name: Attachment file name.
652
- :param owner: Repository owner path. Uses the client default when omitted.
653
- :param repo: Repository path. Uses the client default when omitted.
654
- :returns: Attachment bytes.
655
- """
656
- return await self._request(
657
- "GET",
658
- self._client._repo_path("releases", tag, "attach_files", file_name, "download", owner=owner, repo=repo),
659
- raw=True,
660
- )
661
-
662
-
663
- class AsyncTagsResource(AsyncResource):
664
- """Asynchronous tag endpoints.
665
-
666
- Mirrors :class:`TagsResource`; see that class and ``docs/rest_api/repos/tag`` for semantics.
667
- """
668
-
669
- async def list(
670
- self,
671
- *,
672
- owner: Optional[str] = None,
673
- repo: Optional[str] = None,
674
- page: Optional[int] = None,
675
- per_page: Optional[int] = None,
676
- ) -> List[Tag]:
677
- """List tags for a repository.
678
-
679
- :param owner: Repository owner path. Uses the client default when omitted.
680
- :param repo: Repository path. Uses the client default when omitted.
681
- :param page: Page number.
682
- :param per_page: Page size.
683
- :returns: Tags.
684
- """
685
- return await self._models(
686
- "GET",
687
- self._client._repo_path("tags", owner=owner, repo=repo),
688
- Tag,
689
- params={"page": page, "per_page": per_page},
690
- )
691
-
692
- async def create(
693
- self,
694
- *,
695
- refs: str,
696
- tag_name: str,
697
- owner: Optional[str] = None,
698
- repo: Optional[str] = None,
699
- tag_message: Optional[str] = None,
700
- ) -> Tag:
701
- """Create a tag for a repository.
702
-
703
- :param refs: Object SHA or ref the tag should point to.
704
- :param tag_name: Name of the new tag.
705
- :param owner: Repository owner path. Uses the client default when omitted.
706
- :param repo: Repository path. Uses the client default when omitted.
707
- :param tag_message: Optional annotated tag message.
708
- :returns: Created tag.
709
- """
710
- return await self._model(
711
- "POST",
712
- self._client._repo_path("tags", owner=owner, repo=repo),
713
- Tag,
714
- json={"refs": refs, "tag_name": tag_name, "tag_message": tag_message},
715
- )
716
-
717
- async def list_protected(
718
- self,
719
- *,
720
- owner: Optional[str] = None,
721
- repo: Optional[str] = None,
722
- page: Optional[int] = None,
723
- per_page: Optional[int] = None,
724
- ) -> List[ProtectedTag]:
725
- """List protected tags for a repository.
726
-
727
- :param owner: Repository owner path. Uses the client default when omitted.
728
- :param repo: Repository path. Uses the client default when omitted.
729
- :param page: Page number.
730
- :param per_page: Page size.
731
- :returns: Protected tag rules.
732
- """
733
- return await self._models(
734
- "GET",
735
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
736
- ProtectedTag,
737
- params={"page": page, "per_page": per_page},
738
- )
739
-
740
- async def delete_protected(self, *, tag_name: str, owner: Optional[str] = None, repo: Optional[str] = None) -> None:
741
- """Delete a protected tag rule.
742
-
743
- :param tag_name: Protected tag name in the URL path.
744
- :param owner: Repository owner path. Uses the client default when omitted.
745
- :param repo: Repository path. Uses the client default when omitted.
746
- """
747
- await self._request("DELETE", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo))
748
-
749
- async def get_protected(
750
- self, *, tag_name: str, owner: Optional[str] = None, repo: Optional[str] = None
751
- ) -> ProtectedTag:
752
- """Get details for a protected tag rule.
753
-
754
- :param tag_name: Tag name in the path.
755
- :param owner: Repository owner path. Uses the client default when omitted.
756
- :param repo: Repository path. Uses the client default when omitted.
757
- :returns: Protected tag configuration.
758
- """
759
- return await self._model(
760
- "GET", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo), ProtectedTag
761
- )
762
-
763
- async def create_protected(
764
- self,
765
- *,
766
- name: str,
767
- owner: Optional[str] = None,
768
- repo: Optional[str] = None,
769
- create_access_level: Optional[int] = None,
770
- ) -> ProtectedTag:
771
- """Create a protected tag rule.
772
-
773
- :param name: Tag name or pattern to protect.
774
- :param owner: Repository owner path. Uses the client default when omitted.
775
- :param repo: Repository path. Uses the client default when omitted.
776
- :param create_access_level: Minimum access level required to create matching tags (API-specific integer).
777
- :returns: Created rule.
778
- """
779
- return await self._model(
780
- "POST",
781
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
782
- ProtectedTag,
783
- json={"name": name, "create_access_level": create_access_level},
784
- )
785
-
786
- async def update_protected(
787
- self, *, name: str, create_access_level: int, owner: Optional[str] = None, repo: Optional[str] = None
788
- ) -> ProtectedTag:
789
- """Update a protected tag rule.
790
-
791
- :param name: Tag name or pattern.
792
- :param create_access_level: New create access level.
793
- :param owner: Repository owner path. Uses the client default when omitted.
794
- :param repo: Repository path. Uses the client default when omitted.
795
- :returns: Updated rule.
796
- """
797
- return await self._model(
798
- "PUT",
799
- self._client._repo_path("protected_tags", owner=owner, repo=repo),
800
- ProtectedTag,
801
- json={"name": name, "create_access_level": create_access_level},
802
- )
803
-
804
-
805
- class AsyncWebhooksResource(AsyncResource):
806
- """Asynchronous webhook endpoints.
807
-
808
- Mirrors :class:`WebhooksResource`; see that class and ``docs/rest_api/repos/webhooks``.
809
- """
810
-
811
- async def list(
812
- self,
813
- *,
814
- owner: Optional[str] = None,
815
- repo: Optional[str] = None,
816
- page: Optional[int] = None,
817
- per_page: Optional[int] = None,
818
- ) -> List[Webhook]:
819
- """List webhooks for a repository.
820
-
821
- :param owner: Repository owner path. Uses the client default when omitted.
822
- :param repo: Repository path. Uses the client default when omitted.
823
- :param page: Page number.
824
- :param per_page: Page size.
825
- :returns: Hook configurations.
826
- """
827
- return await self._models(
828
- "GET",
829
- self._client._repo_path("hooks", owner=owner, repo=repo),
830
- Webhook,
831
- params={"page": page, "per_page": per_page},
832
- )
833
-
834
- async def create(self, *, url: str, owner: Optional[str] = None, repo: Optional[str] = None, **payload) -> Webhook:
835
- """Create a repository webhook.
836
-
837
- :param url: Payload URL GitCode should POST events to.
838
- :param owner: Repository owner path. Uses the client default when omitted.
839
- :param repo: Repository path. Uses the client default when omitted.
840
- :param payload: Additional fields from the Webhooks API (events list, secret, content type, etc.).
841
- :returns: Created webhook.
842
- """
843
- payload["url"] = url
844
- return await self._model(
845
- "POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload
846
- )
847
-
848
- async def get(
849
- self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None
850
- ) -> Webhook:
851
- """Get a repository webhook by identifier.
852
-
853
- :param hook_id: Webhook id from the API.
854
- :param owner: Repository owner path. Uses the client default when omitted.
855
- :param repo: Repository path. Uses the client default when omitted.
856
- :returns: Webhook configuration.
857
- """
858
- return await self._model("GET", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook)
859
-
860
- async def update(
861
- self,
862
- *,
863
- hook_id: Union[int, str],
864
- url: str,
865
- owner: Optional[str] = None,
866
- repo: Optional[str] = None,
867
- **payload,
868
- ) -> Webhook:
869
- """Update a repository webhook.
870
-
871
- :param hook_id: Webhook id.
872
- :param url: New payload URL (merged into the JSON body).
873
- :param owner: Repository owner path. Uses the client default when omitted.
874
- :param repo: Repository path. Uses the client default when omitted.
875
- :param payload: Other mutable webhook fields accepted by the API.
876
- :returns: Updated webhook.
877
- """
878
- payload["url"] = url
879
- return await self._model(
880
- "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
881
- )
882
-
883
- async def delete(
884
- self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None
885
- ) -> None:
886
- """Delete a repository webhook.
887
-
888
- :param hook_id: Webhook id.
889
- :param owner: Repository owner path. Uses the client default when omitted.
890
- :param repo: Repository path. Uses the client default when omitted.
891
- """
892
- await self._request("DELETE", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo))
893
-
894
- async def test(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> None:
895
- """Send a test delivery for a repository webhook.
896
-
897
- :param hook_id: Webhook id.
898
- :param owner: Repository owner path. Uses the client default when omitted.
899
- :param repo: Repository path. Uses the client default when omitted.
900
- """
901
- await self._request("POST", self._client._repo_path("hooks", hook_id, "tests", owner=owner, repo=repo))