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
@@ -0,0 +1,459 @@
1
+ """AbstractRepoContentsResource, RepoContentsResource, and AsyncRepoContentsResource resource group."""
2
+
3
+ from abc import ABC, abstractmethod
4
+ from typing import List, Optional
5
+
6
+ from ..._models import (
7
+ Blob,
8
+ CommitResult,
9
+ ContentObject,
10
+ Tree,
11
+ )
12
+ from .._shared import AsyncResource, SyncResource
13
+
14
+ # mypy: disable-error-code=override
15
+ # pylint: disable=invalid-overridden-method,protected-access,redefined-builtin
16
+
17
+
18
+ class AbstractRepoContentsResource(ABC):
19
+ """Interface for RepoContents resource endpoints."""
20
+
21
+ @abstractmethod
22
+ def get(
23
+ self,
24
+ *,
25
+ path: str,
26
+ owner: Optional[str] = None,
27
+ repo: Optional[str] = None,
28
+ ref: Optional[str] = None,
29
+ ) -> ContentObject:
30
+ """Get a file or directory entry from a repository.
31
+
32
+ :param path: Repository-relative file path.
33
+ :param owner: Repository owner path. Uses the client default when omitted.
34
+ :param repo: Repository name. Uses the client default when omitted.
35
+ :param ref: Optional branch, tag, or commit SHA.
36
+ :returns: Content metadata and payload details.
37
+ """
38
+
39
+ @abstractmethod
40
+ def create(
41
+ self,
42
+ *,
43
+ path: str,
44
+ content: str,
45
+ message: str,
46
+ owner: Optional[str] = None,
47
+ repo: Optional[str] = None,
48
+ branch: Optional[str] = None,
49
+ author_name: Optional[str] = None,
50
+ author_email: Optional[str] = None,
51
+ ) -> CommitResult:
52
+ """Create a file in a repository.
53
+
54
+ :param path: Repository-relative file path.
55
+ :param content: File content, typically base64-encoded for this API.
56
+ :param message: Commit message.
57
+ :param owner: Repository owner path. Uses the client default when omitted.
58
+ :param repo: Repository name. Uses the client default when omitted.
59
+ :param branch: Optional target branch.
60
+ :param author_name: Optional commit author name.
61
+ :param author_email: Optional commit author email.
62
+ :returns: Commit result payload.
63
+ """
64
+
65
+ @abstractmethod
66
+ def update(
67
+ self,
68
+ *,
69
+ path: str,
70
+ content: str,
71
+ message: str,
72
+ sha: str,
73
+ owner: Optional[str] = None,
74
+ repo: Optional[str] = None,
75
+ branch: Optional[str] = None,
76
+ author_name: Optional[str] = None,
77
+ author_email: Optional[str] = None,
78
+ ) -> CommitResult:
79
+ """Update a file in a repository.
80
+
81
+ :param path: Repository-relative file path.
82
+ :param content: Updated file content, typically base64-encoded.
83
+ :param message: Commit message.
84
+ :param sha: Current blob SHA required by the API.
85
+ :param owner: Repository owner path. Uses the client default when omitted.
86
+ :param repo: Repository name. Uses the client default when omitted.
87
+ :param branch: Optional target branch.
88
+ :param author_name: Optional commit author name.
89
+ :param author_email: Optional commit author email.
90
+ :returns: Commit result payload.
91
+ """
92
+
93
+ @abstractmethod
94
+ def delete(
95
+ self,
96
+ *,
97
+ path: str,
98
+ message: str,
99
+ sha: str,
100
+ owner: Optional[str] = None,
101
+ repo: Optional[str] = None,
102
+ branch: Optional[str] = None,
103
+ author_name: Optional[str] = None,
104
+ author_email: Optional[str] = None,
105
+ ) -> CommitResult:
106
+ """Delete a file from a repository.
107
+
108
+ :param path: Repository-relative file path.
109
+ :param message: Commit message.
110
+ :param sha: Current blob SHA required by the API.
111
+ :param owner: Repository owner path. Uses the client default when omitted.
112
+ :param repo: Repository name. Uses the client default when omitted.
113
+ :param branch: Optional target branch.
114
+ :param author_name: Optional commit author name.
115
+ :param author_email: Optional commit author email.
116
+ :returns: Commit result payload.
117
+ """
118
+
119
+ @abstractmethod
120
+ def list_paths(
121
+ self,
122
+ *,
123
+ owner: Optional[str] = None,
124
+ repo: Optional[str] = None,
125
+ ref_name: Optional[str] = None,
126
+ file_name: Optional[str] = None,
127
+ ) -> List[str]:
128
+ """List repository paths known to GitCode.
129
+
130
+ :param owner: Repository owner path. Uses the client default when omitted.
131
+ :param repo: Repository name. Uses the client default when omitted.
132
+ :param ref_name: Optional ref name to inspect.
133
+ :param file_name: Optional filename filter.
134
+ :returns: Matching repository paths.
135
+ """
136
+
137
+ @abstractmethod
138
+ def get_tree(
139
+ self,
140
+ *,
141
+ sha: str,
142
+ owner: Optional[str] = None,
143
+ repo: Optional[str] = None,
144
+ recursive: Optional[int] = None,
145
+ page: Optional[int] = None,
146
+ per_page: Optional[int] = None,
147
+ ) -> Tree:
148
+ """Get a Git tree object.
149
+
150
+ :param sha: Tree SHA.
151
+ :param owner: Repository owner path. Uses the client default when omitted.
152
+ :param repo: Repository name. Uses the client default when omitted.
153
+ :param recursive: Pass ``1`` to fetch the tree recursively (query parameter per Repository API).
154
+ :param page: Page number for large trees.
155
+ :param per_page: Page size for large trees.
156
+ :returns: Tree metadata and entries.
157
+ """
158
+
159
+ @abstractmethod
160
+ def get_blob(self, *, sha: str, owner: Optional[str] = None, repo: Optional[str] = None) -> Blob:
161
+ """Get a Git blob object by SHA.
162
+
163
+ :param sha: Blob SHA.
164
+ :param owner: Repository owner path. Uses the client default when omitted.
165
+ :param repo: Repository name. Uses the client default when omitted.
166
+ :returns: Blob metadata and content.
167
+ """
168
+
169
+ @abstractmethod
170
+ def get_raw(
171
+ self,
172
+ *,
173
+ path: str,
174
+ owner: Optional[str] = None,
175
+ repo: Optional[str] = None,
176
+ ref: Optional[str] = None,
177
+ ) -> bytes:
178
+ """Download raw file bytes from a repository.
179
+
180
+ :param path: Repository-relative file path.
181
+ :param owner: Repository owner path. Uses the client default when omitted.
182
+ :param repo: Repository name. Uses the client default when omitted.
183
+ :param ref: Optional branch, tag, or commit SHA.
184
+ :returns: Raw file bytes.
185
+ """
186
+
187
+
188
+ class RepoContentsResource(SyncResource, AbstractRepoContentsResource):
189
+ """Synchronous repository contents endpoints."""
190
+
191
+ def get(
192
+ self,
193
+ *,
194
+ path: str,
195
+ owner: Optional[str] = None,
196
+ repo: Optional[str] = None,
197
+ ref: Optional[str] = None,
198
+ ) -> ContentObject:
199
+ return self._model(
200
+ "GET",
201
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
202
+ ContentObject,
203
+ params={"ref": ref},
204
+ )
205
+
206
+ def create(
207
+ self,
208
+ *,
209
+ path: str,
210
+ content: str,
211
+ message: str,
212
+ owner: Optional[str] = None,
213
+ repo: Optional[str] = None,
214
+ branch: Optional[str] = None,
215
+ author_name: Optional[str] = None,
216
+ author_email: Optional[str] = None,
217
+ ) -> CommitResult:
218
+ return self._model(
219
+ "POST",
220
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
221
+ CommitResult,
222
+ json={
223
+ "content": content,
224
+ "message": message,
225
+ "branch": branch,
226
+ "author": {"name": author_name, "email": author_email},
227
+ },
228
+ )
229
+
230
+ def update(
231
+ self,
232
+ *,
233
+ path: str,
234
+ content: str,
235
+ message: str,
236
+ sha: str,
237
+ owner: Optional[str] = None,
238
+ repo: Optional[str] = None,
239
+ branch: Optional[str] = None,
240
+ author_name: Optional[str] = None,
241
+ author_email: Optional[str] = None,
242
+ ) -> CommitResult:
243
+ return self._model(
244
+ "PUT",
245
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
246
+ CommitResult,
247
+ json={
248
+ "content": content,
249
+ "message": message,
250
+ "sha": sha,
251
+ "branch": branch,
252
+ "author": {"name": author_name, "email": author_email},
253
+ },
254
+ )
255
+
256
+ def delete(
257
+ self,
258
+ *,
259
+ path: str,
260
+ message: str,
261
+ sha: str,
262
+ owner: Optional[str] = None,
263
+ repo: Optional[str] = None,
264
+ branch: Optional[str] = None,
265
+ author_name: Optional[str] = None,
266
+ author_email: Optional[str] = None,
267
+ ) -> CommitResult:
268
+ return self._model(
269
+ "DELETE",
270
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
271
+ CommitResult,
272
+ json={
273
+ "message": message,
274
+ "sha": sha,
275
+ "branch": branch,
276
+ "author": {"name": author_name, "email": author_email},
277
+ },
278
+ )
279
+
280
+ def list_paths(
281
+ self,
282
+ *,
283
+ owner: Optional[str] = None,
284
+ repo: Optional[str] = None,
285
+ ref_name: Optional[str] = None,
286
+ file_name: Optional[str] = None,
287
+ ) -> List[str]:
288
+ return self._request(
289
+ "GET",
290
+ self._client._repo_path("file_list", owner=owner, repo=repo),
291
+ params={"ref_name": ref_name, "file_name": file_name},
292
+ )
293
+
294
+ def get_tree(
295
+ self,
296
+ *,
297
+ sha: str,
298
+ owner: Optional[str] = None,
299
+ repo: Optional[str] = None,
300
+ recursive: Optional[int] = None,
301
+ page: Optional[int] = None,
302
+ per_page: Optional[int] = None,
303
+ ) -> Tree:
304
+ return self._model(
305
+ "GET",
306
+ self._client._repo_path("git", "trees", sha, owner=owner, repo=repo),
307
+ Tree,
308
+ params={"recursive": recursive, "page": page, "per_page": per_page},
309
+ )
310
+
311
+ def get_blob(self, *, sha: str, owner: Optional[str] = None, repo: Optional[str] = None) -> Blob:
312
+ return self._model("GET", self._client._repo_path("git", "blobs", sha, owner=owner, repo=repo), Blob)
313
+
314
+ def get_raw(
315
+ self,
316
+ *,
317
+ path: str,
318
+ owner: Optional[str] = None,
319
+ repo: Optional[str] = None,
320
+ ref: Optional[str] = None,
321
+ ) -> bytes:
322
+ return self._request(
323
+ "GET",
324
+ self._client._repo_file_path("raw", path, owner=owner, repo=repo),
325
+ params={"ref": ref},
326
+ raw=True,
327
+ )
328
+
329
+
330
+ class AsyncRepoContentsResource(AsyncResource, AbstractRepoContentsResource):
331
+ """Asynchronous repository contents endpoints.
332
+
333
+ Mirrors :class:`RepoContentsResource` (contents, trees, blobs, raw files; see ``docs/rest_api/repos``).
334
+ """
335
+
336
+ async def get(
337
+ self, *, path: str, owner: Optional[str] = None, repo: Optional[str] = None, ref: Optional[str] = None
338
+ ) -> ContentObject:
339
+ return await self._model(
340
+ "GET",
341
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
342
+ ContentObject,
343
+ params={"ref": ref},
344
+ )
345
+
346
+ async def create(
347
+ self,
348
+ *,
349
+ path: str,
350
+ content: str,
351
+ message: str,
352
+ owner: Optional[str] = None,
353
+ repo: Optional[str] = None,
354
+ branch: Optional[str] = None,
355
+ author_name: Optional[str] = None,
356
+ author_email: Optional[str] = None,
357
+ ) -> CommitResult:
358
+ return await self._model(
359
+ "POST",
360
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
361
+ CommitResult,
362
+ json={
363
+ "content": content,
364
+ "message": message,
365
+ "branch": branch,
366
+ "author": {"name": author_name, "email": author_email},
367
+ },
368
+ )
369
+
370
+ async def update(
371
+ self,
372
+ *,
373
+ path: str,
374
+ content: str,
375
+ message: str,
376
+ sha: str,
377
+ owner: Optional[str] = None,
378
+ repo: Optional[str] = None,
379
+ branch: Optional[str] = None,
380
+ author_name: Optional[str] = None,
381
+ author_email: Optional[str] = None,
382
+ ) -> CommitResult:
383
+ return await self._model(
384
+ "PUT",
385
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
386
+ CommitResult,
387
+ json={
388
+ "content": content,
389
+ "message": message,
390
+ "sha": sha,
391
+ "branch": branch,
392
+ "author": {"name": author_name, "email": author_email},
393
+ },
394
+ )
395
+
396
+ async def delete(
397
+ self,
398
+ *,
399
+ path: str,
400
+ message: str,
401
+ sha: str,
402
+ owner: Optional[str] = None,
403
+ repo: Optional[str] = None,
404
+ branch: Optional[str] = None,
405
+ author_name: Optional[str] = None,
406
+ author_email: Optional[str] = None,
407
+ ) -> CommitResult:
408
+ return await self._model(
409
+ "DELETE",
410
+ self._client._repo_file_path("contents", path, owner=owner, repo=repo),
411
+ CommitResult,
412
+ json={
413
+ "message": message,
414
+ "sha": sha,
415
+ "branch": branch,
416
+ "author": {"name": author_name, "email": author_email},
417
+ },
418
+ )
419
+
420
+ async def list_paths(
421
+ self,
422
+ *,
423
+ owner: Optional[str] = None,
424
+ repo: Optional[str] = None,
425
+ ref_name: Optional[str] = None,
426
+ file_name: Optional[str] = None,
427
+ ) -> List[str]:
428
+ return await self._request(
429
+ "GET",
430
+ self._client._repo_path("file_list", owner=owner, repo=repo),
431
+ params={"ref_name": ref_name, "file_name": file_name},
432
+ )
433
+
434
+ async def get_tree(
435
+ self,
436
+ *,
437
+ sha: str,
438
+ owner: Optional[str] = None,
439
+ repo: Optional[str] = None,
440
+ recursive: Optional[int] = None,
441
+ page: Optional[int] = None,
442
+ per_page: Optional[int] = None,
443
+ ) -> Tree:
444
+ return await self._model(
445
+ "GET",
446
+ self._client._repo_path("git", "trees", sha, owner=owner, repo=repo),
447
+ Tree,
448
+ params={"recursive": recursive, "page": page, "per_page": per_page},
449
+ )
450
+
451
+ async def get_blob(self, *, sha: str, owner: Optional[str] = None, repo: Optional[str] = None) -> Blob:
452
+ return await self._model("GET", self._client._repo_path("git", "blobs", sha, owner=owner, repo=repo), Blob)
453
+
454
+ async def get_raw(
455
+ self, *, path: str, owner: Optional[str] = None, repo: Optional[str] = None, ref: Optional[str] = None
456
+ ) -> bytes:
457
+ return await self._request(
458
+ "GET", self._client._repo_file_path("raw", path, owner=owner, repo=repo), params={"ref": ref}, raw=True
459
+ )