gitcode-api 1.0.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.
@@ -0,0 +1,301 @@
1
+ """Release, tag, and webhook resource groups."""
2
+
3
+ from typing import Any, List
4
+
5
+ from .._models import ProtectedTag, Release, Tag, Webhook
6
+ from ._shared import AsyncResource, SyncResource
7
+
8
+
9
+ class ReleasesResource(SyncResource):
10
+ """Synchronous release endpoints."""
11
+
12
+ def update(
13
+ self,
14
+ *,
15
+ release_id: int | str,
16
+ tag_name: str,
17
+ name: str,
18
+ body: str,
19
+ owner: str | None = None,
20
+ repo: str | None = None,
21
+ ) -> Release:
22
+ """Update a repository release.
23
+
24
+ :param release_id: Release identifier.
25
+ :param tag_name: Tag name for the release.
26
+ :param name: Release name.
27
+ :param body: Release description.
28
+ :param owner: Repository owner path. Uses the client default when omitted.
29
+ :param repo: Repository name. Uses the client default when omitted.
30
+ :returns: Updated release payload.
31
+ """
32
+ return self._model(
33
+ "PATCH",
34
+ self._client._repo_path("releases", release_id, owner=owner, repo=repo),
35
+ Release,
36
+ json={"tag_name": tag_name, "name": name, "body": body},
37
+ )
38
+
39
+ def get_by_tag(self, *, tag: str, owner: str | None = None, repo: str | None = None) -> Release:
40
+ """Get a repository release by tag name."""
41
+ return self._model(
42
+ "GET",
43
+ self._client._repo_path("releases", "tags", tag, owner=owner, repo=repo),
44
+ Release,
45
+ )
46
+
47
+ def list(self, *, owner: str | None = None, repo: str | None = None) -> List[Release]:
48
+ """List releases for a repository."""
49
+ return self._models("GET", self._client._repo_path("releases", owner=owner, repo=repo), Release)
50
+
51
+
52
+ class TagsResource(SyncResource):
53
+ """Synchronous tag endpoints."""
54
+
55
+ def list(
56
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
57
+ ) -> List[Tag]:
58
+ """List tags for a repository."""
59
+ return self._models(
60
+ "GET",
61
+ self._client._repo_path("tags", owner=owner, repo=repo),
62
+ Tag,
63
+ params={"page": page, "per_page": per_page},
64
+ )
65
+
66
+ def create(
67
+ self,
68
+ *,
69
+ refs: str,
70
+ tag_name: str,
71
+ owner: str | None = None,
72
+ repo: str | None = None,
73
+ tag_message: str | None = None,
74
+ ) -> Tag:
75
+ """Create a tag for a repository."""
76
+ return self._model(
77
+ "POST",
78
+ self._client._repo_path("tags", owner=owner, repo=repo),
79
+ Tag,
80
+ json={"refs": refs, "tag_name": tag_name, "tag_message": tag_message},
81
+ )
82
+
83
+ def list_protected(
84
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
85
+ ) -> List[ProtectedTag]:
86
+ """List protected tags for a repository."""
87
+ return self._models(
88
+ "GET",
89
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
90
+ ProtectedTag,
91
+ params={"page": page, "per_page": per_page},
92
+ )
93
+
94
+ def delete_protected(self, *, tag_name: str, owner: str | None = None, repo: str | None = None) -> None:
95
+ """Delete a protected tag rule."""
96
+ self._request("DELETE", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo))
97
+
98
+ def get_protected(self, *, tag_name: str, owner: str | None = None, repo: str | None = None) -> ProtectedTag:
99
+ """Get details for a protected tag rule."""
100
+ return self._model(
101
+ "GET",
102
+ self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo),
103
+ ProtectedTag,
104
+ )
105
+
106
+ def create_protected(
107
+ self, *, name: str, owner: str | None = None, repo: str | None = None, create_access_level: int | None = None
108
+ ) -> ProtectedTag:
109
+ """Create a protected tag rule."""
110
+ return self._model(
111
+ "POST",
112
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
113
+ ProtectedTag,
114
+ json={"name": name, "create_access_level": create_access_level},
115
+ )
116
+
117
+ def update_protected(
118
+ self, *, name: str, create_access_level: int, owner: str | None = None, repo: str | None = None
119
+ ) -> ProtectedTag:
120
+ """Update a protected tag rule."""
121
+ return self._model(
122
+ "PUT",
123
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
124
+ ProtectedTag,
125
+ json={"name": name, "create_access_level": create_access_level},
126
+ )
127
+
128
+
129
+ class WebhooksResource(SyncResource):
130
+ """Synchronous webhook endpoints."""
131
+
132
+ def list(
133
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
134
+ ) -> List[Webhook]:
135
+ """List webhooks for a repository."""
136
+ return self._models(
137
+ "GET",
138
+ self._client._repo_path("hooks", owner=owner, repo=repo),
139
+ Webhook,
140
+ params={"page": page, "per_page": per_page},
141
+ )
142
+
143
+ def create(self, *, url: str, owner: str | None = None, repo: str | None = None, **payload: Any) -> Webhook:
144
+ """Create a repository webhook."""
145
+ payload["url"] = url
146
+ return self._model("POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload)
147
+
148
+ def get(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> Webhook:
149
+ """Get a repository webhook by identifier."""
150
+ return self._model("GET", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook)
151
+
152
+ def update(
153
+ self, *, hook_id: int | str, url: str, owner: str | None = None, repo: str | None = None, **payload: Any
154
+ ) -> Webhook:
155
+ """Update a repository webhook."""
156
+ payload["url"] = url
157
+ return self._model(
158
+ "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
159
+ )
160
+
161
+ def delete(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> None:
162
+ """Delete a repository webhook."""
163
+ self._request("DELETE", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo))
164
+
165
+ def test(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> None:
166
+ """Send a test delivery for a repository webhook."""
167
+ self._request("POST", self._client._repo_path("hooks", hook_id, "tests", owner=owner, repo=repo))
168
+
169
+
170
+ class AsyncReleasesResource(AsyncResource):
171
+ """Asynchronous release endpoints."""
172
+
173
+ async def update(
174
+ self,
175
+ *,
176
+ release_id: int | str,
177
+ tag_name: str,
178
+ name: str,
179
+ body: str,
180
+ owner: str | None = None,
181
+ repo: str | None = None,
182
+ ) -> Release:
183
+ return await self._model(
184
+ "PATCH",
185
+ self._client._repo_path("releases", release_id, owner=owner, repo=repo),
186
+ Release,
187
+ json={"tag_name": tag_name, "name": name, "body": body},
188
+ )
189
+
190
+ async def get_by_tag(self, *, tag: str, owner: str | None = None, repo: str | None = None) -> Release:
191
+ return await self._model(
192
+ "GET", self._client._repo_path("releases", "tags", tag, owner=owner, repo=repo), Release
193
+ )
194
+
195
+ async def list(self, *, owner: str | None = None, repo: str | None = None) -> List[Release]:
196
+ return await self._models("GET", self._client._repo_path("releases", owner=owner, repo=repo), Release)
197
+
198
+
199
+ class AsyncTagsResource(AsyncResource):
200
+ """Asynchronous tag endpoints."""
201
+
202
+ async def list(
203
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
204
+ ) -> List[Tag]:
205
+ return await self._models(
206
+ "GET",
207
+ self._client._repo_path("tags", owner=owner, repo=repo),
208
+ Tag,
209
+ params={"page": page, "per_page": per_page},
210
+ )
211
+
212
+ async def create(
213
+ self,
214
+ *,
215
+ refs: str,
216
+ tag_name: str,
217
+ owner: str | None = None,
218
+ repo: str | None = None,
219
+ tag_message: str | None = None,
220
+ ) -> Tag:
221
+ return await self._model(
222
+ "POST",
223
+ self._client._repo_path("tags", owner=owner, repo=repo),
224
+ Tag,
225
+ json={"refs": refs, "tag_name": tag_name, "tag_message": tag_message},
226
+ )
227
+
228
+ async def list_protected(
229
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
230
+ ) -> List[ProtectedTag]:
231
+ return await self._models(
232
+ "GET",
233
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
234
+ ProtectedTag,
235
+ params={"page": page, "per_page": per_page},
236
+ )
237
+
238
+ async def delete_protected(self, *, tag_name: str, owner: str | None = None, repo: str | None = None) -> None:
239
+ await self._request("DELETE", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo))
240
+
241
+ async def get_protected(self, *, tag_name: str, owner: str | None = None, repo: str | None = None) -> ProtectedTag:
242
+ return await self._model(
243
+ "GET", self._client._repo_path("protected_tags", tag_name, owner=owner, repo=repo), ProtectedTag
244
+ )
245
+
246
+ async def create_protected(
247
+ self, *, name: str, owner: str | None = None, repo: str | None = None, create_access_level: int | None = None
248
+ ) -> ProtectedTag:
249
+ return await self._model(
250
+ "POST",
251
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
252
+ ProtectedTag,
253
+ json={"name": name, "create_access_level": create_access_level},
254
+ )
255
+
256
+ async def update_protected(
257
+ self, *, name: str, create_access_level: int, owner: str | None = None, repo: str | None = None
258
+ ) -> ProtectedTag:
259
+ return await self._model(
260
+ "PUT",
261
+ self._client._repo_path("protected_tags", owner=owner, repo=repo),
262
+ ProtectedTag,
263
+ json={"name": name, "create_access_level": create_access_level},
264
+ )
265
+
266
+
267
+ class AsyncWebhooksResource(AsyncResource):
268
+ """Asynchronous webhook endpoints."""
269
+
270
+ async def list(
271
+ self, *, owner: str | None = None, repo: str | None = None, page: int | None = None, per_page: int | None = None
272
+ ) -> List[Webhook]:
273
+ return await self._models(
274
+ "GET",
275
+ self._client._repo_path("hooks", owner=owner, repo=repo),
276
+ Webhook,
277
+ params={"page": page, "per_page": per_page},
278
+ )
279
+
280
+ async def create(self, *, url: str, owner: str | None = None, repo: str | None = None, **payload: Any) -> Webhook:
281
+ payload["url"] = url
282
+ return await self._model(
283
+ "POST", self._client._repo_path("hooks", owner=owner, repo=repo), Webhook, json=payload
284
+ )
285
+
286
+ async def get(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> Webhook:
287
+ return await self._model("GET", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook)
288
+
289
+ async def update(
290
+ self, *, hook_id: int | str, url: str, owner: str | None = None, repo: str | None = None, **payload: Any
291
+ ) -> Webhook:
292
+ payload["url"] = url
293
+ return await self._model(
294
+ "PATCH", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo), Webhook, json=payload
295
+ )
296
+
297
+ async def delete(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> None:
298
+ await self._request("DELETE", self._client._repo_path("hooks", hook_id, owner=owner, repo=repo))
299
+
300
+ async def test(self, *, hook_id: int | str, owner: str | None = None, repo: str | None = None) -> None:
301
+ await self._request("POST", self._client._repo_path("hooks", hook_id, "tests", owner=owner, repo=repo))