gitcode-api 1.3.1__py3-none-any.whl → 1.3.3__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.
@@ -48,12 +48,26 @@ class AbstractPullsResource(ABC):
48
48
  direction: Optional[str] = None,
49
49
  page: Optional[int] = None,
50
50
  per_page: Optional[int] = None,
51
- **params,
51
+ base: Optional[str] = None,
52
+ since: Optional[str] = None,
53
+ milestone_number: Optional[int] = None,
54
+ labels: Optional[str] = None,
55
+ author: Optional[str] = None,
56
+ assignee: Optional[str] = None,
57
+ reviewer: Optional[str] = None,
58
+ merged_after: Optional[str] = None,
59
+ merged_before: Optional[str] = None,
60
+ only_count: Optional[bool] = None,
61
+ created_after: Optional[str] = None,
62
+ created_before: Optional[str] = None,
63
+ updated_before: Optional[str] = None,
64
+ updated_after: Optional[str] = None,
65
+ **kwargs,
52
66
  ) -> Union[List[PullRequest], PullRequestCount]:
53
67
  """List pull requests for a repository.
54
68
 
55
- When ``only_count`` is true in ``params`` (or passed via ``**params``), the API returns a
56
- JSON object with counts per state instead of an array (see Pull Request API).
69
+ When ``only_count`` is true, the API returns a JSON object with counts per state
70
+ instead of an array (see Pull Request API).
57
71
 
58
72
  :param owner: Repository owner path. Uses the client default when omitted.
59
73
  :param repo: Repository path (name). Uses the client default when omitted.
@@ -62,10 +76,21 @@ class AbstractPullsResource(ABC):
62
76
  :param direction: ``asc`` or ``desc`` (API default is usually ``desc``).
63
77
  :param page: Current page number.
64
78
  :param per_page: Page size (max 100 per API documentation).
65
- :param params: Extra query parameters from the Pull Request API, for example ``base``,
66
- ``since``, ``author``, ``assignee``, ``reviewer``, ``milestone_number``, ``labels`` (comma-separated),
67
- ``merged_after``, ``merged_before``, ``created_after``, ``created_before``, ``updated_after``,
68
- ``updated_before``, ``only_count`` (boolean), and ISO 8601 timestamps (URL-encoded when sent).
79
+ :param base: Base branch filter.
80
+ :param since: Return PRs updated since this ISO 8601 timestamp.
81
+ :param milestone_number: Milestone number filter.
82
+ :param labels: Comma-separated label names.
83
+ :param author: Username of the PR creator.
84
+ :param assignee: Username of the PR assignee.
85
+ :param reviewer: Username of the PR reviewer.
86
+ :param merged_after: Return PRs merged after this ISO 8601 timestamp.
87
+ :param merged_before: Return PRs merged before this ISO 8601 timestamp.
88
+ :param only_count: If true, only return the count of merge requests.
89
+ :param created_after: Return PRs created after this ISO 8601 timestamp.
90
+ :param created_before: Return PRs created before this ISO 8601 timestamp.
91
+ :param updated_before: Return PRs updated before this ISO 8601 timestamp.
92
+ :param updated_after: Return PRs updated after this ISO 8601 timestamp.
93
+ :param kwargs: Additional arguments forwarded directly in request.
69
94
  :returns: A list of pull requests, or an :class:`~gitcode_api._models.APIObject` for count-only responses.
70
95
  """
71
96
 
@@ -366,28 +391,45 @@ class AbstractPullsResource(ABC):
366
391
 
367
392
  @abstractmethod
368
393
  def list_operation_logs(
369
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **params
394
+ self,
395
+ *,
396
+ number: Union[int, str],
397
+ owner: Optional[str] = None,
398
+ repo: Optional[str] = None,
399
+ sort: Optional[str] = None,
400
+ page: Optional[int] = None,
401
+ per_page: Optional[int] = None,
402
+ **kwargs,
370
403
  ) -> List[PullRequestOperationLog]:
371
404
  """List operation logs for a pull request.
372
405
 
373
406
  :param number: Pull request number.
374
407
  :param owner: Repository owner path. Uses the client default when omitted.
375
408
  :param repo: Repository path. Uses the client default when omitted.
376
- :param params: Additional query parameters accepted by the operate_logs endpoint.
409
+ :param sort: Sort direction: ``desc`` (default) or ``asc``.
410
+ :param page: Page number.
411
+ :param per_page: Page size.
412
+ :param kwargs: Additional arguments forwarded directly in request.
377
413
  :returns: Log entries as generic API objects.
378
414
  """
379
415
 
380
416
  @abstractmethod
381
417
  def request_test(
382
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
418
+ self,
419
+ *,
420
+ number: Union[int, str],
421
+ owner: Optional[str] = None,
422
+ repo: Optional[str] = None,
423
+ force: Optional[bool] = None,
424
+ **kwargs,
383
425
  ) -> None:
384
426
  """Request testing for a pull request.
385
427
 
386
428
  :param number: Pull request number.
387
429
  :param owner: Repository owner path. Uses the client default when omitted.
388
430
  :param repo: Repository path. Uses the client default when omitted.
389
- :param payload: JSON fields required by the test request endpoint.
390
- :returns: Test request result.
431
+ :param force: Force the test to pass (default ``False``), only effective for administrators.
432
+ :param kwargs: Additional arguments forwarded directly in request.
391
433
  """
392
434
 
393
435
  @abstractmethod
@@ -467,20 +509,56 @@ class AbstractPullsResource(ABC):
467
509
  """
468
510
 
469
511
  @abstractmethod
470
- def list_enterprise(self, *, enterprise: str, **params) -> List[PullRequest]:
512
+ def list_enterprise(
513
+ self,
514
+ *,
515
+ enterprise: str,
516
+ repo: Optional[str] = None,
517
+ state: Optional[str] = None,
518
+ issue_number: Optional[int] = None,
519
+ sort: Optional[str] = None,
520
+ direction: Optional[str] = None,
521
+ page: Optional[int] = None,
522
+ per_page: Optional[int] = None,
523
+ **kwargs,
524
+ ) -> List[PullRequest]:
471
525
  """List enterprise pull requests.
472
526
 
473
527
  :param enterprise: Enterprise path or login.
474
- :param params: Query parameters for the enterprise pull_requests listing.
528
+ :param repo: Repository path filter (query parameter).
529
+ :param state: Pull request state filter.
530
+ :param issue_number: Issue global id filter.
531
+ :param sort: Sort field. Default: sorted by creation time.
532
+ :param direction: ``asc`` or ``desc``.
533
+ :param page: Page number.
534
+ :param per_page: Page size.
535
+ :param kwargs: Additional arguments forwarded directly in request.
475
536
  :returns: Pull requests in the enterprise scope.
476
537
  """
477
538
 
478
539
  @abstractmethod
479
- def list_org(self, *, org: str, **params) -> List[PullRequest]:
540
+ def list_org(
541
+ self,
542
+ *,
543
+ org: str,
544
+ state: Optional[str] = None,
545
+ issue_number: Optional[int] = None,
546
+ sort: Optional[str] = None,
547
+ direction: Optional[str] = None,
548
+ page: Optional[int] = None,
549
+ per_page: Optional[int] = None,
550
+ **kwargs,
551
+ ) -> List[PullRequest]:
480
552
  """List pull requests for an organization scope.
481
553
 
482
554
  :param org: Organization path (``GET .../org/{org}/pull_requests``).
483
- :param params: Query parameters accepted by that listing.
555
+ :param state: Pull request state filter.
556
+ :param issue_number: Global issue id filter.
557
+ :param sort: Sort field. Default: sorted by creation time.
558
+ :param direction: ``asc`` or ``desc``.
559
+ :param page: Page number.
560
+ :param per_page: Page size.
561
+ :param kwargs: Additional arguments forwarded directly in request.
484
562
  :returns: Organization-scoped pull requests.
485
563
  """
486
564
 
@@ -553,7 +631,21 @@ class PullsResource(SyncResource, AbstractPullsResource):
553
631
  direction: Optional[str] = None,
554
632
  page: Optional[int] = None,
555
633
  per_page: Optional[int] = None,
556
- **params,
634
+ base: Optional[str] = None,
635
+ since: Optional[str] = None,
636
+ milestone_number: Optional[int] = None,
637
+ labels: Optional[str] = None,
638
+ author: Optional[str] = None,
639
+ assignee: Optional[str] = None,
640
+ reviewer: Optional[str] = None,
641
+ merged_after: Optional[str] = None,
642
+ merged_before: Optional[str] = None,
643
+ only_count: Optional[bool] = None,
644
+ created_after: Optional[str] = None,
645
+ created_before: Optional[str] = None,
646
+ updated_before: Optional[str] = None,
647
+ updated_after: Optional[str] = None,
648
+ **kwargs,
557
649
  ) -> Union[List[PullRequest], PullRequestCount]:
558
650
  path = self._client._repo_path("pulls", owner=owner, repo=repo)
559
651
  response = self._request(
@@ -565,7 +657,21 @@ class PullsResource(SyncResource, AbstractPullsResource):
565
657
  "direction": direction,
566
658
  "page": page,
567
659
  "per_page": per_page,
568
- **params,
660
+ "base": base,
661
+ "since": since,
662
+ "milestone_number": milestone_number,
663
+ "labels": labels,
664
+ "author": author,
665
+ "assignee": assignee,
666
+ "reviewer": reviewer,
667
+ "merged_after": merged_after,
668
+ "merged_before": merged_before,
669
+ "only_count": only_count,
670
+ "created_after": created_after,
671
+ "created_before": created_before,
672
+ "updated_before": updated_before,
673
+ "updated_after": updated_after,
674
+ **kwargs,
569
675
  },
570
676
  )
571
677
  if isinstance(response, dict):
@@ -801,22 +907,36 @@ class PullsResource(SyncResource, AbstractPullsResource):
801
907
  )
802
908
 
803
909
  def list_operation_logs(
804
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **params
910
+ self,
911
+ *,
912
+ number: Union[int, str],
913
+ owner: Optional[str] = None,
914
+ repo: Optional[str] = None,
915
+ sort: Optional[str] = None,
916
+ page: Optional[int] = None,
917
+ per_page: Optional[int] = None,
918
+ **kwargs,
805
919
  ) -> List[PullRequestOperationLog]:
806
920
  data = self._request(
807
921
  "GET",
808
922
  self._client._repo_path("pulls", number, "operate_logs", owner=owner, repo=repo),
809
- params=params,
923
+ params={"sort": sort, "page": page, "per_page": per_page, **kwargs},
810
924
  )
811
925
  return [as_model(item, PullRequestOperationLog) for item in data]
812
926
 
813
927
  def request_test(
814
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
928
+ self,
929
+ *,
930
+ number: Union[int, str],
931
+ owner: Optional[str] = None,
932
+ repo: Optional[str] = None,
933
+ force: Optional[bool] = None,
934
+ **kwargs,
815
935
  ) -> None:
816
936
  self._request(
817
937
  "POST",
818
938
  self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
819
- json=payload,
939
+ json={"force": force, **kwargs},
820
940
  )
821
941
 
822
942
  def update_testers(
@@ -871,13 +991,61 @@ class PullsResource(SyncResource, AbstractPullsResource):
871
991
  ) -> List[Issue]:
872
992
  return self._models("GET", self._client._repo_path("pulls", number, "issues", owner=owner, repo=repo), Issue)
873
993
 
874
- def list_enterprise(self, *, enterprise: str, **params) -> List[PullRequest]:
994
+ def list_enterprise(
995
+ self,
996
+ *,
997
+ enterprise: str,
998
+ repo: Optional[str] = None,
999
+ state: Optional[str] = None,
1000
+ issue_number: Optional[int] = None,
1001
+ sort: Optional[str] = None,
1002
+ direction: Optional[str] = None,
1003
+ page: Optional[int] = None,
1004
+ per_page: Optional[int] = None,
1005
+ **kwargs,
1006
+ ) -> List[PullRequest]:
875
1007
  return self._models(
876
- "GET", self._client._path("enterprises", enterprise, "pull_requests"), PullRequest, params=params
1008
+ "GET",
1009
+ self._client._path("enterprises", enterprise, "pull_requests"),
1010
+ PullRequest,
1011
+ params={
1012
+ "repo": repo,
1013
+ "state": state,
1014
+ "issue_number": issue_number,
1015
+ "sort": sort,
1016
+ "direction": direction,
1017
+ "page": page,
1018
+ "per_page": per_page,
1019
+ **kwargs,
1020
+ },
877
1021
  )
878
1022
 
879
- def list_org(self, *, org: str, **params) -> List[PullRequest]:
880
- return self._models("GET", self._client._path("org", org, "pull_requests"), PullRequest, params=params)
1023
+ def list_org(
1024
+ self,
1025
+ *,
1026
+ org: str,
1027
+ state: Optional[str] = None,
1028
+ issue_number: Optional[int] = None,
1029
+ sort: Optional[str] = None,
1030
+ direction: Optional[str] = None,
1031
+ page: Optional[int] = None,
1032
+ per_page: Optional[int] = None,
1033
+ **kwargs,
1034
+ ) -> List[PullRequest]:
1035
+ return self._models(
1036
+ "GET",
1037
+ self._client._path("org", org, "pull_requests"),
1038
+ PullRequest,
1039
+ params={
1040
+ "state": state,
1041
+ "issue_number": issue_number,
1042
+ "sort": sort,
1043
+ "direction": direction,
1044
+ "page": page,
1045
+ "per_page": per_page,
1046
+ **kwargs,
1047
+ },
1048
+ )
881
1049
 
882
1050
  def list_issue_pull_requests(self, *, enterprise: str, number: Union[int, str]) -> List[PullRequest]:
883
1051
  return self._models(
@@ -947,7 +1115,21 @@ class AsyncPullsResource(AsyncResource, AbstractPullsResource):
947
1115
  direction: Optional[str] = None,
948
1116
  page: Optional[int] = None,
949
1117
  per_page: Optional[int] = None,
950
- **params,
1118
+ base: Optional[str] = None,
1119
+ since: Optional[str] = None,
1120
+ milestone_number: Optional[int] = None,
1121
+ labels: Optional[str] = None,
1122
+ author: Optional[str] = None,
1123
+ assignee: Optional[str] = None,
1124
+ reviewer: Optional[str] = None,
1125
+ merged_after: Optional[str] = None,
1126
+ merged_before: Optional[str] = None,
1127
+ only_count: Optional[bool] = None,
1128
+ created_after: Optional[str] = None,
1129
+ created_before: Optional[str] = None,
1130
+ updated_before: Optional[str] = None,
1131
+ updated_after: Optional[str] = None,
1132
+ **kwargs,
951
1133
  ) -> Union[List[PullRequest], PullRequestCount]:
952
1134
  response = await self._request(
953
1135
  "GET",
@@ -958,7 +1140,21 @@ class AsyncPullsResource(AsyncResource, AbstractPullsResource):
958
1140
  "direction": direction,
959
1141
  "page": page,
960
1142
  "per_page": per_page,
961
- **params,
1143
+ "base": base,
1144
+ "since": since,
1145
+ "milestone_number": milestone_number,
1146
+ "labels": labels,
1147
+ "author": author,
1148
+ "assignee": assignee,
1149
+ "reviewer": reviewer,
1150
+ "merged_after": merged_after,
1151
+ "merged_before": merged_before,
1152
+ "only_count": only_count,
1153
+ "created_after": created_after,
1154
+ "created_before": created_before,
1155
+ "updated_before": updated_before,
1156
+ "updated_after": updated_after,
1157
+ **kwargs,
962
1158
  },
963
1159
  )
964
1160
  if isinstance(response, dict):
@@ -1173,20 +1369,36 @@ class AsyncPullsResource(AsyncResource, AbstractPullsResource):
1173
1369
  )
1174
1370
 
1175
1371
  async def list_operation_logs(
1176
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **params
1372
+ self,
1373
+ *,
1374
+ number: Union[int, str],
1375
+ owner: Optional[str] = None,
1376
+ repo: Optional[str] = None,
1377
+ sort: Optional[str] = None,
1378
+ page: Optional[int] = None,
1379
+ per_page: Optional[int] = None,
1380
+ **kwargs,
1177
1381
  ) -> List[PullRequestOperationLog]:
1178
1382
  data = await self._request(
1179
- "GET", self._client._repo_path("pulls", number, "operate_logs", owner=owner, repo=repo), params=params
1383
+ "GET",
1384
+ self._client._repo_path("pulls", number, "operate_logs", owner=owner, repo=repo),
1385
+ params={"sort": sort, "page": page, "per_page": per_page, **kwargs},
1180
1386
  )
1181
1387
  return [as_model(item, PullRequestOperationLog) for item in data]
1182
1388
 
1183
1389
  async def request_test(
1184
- self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
1390
+ self,
1391
+ *,
1392
+ number: Union[int, str],
1393
+ owner: Optional[str] = None,
1394
+ repo: Optional[str] = None,
1395
+ force: Optional[bool] = None,
1396
+ **kwargs,
1185
1397
  ) -> None:
1186
1398
  await self._request(
1187
1399
  "POST",
1188
1400
  self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
1189
- json=payload,
1401
+ json={"force": force, **kwargs},
1190
1402
  )
1191
1403
 
1192
1404
  async def update_testers(
@@ -1243,13 +1455,61 @@ class AsyncPullsResource(AsyncResource, AbstractPullsResource):
1243
1455
  "GET", self._client._repo_path("pulls", number, "issues", owner=owner, repo=repo), Issue
1244
1456
  )
1245
1457
 
1246
- async def list_enterprise(self, *, enterprise: str, **params) -> List[PullRequest]:
1458
+ async def list_enterprise(
1459
+ self,
1460
+ *,
1461
+ enterprise: str,
1462
+ repo: Optional[str] = None,
1463
+ state: Optional[str] = None,
1464
+ issue_number: Optional[int] = None,
1465
+ sort: Optional[str] = None,
1466
+ direction: Optional[str] = None,
1467
+ page: Optional[int] = None,
1468
+ per_page: Optional[int] = None,
1469
+ **kwargs,
1470
+ ) -> List[PullRequest]:
1247
1471
  return await self._models(
1248
- "GET", self._client._path("enterprises", enterprise, "pull_requests"), PullRequest, params=params
1472
+ "GET",
1473
+ self._client._path("enterprises", enterprise, "pull_requests"),
1474
+ PullRequest,
1475
+ params={
1476
+ "repo": repo,
1477
+ "state": state,
1478
+ "issue_number": issue_number,
1479
+ "sort": sort,
1480
+ "direction": direction,
1481
+ "page": page,
1482
+ "per_page": per_page,
1483
+ **kwargs,
1484
+ },
1249
1485
  )
1250
1486
 
1251
- async def list_org(self, *, org: str, **params) -> List[PullRequest]:
1252
- return await self._models("GET", self._client._path("org", org, "pull_requests"), PullRequest, params=params)
1487
+ async def list_org(
1488
+ self,
1489
+ *,
1490
+ org: str,
1491
+ state: Optional[str] = None,
1492
+ issue_number: Optional[int] = None,
1493
+ sort: Optional[str] = None,
1494
+ direction: Optional[str] = None,
1495
+ page: Optional[int] = None,
1496
+ per_page: Optional[int] = None,
1497
+ **kwargs,
1498
+ ) -> List[PullRequest]:
1499
+ return await self._models(
1500
+ "GET",
1501
+ self._client._path("org", org, "pull_requests"),
1502
+ PullRequest,
1503
+ params={
1504
+ "state": state,
1505
+ "issue_number": issue_number,
1506
+ "sort": sort,
1507
+ "direction": direction,
1508
+ "page": page,
1509
+ "per_page": per_page,
1510
+ **kwargs,
1511
+ },
1512
+ )
1253
1513
 
1254
1514
  async def list_issue_pull_requests(self, *, enterprise: str, number: Union[int, str]) -> List[PullRequest]:
1255
1515
  return await self._models(
@@ -4,6 +4,8 @@ from abc import ABC, abstractmethod
4
4
  from pathlib import Path
5
5
  from typing import List, Optional, Union
6
6
 
7
+ import httpx
8
+
7
9
  from ..._models import Release, ReleaseUploadURL
8
10
  from .._shared import AsyncResource, SyncResource
9
11
 
@@ -83,7 +85,7 @@ class AbstractReleasesResource(ABC):
83
85
  owner: Optional[str] = None,
84
86
  repo: Optional[str] = None,
85
87
  upload_timeout: Optional[float] = 300.0,
86
- ) -> None:
88
+ ) -> httpx.Response:
87
89
  """Upload a release attachment through the pre-signed upload URL.
88
90
 
89
91
  :param tag: Tag name in the release URL path.
@@ -92,6 +94,7 @@ class AbstractReleasesResource(ABC):
92
94
  :param owner: Repository owner path. Uses the client default when omitted.
93
95
  :param repo: Repository path. Uses the client default when omitted.
94
96
  :param upload_timeout: Timeout for upload operation. Default to 300 (5 minutes).
97
+ :returns: Response for upload put request (httpx.Response).
95
98
  """
96
99
 
97
100
  @abstractmethod
@@ -231,7 +234,7 @@ class ReleasesResource(SyncResource, AbstractReleasesResource):
231
234
  owner: Optional[str] = None,
232
235
  repo: Optional[str] = None,
233
236
  upload_timeout: Optional[float] = 300.0,
234
- ) -> None:
237
+ ) -> httpx.Response:
235
238
  upload_content = Path(content).read_bytes() if isinstance(content, str) else content
236
239
  if not isinstance(upload_content, bytes):
237
240
  raise TypeError("content must be bytes or a file path string.")
@@ -240,7 +243,7 @@ class ReleasesResource(SyncResource, AbstractReleasesResource):
240
243
  if not upload_url.url:
241
244
  raise ValueError("Release upload URL response did not include a URL.")
242
245
 
243
- self._client._client.request(
246
+ return self._client._client.request(
244
247
  "PUT",
245
248
  upload_url.url,
246
249
  content=upload_content,
@@ -372,7 +375,7 @@ class AsyncReleasesResource(AsyncResource, AbstractReleasesResource):
372
375
  owner: Optional[str] = None,
373
376
  repo: Optional[str] = None,
374
377
  upload_timeout: Optional[float] = 300.0,
375
- ) -> None:
378
+ ) -> httpx.Response:
376
379
  upload_content = Path(content).read_bytes() if isinstance(content, str) else content
377
380
  if not isinstance(upload_content, bytes):
378
381
  raise TypeError("content must be bytes or a file path string.")
@@ -381,7 +384,7 @@ class AsyncReleasesResource(AsyncResource, AbstractReleasesResource):
381
384
  if not upload_url.url:
382
385
  raise ValueError("Release upload URL response did not include a URL.")
383
386
 
384
- await self._client._client.request(
387
+ return await self._client._client.request(
385
388
  "PUT",
386
389
  upload_url.url,
387
390
  content=upload_content,