gitcode-api 1.3.2__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.
gitcode_api/cli.py CHANGED
@@ -281,7 +281,7 @@ Examples:
281
281
  %(prog)s users me --api-key "$GITCODE_ACCESS_TOKEN"
282
282
  %(prog)s pulls list --set only_count=true --set reviewer=demo
283
283
 
284
- Extra keyword arguments (**params / **payload on some methods):
284
+ Extra keyword arguments (when needed):
285
285
  Repeat --set key=value (value is JSON if it parses as JSON; otherwise a string).
286
286
  --set-json merges one JSON object (or @path/to/file.json) into those kwargs.
287
287
 
@@ -375,7 +375,7 @@ Each method -h opens with resource.method_signature("<name>") from the Python SD
375
375
  action="append",
376
376
  default=None,
377
377
  metavar="KEY=VALUE",
378
- help="Extra keyword argument (merged into **params / **payload).",
378
+ help="Extra keyword arguments.",
379
379
  )
380
380
  method_parser.add_argument(
381
381
  "--set-json",
@@ -77,16 +77,43 @@ class AbstractOrgsResource(ABC):
77
77
  """
78
78
 
79
79
  @abstractmethod
80
- def create_repo(self, *, org: str, name: str, **payload) -> Repository:
80
+ def create_repo(
81
+ self,
82
+ *,
83
+ org: str,
84
+ name: str,
85
+ description: Optional[str] = None,
86
+ homepage: Optional[str] = None,
87
+ has_issues: Optional[bool] = None,
88
+ has_wiki: Optional[bool] = None,
89
+ can_comment: Optional[bool] = None,
90
+ public: Optional[int] = None,
91
+ private: Optional[bool] = None,
92
+ auto_init: Optional[bool] = None,
93
+ gitignore_template: Optional[str] = None,
94
+ license_template: Optional[str] = None,
95
+ path: Optional[str] = None,
96
+ default_branch: Optional[str] = None,
97
+ **kwargs,
98
+ ) -> Repository:
81
99
  """Create an organization repository.
82
100
 
83
- Additional payload fields match the organization repository creation
84
- endpoint, such as ``description``, ``homepage``, ``private``,
85
- ``public``, ``auto_init``, and ``default_branch``.
86
-
87
101
  :param org: Organization path or login.
88
102
  :param name: Repository name.
89
- :param payload: Additional repository creation fields.
103
+ :param description: Repository description.
104
+ :param homepage: Homepage URL.
105
+ :param has_issues: Allow issues to be created. Default: ``True``.
106
+ :param has_wiki: Provide wiki. Default: ``True``.
107
+ :param can_comment: Allow users to comment on repositories. Default: ``True``.
108
+ :param public: Open source type: ``0`` (private), ``1`` (external), ``2`` (internal).
109
+ Mutually exclusive with *private*.
110
+ :param private: Repository visibility. Mutually exclusive with *public*.
111
+ :param auto_init: Initialize with a README. Default: ``False``.
112
+ :param gitignore_template: ``.gitignore`` template name.
113
+ :param license_template: License template name.
114
+ :param path: Repository path.
115
+ :param default_branch: Default branch name. Default: ``main``.
116
+ :param kwargs: Additional arguments forwarded directly in request.
90
117
  :returns: Created repository metadata.
91
118
  """
92
119
 
@@ -184,11 +211,26 @@ class AbstractOrgsResource(ABC):
184
211
  """
185
212
 
186
213
  @abstractmethod
187
- def update(self, *, org: str, **payload) -> Organization:
214
+ def update(
215
+ self,
216
+ *,
217
+ org: str,
218
+ name: Optional[str] = None,
219
+ email: Optional[str] = None,
220
+ location: Optional[str] = None,
221
+ description: Optional[str] = None,
222
+ html_url: Optional[str] = None,
223
+ **kwargs,
224
+ ) -> Organization:
188
225
  """Update organization metadata.
189
226
 
190
227
  :param org: Organization path or login.
191
- :param payload: Updatable fields such as ``name``, ``email``, or ``description``.
228
+ :param name: Organization name.
229
+ :param email: Organization email.
230
+ :param location: Organization location.
231
+ :param description: Organization description.
232
+ :param html_url: Organization site URL.
233
+ :param kwargs: Additional arguments forwarded directly in request.
192
234
  :returns: Updated organization details.
193
235
  """
194
236
 
@@ -239,9 +281,46 @@ class OrgsResource(SyncResource, AbstractOrgsResource):
239
281
  params={"type": type, "page": page, "per_page": per_page},
240
282
  )
241
283
 
242
- def create_repo(self, *, org: str, name: str, **payload) -> Repository:
243
- payload["name"] = name
244
- return self._model("POST", self._client._path("orgs", org, "repos"), Repository, json=payload)
284
+ def create_repo(
285
+ self,
286
+ *,
287
+ org: str,
288
+ name: str,
289
+ description: Optional[str] = None,
290
+ homepage: Optional[str] = None,
291
+ has_issues: Optional[bool] = None,
292
+ has_wiki: Optional[bool] = None,
293
+ can_comment: Optional[bool] = None,
294
+ public: Optional[int] = None,
295
+ private: Optional[bool] = None,
296
+ auto_init: Optional[bool] = None,
297
+ gitignore_template: Optional[str] = None,
298
+ license_template: Optional[str] = None,
299
+ path: Optional[str] = None,
300
+ default_branch: Optional[str] = None,
301
+ **kwargs,
302
+ ) -> Repository:
303
+ return self._model(
304
+ "POST",
305
+ self._client._path("orgs", org, "repos"),
306
+ Repository,
307
+ json={
308
+ "name": name,
309
+ "description": description,
310
+ "homepage": homepage,
311
+ "has_issues": has_issues,
312
+ "has_wiki": has_wiki,
313
+ "can_comment": can_comment,
314
+ "public": public,
315
+ "private": private,
316
+ "auto_init": auto_init,
317
+ "gitignore_template": gitignore_template,
318
+ "license_template": license_template,
319
+ "path": path,
320
+ "default_branch": default_branch,
321
+ **kwargs,
322
+ },
323
+ )
245
324
 
246
325
  def get_enterprise_member(self, *, enterprise: str, username: str) -> EnterpriseMember:
247
326
  return self._model("GET", self._client._path("enterprises", enterprise, "members", username), EnterpriseMember)
@@ -302,8 +381,30 @@ class OrgsResource(SyncResource, AbstractOrgsResource):
302
381
  json={"role": role},
303
382
  )
304
383
 
305
- def update(self, *, org: str, **payload) -> Organization:
306
- return self._model("PATCH", self._client._path("orgs", org), Organization, json=payload)
384
+ def update(
385
+ self,
386
+ *,
387
+ org: str,
388
+ name: Optional[str] = None,
389
+ email: Optional[str] = None,
390
+ location: Optional[str] = None,
391
+ description: Optional[str] = None,
392
+ html_url: Optional[str] = None,
393
+ **kwargs,
394
+ ) -> Organization:
395
+ return self._model(
396
+ "PATCH",
397
+ self._client._path("orgs", org),
398
+ Organization,
399
+ json={
400
+ "name": name,
401
+ "email": email,
402
+ "location": location,
403
+ "description": description,
404
+ "html_url": html_url,
405
+ **kwargs,
406
+ },
407
+ )
307
408
 
308
409
  def leave(self, *, org: str) -> None:
309
410
  self._request("DELETE", self._client._path("user", "memberships", "orgs", org))
@@ -351,9 +452,46 @@ class AsyncOrgsResource(AsyncResource, AbstractOrgsResource):
351
452
  params={"type": type, "page": page, "per_page": per_page},
352
453
  )
353
454
 
354
- async def create_repo(self, *, org: str, name: str, **payload) -> Repository:
355
- payload["name"] = name
356
- return await self._model("POST", self._client._path("orgs", org, "repos"), Repository, json=payload)
455
+ async def create_repo(
456
+ self,
457
+ *,
458
+ org: str,
459
+ name: str,
460
+ description: Optional[str] = None,
461
+ homepage: Optional[str] = None,
462
+ has_issues: Optional[bool] = None,
463
+ has_wiki: Optional[bool] = None,
464
+ can_comment: Optional[bool] = None,
465
+ public: Optional[int] = None,
466
+ private: Optional[bool] = None,
467
+ auto_init: Optional[bool] = None,
468
+ gitignore_template: Optional[str] = None,
469
+ license_template: Optional[str] = None,
470
+ path: Optional[str] = None,
471
+ default_branch: Optional[str] = None,
472
+ **kwargs,
473
+ ) -> Repository:
474
+ return await self._model(
475
+ "POST",
476
+ self._client._path("orgs", org, "repos"),
477
+ Repository,
478
+ json={
479
+ "name": name,
480
+ "description": description,
481
+ "homepage": homepage,
482
+ "has_issues": has_issues,
483
+ "has_wiki": has_wiki,
484
+ "can_comment": can_comment,
485
+ "public": public,
486
+ "private": private,
487
+ "auto_init": auto_init,
488
+ "gitignore_template": gitignore_template,
489
+ "license_template": license_template,
490
+ "path": path,
491
+ "default_branch": default_branch,
492
+ **kwargs,
493
+ },
494
+ )
357
495
 
358
496
  async def get_enterprise_member(self, *, enterprise: str, username: str) -> EnterpriseMember:
359
497
  return await self._model(
@@ -415,8 +553,30 @@ class AsyncOrgsResource(AsyncResource, AbstractOrgsResource):
415
553
  json={"role": role},
416
554
  )
417
555
 
418
- async def update(self, *, org: str, **payload) -> Organization:
419
- return await self._model("PATCH", self._client._path("orgs", org), Organization, json=payload)
556
+ async def update(
557
+ self,
558
+ *,
559
+ org: str,
560
+ name: Optional[str] = None,
561
+ email: Optional[str] = None,
562
+ location: Optional[str] = None,
563
+ description: Optional[str] = None,
564
+ html_url: Optional[str] = None,
565
+ **kwargs,
566
+ ) -> Organization:
567
+ return await self._model(
568
+ "PATCH",
569
+ self._client._path("orgs", org),
570
+ Organization,
571
+ json={
572
+ "name": name,
573
+ "email": email,
574
+ "location": location,
575
+ "description": description,
576
+ "html_url": html_url,
577
+ **kwargs,
578
+ },
579
+ )
420
580
 
421
581
  async def leave(self, *, org: str) -> None:
422
582
  await self._request("DELETE", self._client._path("user", "memberships", "orgs", org))
@@ -512,8 +512,8 @@ class IssuesResource(SyncResource, AbstractIssuesResource):
512
512
  "milestone": milestone,
513
513
  "security_hole": security_hole,
514
514
  "template_path": template_path,
515
- }
516
- | kwargs,
515
+ **kwargs,
516
+ },
517
517
  )
518
518
 
519
519
  def update(
@@ -884,6 +884,7 @@ class AsyncIssuesResource(AsyncResource, AbstractIssuesResource):
884
884
  "milestone": milestone,
885
885
  "security_hole": security_hole,
886
886
  "template_path": template_path,
887
+ **kwargs,
887
888
  },
888
889
  )
889
890
 
@@ -415,15 +415,21 @@ class AbstractPullsResource(ABC):
415
415
 
416
416
  @abstractmethod
417
417
  def request_test(
418
- 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,
419
425
  ) -> None:
420
426
  """Request testing for a pull request.
421
427
 
422
428
  :param number: Pull request number.
423
429
  :param owner: Repository owner path. Uses the client default when omitted.
424
430
  :param repo: Repository path. Uses the client default when omitted.
425
- :param payload: JSON fields required by the test request endpoint.
426
- :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.
427
433
  """
428
434
 
429
435
  @abstractmethod
@@ -919,12 +925,18 @@ class PullsResource(SyncResource, AbstractPullsResource):
919
925
  return [as_model(item, PullRequestOperationLog) for item in data]
920
926
 
921
927
  def request_test(
922
- 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,
923
935
  ) -> None:
924
936
  self._request(
925
937
  "POST",
926
938
  self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
927
- json=payload,
939
+ json={"force": force, **kwargs},
928
940
  )
929
941
 
930
942
  def update_testers(
@@ -1375,12 +1387,18 @@ class AsyncPullsResource(AsyncResource, AbstractPullsResource):
1375
1387
  return [as_model(item, PullRequestOperationLog) for item in data]
1376
1388
 
1377
1389
  async def request_test(
1378
- 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,
1379
1397
  ) -> None:
1380
1398
  await self._request(
1381
1399
  "POST",
1382
1400
  self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
1383
- json=payload,
1401
+ json={"force": force, **kwargs},
1384
1402
  )
1385
1403
 
1386
1404
  async def update_testers(
@@ -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,
@@ -32,13 +32,34 @@ class AbstractWebhooksResource(ABC):
32
32
  """
33
33
 
34
34
  @abstractmethod
35
- def create(self, *, url: str, owner: Optional[str] = None, repo: Optional[str] = None, **payload) -> Webhook:
35
+ def create(
36
+ self,
37
+ *,
38
+ url: str,
39
+ owner: Optional[str] = None,
40
+ repo: Optional[str] = None,
41
+ encryption_type: Optional[int] = None,
42
+ password: Optional[str] = None,
43
+ push_events: Optional[bool] = None,
44
+ tag_push_events: Optional[bool] = None,
45
+ issues_events: Optional[bool] = None,
46
+ note_events: Optional[bool] = None,
47
+ merge_requests_events: Optional[bool] = None,
48
+ **kwargs,
49
+ ) -> Webhook:
36
50
  """Create a repository webhook.
37
51
 
38
52
  :param url: Payload URL GitCode should POST events to.
39
53
  :param owner: Repository owner path. Uses the client default when omitted.
40
54
  :param repo: Repository path. Uses the client default when omitted.
41
- :param payload: Additional fields from the Webhooks API (events list, secret, content type, etc.).
55
+ :param encryption_type: Encryption type: ``0`` (password), ``1`` (signature key).
56
+ :param password: Secret included in requests to prevent malicious calls.
57
+ :param push_events: Trigger on push events.
58
+ :param tag_push_events: Trigger on tag push events.
59
+ :param issues_events: Trigger on issue creation/closure events.
60
+ :param note_events: Trigger on comment events (issue/PR/commit).
61
+ :param merge_requests_events: Trigger on merge request events.
62
+ :param kwargs: Additional arguments forwarded directly in request.
42
63
  :returns: Created webhook.
43
64
  """
44
65
 
@@ -60,15 +81,29 @@ class AbstractWebhooksResource(ABC):
60
81
  url: str,
61
82
  owner: Optional[str] = None,
62
83
  repo: Optional[str] = None,
63
- **payload,
84
+ encryption_type: Optional[int] = None,
85
+ password: Optional[str] = None,
86
+ push_events: Optional[bool] = None,
87
+ tag_push_events: Optional[bool] = None,
88
+ issues_events: Optional[bool] = None,
89
+ note_events: Optional[bool] = None,
90
+ merge_requests_events: Optional[bool] = None,
91
+ **kwargs,
64
92
  ) -> Webhook:
65
93
  """Update a repository webhook.
66
94
 
67
95
  :param hook_id: Webhook id.
68
- :param url: New payload URL (merged into the JSON body).
96
+ :param url: New payload URL GitCode should POST events to.
69
97
  :param owner: Repository owner path. Uses the client default when omitted.
70
98
  :param repo: Repository path. Uses the client default when omitted.
71
- :param payload: Other mutable webhook fields accepted by the API.
99
+ :param encryption_type: Encryption type: ``0`` (password), ``1`` (signature key).
100
+ :param password: Secret included in requests to prevent malicious calls.
101
+ :param push_events: Trigger on push events.
102
+ :param tag_push_events: Trigger on tag push events.
103
+ :param issues_events: Trigger on issue creation/closure events.
104
+ :param note_events: Trigger on comment events (issue/PR/commit).
105
+ :param merge_requests_events: Trigger on merge request events.
106
+ :param kwargs: Additional arguments forwarded directly in request.
72
107
  :returns: Updated webhook.
73
108
  """
74
109
 
@@ -109,9 +144,37 @@ class WebhooksResource(SyncResource, AbstractWebhooksResource):
109
144
  params={"page": page, "per_page": per_page},
110
145
  )
111
146
 
112
- def create(self, *, url: str, owner: Optional[str] = None, repo: Optional[str] = None, **payload) -> Webhook:
113
- payload["url"] = url
114
- return self._model("POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload)
147
+ def create(
148
+ self,
149
+ *,
150
+ url: str,
151
+ owner: Optional[str] = None,
152
+ repo: Optional[str] = None,
153
+ encryption_type: Optional[int] = None,
154
+ password: Optional[str] = None,
155
+ push_events: Optional[bool] = None,
156
+ tag_push_events: Optional[bool] = None,
157
+ issues_events: Optional[bool] = None,
158
+ note_events: Optional[bool] = None,
159
+ merge_requests_events: Optional[bool] = None,
160
+ **kwargs,
161
+ ) -> Webhook:
162
+ return self._model(
163
+ "POST",
164
+ self._client._repo_path("hooks", owner=owner, repo=repo),
165
+ Webhook,
166
+ json={
167
+ "url": url,
168
+ "encryption_type": encryption_type,
169
+ "password": password,
170
+ "push_events": push_events,
171
+ "tag_push_events": tag_push_events,
172
+ "issues_events": issues_events,
173
+ "note_events": note_events,
174
+ "merge_requests_events": merge_requests_events,
175
+ **kwargs,
176
+ },
177
+ )
115
178
 
116
179
  def get(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> Webhook:
117
180
  return self._model("GET", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook)
@@ -123,11 +186,30 @@ class WebhooksResource(SyncResource, AbstractWebhooksResource):
123
186
  url: str,
124
187
  owner: Optional[str] = None,
125
188
  repo: Optional[str] = None,
126
- **payload,
189
+ encryption_type: Optional[int] = None,
190
+ password: Optional[str] = None,
191
+ push_events: Optional[bool] = None,
192
+ tag_push_events: Optional[bool] = None,
193
+ issues_events: Optional[bool] = None,
194
+ note_events: Optional[bool] = None,
195
+ merge_requests_events: Optional[bool] = None,
196
+ **kwargs,
127
197
  ) -> Webhook:
128
- payload["url"] = url
129
198
  return self._model(
130
- "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
199
+ "PATCH",
200
+ self._client._repo_path("hooks", hook_id, owner=owner, repo=repo),
201
+ Webhook,
202
+ json={
203
+ "url": url,
204
+ "encryption_type": encryption_type,
205
+ "password": password,
206
+ "push_events": push_events,
207
+ "tag_push_events": tag_push_events,
208
+ "issues_events": issues_events,
209
+ "note_events": note_events,
210
+ "merge_requests_events": merge_requests_events,
211
+ **kwargs,
212
+ },
131
213
  )
132
214
 
133
215
  def delete(self, *, hook_id: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None) -> None:
@@ -158,10 +240,36 @@ class AsyncWebhooksResource(AsyncResource, AbstractWebhooksResource):
158
240
  params={"page": page, "per_page": per_page},
159
241
  )
160
242
 
161
- async def create(self, *, url: str, owner: Optional[str] = None, repo: Optional[str] = None, **payload) -> Webhook:
162
- payload["url"] = url
243
+ async def create(
244
+ self,
245
+ *,
246
+ url: str,
247
+ owner: Optional[str] = None,
248
+ repo: Optional[str] = None,
249
+ encryption_type: Optional[int] = None,
250
+ password: Optional[str] = None,
251
+ push_events: Optional[bool] = None,
252
+ tag_push_events: Optional[bool] = None,
253
+ issues_events: Optional[bool] = None,
254
+ note_events: Optional[bool] = None,
255
+ merge_requests_events: Optional[bool] = None,
256
+ **kwargs,
257
+ ) -> Webhook:
163
258
  return await self._model(
164
- "POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload
259
+ "POST",
260
+ self._client._repo_path("hooks", owner=owner, repo=repo),
261
+ Webhook,
262
+ json={
263
+ "url": url,
264
+ "encryption_type": encryption_type,
265
+ "password": password,
266
+ "push_events": push_events,
267
+ "tag_push_events": tag_push_events,
268
+ "issues_events": issues_events,
269
+ "note_events": note_events,
270
+ "merge_requests_events": merge_requests_events,
271
+ **kwargs,
272
+ },
165
273
  )
166
274
 
167
275
  async def get(
@@ -176,11 +284,30 @@ class AsyncWebhooksResource(AsyncResource, AbstractWebhooksResource):
176
284
  url: str,
177
285
  owner: Optional[str] = None,
178
286
  repo: Optional[str] = None,
179
- **payload,
287
+ encryption_type: Optional[int] = None,
288
+ password: Optional[str] = None,
289
+ push_events: Optional[bool] = None,
290
+ tag_push_events: Optional[bool] = None,
291
+ issues_events: Optional[bool] = None,
292
+ note_events: Optional[bool] = None,
293
+ merge_requests_events: Optional[bool] = None,
294
+ **kwargs,
180
295
  ) -> Webhook:
181
- payload["url"] = url
182
296
  return await self._model(
183
- "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
297
+ "PATCH",
298
+ self._client._repo_path("hooks", hook_id, owner=owner, repo=repo),
299
+ Webhook,
300
+ json={
301
+ "url": url,
302
+ "encryption_type": encryption_type,
303
+ "password": password,
304
+ "push_events": push_events,
305
+ "tag_push_events": tag_push_events,
306
+ "issues_events": issues_events,
307
+ "note_events": note_events,
308
+ "merge_requests_events": merge_requests_events,
309
+ **kwargs,
310
+ },
184
311
  )
185
312
 
186
313
  async def delete(