python-gitlab 5.3.1__py3-none-any.whl → 5.4.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.
gitlab/_version.py CHANGED
@@ -3,4 +3,4 @@ __copyright__ = "Copyright 2013-2019 Gauvain Pocentek, 2019-2023 python-gitlab t
3
3
  __email__ = "gauvainpocentek@gmail.com"
4
4
  __license__ = "LGPL3"
5
5
  __title__ = "python-gitlab"
6
- __version__ = "5.3.1"
6
+ __version__ = "5.4.0"
gitlab/client.py CHANGED
@@ -654,6 +654,7 @@ class Gitlab:
654
654
  obey_rate_limit: bool = True,
655
655
  retry_transient_errors: Optional[bool] = None,
656
656
  max_retries: int = 10,
657
+ extra_headers: Optional[Dict[str, Any]] = None,
657
658
  **kwargs: Any,
658
659
  ) -> requests.Response:
659
660
  """Make an HTTP request to the Gitlab server.
@@ -675,6 +676,7 @@ class Gitlab:
675
676
  or 52x responses. Defaults to False.
676
677
  max_retries: Max retries after 429 or transient errors,
677
678
  set to -1 to retry forever. Defaults to 10.
679
+ extra_headers: Add and override HTTP headers for the request.
678
680
  **kwargs: Extra options to send to the server (e.g. sudo)
679
681
 
680
682
  Returns:
@@ -721,6 +723,9 @@ class Gitlab:
721
723
  send_data = self._backend.prepare_send_data(files, post_data, raw)
722
724
  opts["headers"]["Content-type"] = send_data.content_type
723
725
 
726
+ if extra_headers is not None:
727
+ opts["headers"].update(extra_headers)
728
+
724
729
  retry = utils.Retry(
725
730
  max_retries=max_retries,
726
731
  obey_rate_limit=obey_rate_limit,
gitlab/const.py CHANGED
@@ -9,83 +9,83 @@ class GitlabEnum(str, Enum):
9
9
 
10
10
  # https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/access.rb#L12-18
11
11
  class AccessLevel(IntEnum):
12
- NO_ACCESS: int = 0
13
- MINIMAL_ACCESS: int = 5
14
- GUEST: int = 10
15
- PLANNER: int = 15
16
- REPORTER: int = 20
17
- DEVELOPER: int = 30
18
- MAINTAINER: int = 40
19
- OWNER: int = 50
20
- ADMIN: int = 60
12
+ NO_ACCESS = 0
13
+ MINIMAL_ACCESS = 5
14
+ GUEST = 10
15
+ PLANNER = 15
16
+ REPORTER = 20
17
+ DEVELOPER = 30
18
+ MAINTAINER = 40
19
+ OWNER = 50
20
+ ADMIN = 60
21
21
 
22
22
 
23
23
  # https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/visibility_level.rb#L23-25
24
24
  class Visibility(GitlabEnum):
25
- PRIVATE: str = "private"
26
- INTERNAL: str = "internal"
27
- PUBLIC: str = "public"
25
+ PRIVATE = "private"
26
+ INTERNAL = "internal"
27
+ PUBLIC = "public"
28
28
 
29
29
 
30
30
  class NotificationLevel(GitlabEnum):
31
- DISABLED: str = "disabled"
32
- PARTICIPATING: str = "participating"
33
- WATCH: str = "watch"
34
- GLOBAL: str = "global"
35
- MENTION: str = "mention"
36
- CUSTOM: str = "custom"
31
+ DISABLED = "disabled"
32
+ PARTICIPATING = "participating"
33
+ WATCH = "watch"
34
+ GLOBAL = "global"
35
+ MENTION = "mention"
36
+ CUSTOM = "custom"
37
37
 
38
38
 
39
39
  # https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/app/views/search/_category.html.haml#L10-37
40
40
  class SearchScope(GitlabEnum):
41
41
  # all scopes (global, group and project)
42
- PROJECTS: str = "projects"
43
- ISSUES: str = "issues"
44
- MERGE_REQUESTS: str = "merge_requests"
45
- MILESTONES: str = "milestones"
46
- WIKI_BLOBS: str = "wiki_blobs"
47
- COMMITS: str = "commits"
48
- BLOBS: str = "blobs"
49
- USERS: str = "users"
42
+ PROJECTS = "projects"
43
+ ISSUES = "issues"
44
+ MERGE_REQUESTS = "merge_requests"
45
+ MILESTONES = "milestones"
46
+ WIKI_BLOBS = "wiki_blobs"
47
+ COMMITS = "commits"
48
+ BLOBS = "blobs"
49
+ USERS = "users"
50
50
 
51
51
  # specific global scope
52
- GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
52
+ GLOBAL_SNIPPET_TITLES = "snippet_titles"
53
53
 
54
54
  # specific project scope
55
- PROJECT_NOTES: str = "notes"
55
+ PROJECT_NOTES = "notes"
56
56
 
57
57
 
58
58
  # https://docs.gitlab.com/ee/api/merge_requests.html#merge-status
59
59
  class DetailedMergeStatus(GitlabEnum):
60
60
  # possible values for the detailed_merge_status field of Merge Requests
61
- BLOCKED_STATUS: str = "blocked_status"
62
- BROKEN_STATUS: str = "broken_status"
63
- CHECKING: str = "checking"
64
- UNCHECKED: str = "unchecked"
65
- CI_MUST_PASS: str = "ci_must_pass"
66
- CI_STILL_RUNNING: str = "ci_still_running"
67
- DISCUSSIONS_NOT_RESOLVED: str = "discussions_not_resolved"
68
- DRAFT_STATUS: str = "draft_status"
69
- EXTERNAL_STATUS_CHECKS: str = "external_status_checks"
70
- MERGEABLE: str = "mergeable"
71
- NOT_APPROVED: str = "not_approved"
72
- NOT_OPEN: str = "not_open"
73
- POLICIES_DENIED: str = "policies_denied"
61
+ BLOCKED_STATUS = "blocked_status"
62
+ BROKEN_STATUS = "broken_status"
63
+ CHECKING = "checking"
64
+ UNCHECKED = "unchecked"
65
+ CI_MUST_PASS = "ci_must_pass"
66
+ CI_STILL_RUNNING = "ci_still_running"
67
+ DISCUSSIONS_NOT_RESOLVED = "discussions_not_resolved"
68
+ DRAFT_STATUS = "draft_status"
69
+ EXTERNAL_STATUS_CHECKS = "external_status_checks"
70
+ MERGEABLE = "mergeable"
71
+ NOT_APPROVED = "not_approved"
72
+ NOT_OPEN = "not_open"
73
+ POLICIES_DENIED = "policies_denied"
74
74
 
75
75
 
76
76
  # https://docs.gitlab.com/ee/api/pipelines.html
77
77
  class PipelineStatus(GitlabEnum):
78
- CREATED: str = "created"
79
- WAITING_FOR_RESOURCE: str = "waiting_for_resource"
80
- PREPARING: str = "preparing"
81
- PENDING: str = "pending"
82
- RUNNING: str = "running"
83
- SUCCESS: str = "success"
84
- FAILED: str = "failed"
85
- CANCELED: str = "canceled"
86
- SKIPPED: str = "skipped"
87
- MANUAL: str = "manual"
88
- SCHEDULED: str = "scheduled"
78
+ CREATED = "created"
79
+ WAITING_FOR_RESOURCE = "waiting_for_resource"
80
+ PREPARING = "preparing"
81
+ PENDING = "pending"
82
+ RUNNING = "running"
83
+ SUCCESS = "success"
84
+ FAILED = "failed"
85
+ CANCELED = "canceled"
86
+ SKIPPED = "skipped"
87
+ MANUAL = "manual"
88
+ SCHEDULED = "scheduled"
89
89
 
90
90
 
91
91
  DEFAULT_URL: str = "https://gitlab.com"
gitlab/mixins.py CHANGED
@@ -6,7 +6,9 @@ from typing import (
6
6
  Dict,
7
7
  Iterator,
8
8
  List,
9
+ Literal,
9
10
  Optional,
11
+ overload,
10
12
  Tuple,
11
13
  Type,
12
14
  TYPE_CHECKING,
@@ -612,6 +614,39 @@ class DownloadMixin(_RestObjectBase):
612
614
  _updated_attrs: Dict[str, Any]
613
615
  manager: base.RESTManager
614
616
 
617
+ @overload
618
+ def download(
619
+ self,
620
+ streamed: Literal[False] = False,
621
+ action: None = None,
622
+ chunk_size: int = 1024,
623
+ *,
624
+ iterator: Literal[False] = False,
625
+ **kwargs: Any,
626
+ ) -> bytes: ...
627
+
628
+ @overload
629
+ def download(
630
+ self,
631
+ streamed: bool = False,
632
+ action: None = None,
633
+ chunk_size: int = 1024,
634
+ *,
635
+ iterator: Literal[True] = True,
636
+ **kwargs: Any,
637
+ ) -> Iterator[Any]: ...
638
+
639
+ @overload
640
+ def download(
641
+ self,
642
+ streamed: Literal[True] = True,
643
+ action: Optional[Callable[[bytes], None]] = None,
644
+ chunk_size: int = 1024,
645
+ *,
646
+ iterator: Literal[False] = False,
647
+ **kwargs: Any,
648
+ ) -> None: ...
649
+
615
650
  @cli.register_custom_action(cls_names=("GroupExport", "ProjectExport"))
616
651
  @exc.on_http_error(exc.GitlabGetError)
617
652
  def download(
@@ -68,6 +68,7 @@ from .settings import *
68
68
  from .sidekiq import *
69
69
  from .snippets import *
70
70
  from .statistics import *
71
+ from .status_checks import *
71
72
  from .tags import *
72
73
  from .templates import *
73
74
  from .todos import *
@@ -3,7 +3,16 @@ GitLab API:
3
3
  https://docs.gitlab.com/ee/api/job_artifacts.html
4
4
  """
5
5
 
6
- from typing import Any, Callable, Iterator, Optional, TYPE_CHECKING, Union
6
+ from typing import (
7
+ Any,
8
+ Callable,
9
+ Iterator,
10
+ Literal,
11
+ Optional,
12
+ overload,
13
+ TYPE_CHECKING,
14
+ Union,
15
+ )
7
16
 
8
17
  import requests
9
18
 
@@ -43,6 +52,45 @@ class ProjectArtifactManager(RESTManager):
43
52
  assert path is not None
44
53
  self.gitlab.http_delete(path, **kwargs)
45
54
 
55
+ @overload
56
+ def download(
57
+ self,
58
+ ref_name: str,
59
+ job: str,
60
+ streamed: Literal[False] = False,
61
+ action: None = None,
62
+ chunk_size: int = 1024,
63
+ *,
64
+ iterator: Literal[False] = False,
65
+ **kwargs: Any,
66
+ ) -> bytes: ...
67
+
68
+ @overload
69
+ def download(
70
+ self,
71
+ ref_name: str,
72
+ job: str,
73
+ streamed: bool = False,
74
+ action: None = None,
75
+ chunk_size: int = 1024,
76
+ *,
77
+ iterator: Literal[True] = True,
78
+ **kwargs: Any,
79
+ ) -> Iterator[Any]: ...
80
+
81
+ @overload
82
+ def download(
83
+ self,
84
+ ref_name: str,
85
+ job: str,
86
+ streamed: Literal[True] = True,
87
+ action: Optional[Callable[[bytes], None]] = None,
88
+ chunk_size: int = 1024,
89
+ *,
90
+ iterator: Literal[False] = False,
91
+ **kwargs: Any,
92
+ ) -> None: ...
93
+
46
94
  @cli.register_custom_action(
47
95
  cls_names="ProjectArtifactManager",
48
96
  required=("ref_name", "job"),
@@ -94,6 +142,48 @@ class ProjectArtifactManager(RESTManager):
94
142
  result, streamed, action, chunk_size, iterator=iterator
95
143
  )
96
144
 
145
+ @overload
146
+ def raw(
147
+ self,
148
+ ref_name: str,
149
+ artifact_path: str,
150
+ job: str,
151
+ streamed: Literal[False] = False,
152
+ action: None = None,
153
+ chunk_size: int = 1024,
154
+ *,
155
+ iterator: Literal[False] = False,
156
+ **kwargs: Any,
157
+ ) -> bytes: ...
158
+
159
+ @overload
160
+ def raw(
161
+ self,
162
+ ref_name: str,
163
+ artifact_path: str,
164
+ job: str,
165
+ streamed: bool = False,
166
+ action: None = None,
167
+ chunk_size: int = 1024,
168
+ *,
169
+ iterator: Literal[True] = True,
170
+ **kwargs: Any,
171
+ ) -> Iterator[Any]: ...
172
+
173
+ @overload
174
+ def raw(
175
+ self,
176
+ ref_name: str,
177
+ artifact_path: str,
178
+ job: str,
179
+ streamed: Literal[True] = True,
180
+ action: Optional[Callable[[bytes], None]] = None,
181
+ chunk_size: int = 1024,
182
+ *,
183
+ iterator: Literal[False] = False,
184
+ **kwargs: Any,
185
+ ) -> None: ...
186
+
97
187
  @cli.register_custom_action(
98
188
  cls_names="ProjectArtifactManager",
99
189
  required=("ref_name", "artifact_path", "job"),
@@ -48,7 +48,9 @@ class ProjectCommit(RESTObject):
48
48
 
49
49
  @cli.register_custom_action(cls_names="ProjectCommit", required=("branch",))
50
50
  @exc.on_http_error(exc.GitlabCherryPickError)
51
- def cherry_pick(self, branch: str, **kwargs: Any) -> None:
51
+ def cherry_pick(
52
+ self, branch: str, **kwargs: Any
53
+ ) -> Union[Dict[str, Any], requests.Response]:
52
54
  """Cherry-pick a commit into a branch.
53
55
 
54
56
  Args:
@@ -58,10 +60,13 @@ class ProjectCommit(RESTObject):
58
60
  Raises:
59
61
  GitlabAuthenticationError: If authentication is not correct
60
62
  GitlabCherryPickError: If the cherry-pick could not be performed
63
+
64
+ Returns:
65
+ The new commit data (*not* a RESTObject)
61
66
  """
62
67
  path = f"{self.manager.path}/{self.encoded_id}/cherry_pick"
63
68
  post_data = {"branch": branch}
64
- self.manager.gitlab.http_post(path, post_data=post_data, **kwargs)
69
+ return self.manager.gitlab.http_post(path, post_data=post_data, **kwargs)
65
70
 
66
71
  @cli.register_custom_action(cls_names="ProjectCommit", optional=("type",))
67
72
  @exc.on_http_error(exc.GitlabGetError)
@@ -5,7 +5,9 @@ from typing import (
5
5
  Dict,
6
6
  Iterator,
7
7
  List,
8
+ Literal,
8
9
  Optional,
10
+ overload,
9
11
  Tuple,
10
12
  TYPE_CHECKING,
11
13
  Union,
@@ -51,7 +53,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
51
53
 
52
54
  # NOTE(jlvillal): Signature doesn't match SaveMixin.save() so ignore
53
55
  # type error
54
- def save( # type: ignore
56
+ def save( # type: ignore[override]
55
57
  self, branch: str, commit_message: str, **kwargs: Any
56
58
  ) -> None:
57
59
  """Save the changes made to the file to the server.
@@ -75,7 +77,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
75
77
  @exc.on_http_error(exc.GitlabDeleteError)
76
78
  # NOTE(jlvillal): Signature doesn't match DeleteMixin.delete() so ignore
77
79
  # type error
78
- def delete( # type: ignore
80
+ def delete( # type: ignore[override]
79
81
  self, branch: str, commit_message: str, **kwargs: Any
80
82
  ) -> None:
81
83
  """Delete the file from the server.
@@ -219,7 +221,7 @@ class ProjectFileManager(CreateMixin, UpdateMixin, DeleteMixin, RESTManager):
219
221
  @exc.on_http_error(exc.GitlabUpdateError)
220
222
  # NOTE(jlvillal): Signature doesn't match UpdateMixin.update() so ignore
221
223
  # type error
222
- def update( # type: ignore
224
+ def update( # type: ignore[override]
223
225
  self, file_path: str, new_data: Optional[Dict[str, Any]] = None, **kwargs: Any
224
226
  ) -> Dict[str, Any]:
225
227
  """Update an object on the server.
@@ -254,7 +256,7 @@ class ProjectFileManager(CreateMixin, UpdateMixin, DeleteMixin, RESTManager):
254
256
  @exc.on_http_error(exc.GitlabDeleteError)
255
257
  # NOTE(jlvillal): Signature doesn't match DeleteMixin.delete() so ignore
256
258
  # type error
257
- def delete( # type: ignore
259
+ def delete( # type: ignore[override]
258
260
  self, file_path: str, branch: str, commit_message: str, **kwargs: Any
259
261
  ) -> None:
260
262
  """Delete a file on the server.
@@ -274,9 +276,49 @@ class ProjectFileManager(CreateMixin, UpdateMixin, DeleteMixin, RESTManager):
274
276
  data = {"branch": branch, "commit_message": commit_message}
275
277
  self.gitlab.http_delete(path, query_data=data, **kwargs)
276
278
 
279
+ @overload
280
+ def raw(
281
+ self,
282
+ file_path: str,
283
+ ref: Optional[str] = None,
284
+ streamed: Literal[False] = False,
285
+ action: None = None,
286
+ chunk_size: int = 1024,
287
+ *,
288
+ iterator: Literal[False] = False,
289
+ **kwargs: Any,
290
+ ) -> bytes: ...
291
+
292
+ @overload
293
+ def raw(
294
+ self,
295
+ file_path: str,
296
+ ref: Optional[str] = None,
297
+ streamed: bool = False,
298
+ action: None = None,
299
+ chunk_size: int = 1024,
300
+ *,
301
+ iterator: Literal[True] = True,
302
+ **kwargs: Any,
303
+ ) -> Iterator[Any]: ...
304
+
305
+ @overload
306
+ def raw(
307
+ self,
308
+ file_path: str,
309
+ ref: Optional[str] = None,
310
+ streamed: Literal[True] = True,
311
+ action: Optional[Callable[[bytes], None]] = None,
312
+ chunk_size: int = 1024,
313
+ *,
314
+ iterator: Literal[False] = False,
315
+ **kwargs: Any,
316
+ ) -> None: ...
317
+
277
318
  @cli.register_custom_action(
278
319
  cls_names="ProjectFileManager",
279
320
  required=("file_path",),
321
+ optional=("ref",),
280
322
  )
281
323
  @exc.on_http_error(exc.GitlabGetError)
282
324
  def raw(
@@ -302,7 +302,7 @@ class ProjectIssueLinkManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
302
302
  @exc.on_http_error(exc.GitlabCreateError)
303
303
  # NOTE(jlvillal): Signature doesn't match CreateMixin.create() so ignore
304
304
  # type error
305
- def create( # type: ignore
305
+ def create( # type: ignore[override]
306
306
  self, data: Dict[str, Any], **kwargs: Any
307
307
  ) -> Tuple[RESTObject, RESTObject]:
308
308
  """Create a new object.
gitlab/v4/objects/jobs.py CHANGED
@@ -1,4 +1,15 @@
1
- from typing import Any, Callable, cast, Dict, Iterator, Optional, TYPE_CHECKING, Union
1
+ from typing import (
2
+ Any,
3
+ Callable,
4
+ cast,
5
+ Dict,
6
+ Iterator,
7
+ Literal,
8
+ Optional,
9
+ overload,
10
+ TYPE_CHECKING,
11
+ Union,
12
+ )
2
13
 
3
14
  import requests
4
15
 
@@ -115,6 +126,39 @@ class ProjectJob(RefreshMixin, RESTObject):
115
126
  path = f"{self.manager.path}/{self.encoded_id}/artifacts"
116
127
  self.manager.gitlab.http_delete(path, **kwargs)
117
128
 
129
+ @overload
130
+ def artifacts(
131
+ self,
132
+ streamed: Literal[False] = False,
133
+ action: None = None,
134
+ chunk_size: int = 1024,
135
+ *,
136
+ iterator: Literal[False] = False,
137
+ **kwargs: Any,
138
+ ) -> bytes: ...
139
+
140
+ @overload
141
+ def artifacts(
142
+ self,
143
+ streamed: bool = False,
144
+ action: None = None,
145
+ chunk_size: int = 1024,
146
+ *,
147
+ iterator: Literal[True] = True,
148
+ **kwargs: Any,
149
+ ) -> Iterator[Any]: ...
150
+
151
+ @overload
152
+ def artifacts(
153
+ self,
154
+ streamed: Literal[True] = True,
155
+ action: Optional[Callable[[bytes], None]] = None,
156
+ chunk_size: int = 1024,
157
+ *,
158
+ iterator: Literal[False] = False,
159
+ **kwargs: Any,
160
+ ) -> None: ...
161
+
118
162
  @cli.register_custom_action(cls_names="ProjectJob")
119
163
  @exc.on_http_error(exc.GitlabGetError)
120
164
  def artifacts(
@@ -156,6 +200,42 @@ class ProjectJob(RefreshMixin, RESTObject):
156
200
  result, streamed, action, chunk_size, iterator=iterator
157
201
  )
158
202
 
203
+ @overload
204
+ def artifact(
205
+ self,
206
+ path: str,
207
+ streamed: Literal[False] = False,
208
+ action: None = None,
209
+ chunk_size: int = 1024,
210
+ *,
211
+ iterator: Literal[False] = False,
212
+ **kwargs: Any,
213
+ ) -> bytes: ...
214
+
215
+ @overload
216
+ def artifact(
217
+ self,
218
+ path: str,
219
+ streamed: bool = False,
220
+ action: None = None,
221
+ chunk_size: int = 1024,
222
+ *,
223
+ iterator: Literal[True] = True,
224
+ **kwargs: Any,
225
+ ) -> Iterator[Any]: ...
226
+
227
+ @overload
228
+ def artifact(
229
+ self,
230
+ path: str,
231
+ streamed: Literal[True] = True,
232
+ action: Optional[Callable[[bytes], None]] = None,
233
+ chunk_size: int = 1024,
234
+ *,
235
+ iterator: Literal[False] = False,
236
+ **kwargs: Any,
237
+ ) -> None: ...
238
+
159
239
  @cli.register_custom_action(cls_names="ProjectJob")
160
240
  @exc.on_http_error(exc.GitlabGetError)
161
241
  def artifact(
@@ -199,6 +279,39 @@ class ProjectJob(RefreshMixin, RESTObject):
199
279
  result, streamed, action, chunk_size, iterator=iterator
200
280
  )
201
281
 
282
+ @overload
283
+ def trace(
284
+ self,
285
+ streamed: Literal[False] = False,
286
+ action: None = None,
287
+ chunk_size: int = 1024,
288
+ *,
289
+ iterator: Literal[False] = False,
290
+ **kwargs: Any,
291
+ ) -> bytes: ...
292
+
293
+ @overload
294
+ def trace(
295
+ self,
296
+ streamed: bool = False,
297
+ action: None = None,
298
+ chunk_size: int = 1024,
299
+ *,
300
+ iterator: Literal[True] = True,
301
+ **kwargs: Any,
302
+ ) -> Iterator[Any]: ...
303
+
304
+ @overload
305
+ def trace(
306
+ self,
307
+ streamed: Literal[True] = True,
308
+ action: Optional[Callable[[bytes], None]] = None,
309
+ chunk_size: int = 1024,
310
+ *,
311
+ iterator: Literal[False] = False,
312
+ **kwargs: Any,
313
+ ) -> None: ...
314
+
202
315
  @cli.register_custom_action(cls_names="ProjectJob")
203
316
  @exc.on_http_error(exc.GitlabGetError)
204
317
  def trace(
@@ -66,7 +66,7 @@ class GroupLabelManager(
66
66
  # Update without ID.
67
67
  # NOTE(jlvillal): Signature doesn't match UpdateMixin.update() so ignore
68
68
  # type error
69
- def update( # type: ignore
69
+ def update( # type: ignore[override]
70
70
  self,
71
71
  name: Optional[str],
72
72
  new_data: Optional[Dict[str, Any]] = None,
@@ -132,7 +132,7 @@ class ProjectLabelManager(
132
132
  # Update without ID.
133
133
  # NOTE(jlvillal): Signature doesn't match UpdateMixin.update() so ignore
134
134
  # type error
135
- def update( # type: ignore
135
+ def update( # type: ignore[override]
136
136
  self,
137
137
  name: Optional[str],
138
138
  new_data: Optional[Dict[str, Any]] = None,
@@ -44,6 +44,7 @@ from .merge_request_approvals import ( # noqa: F401
44
44
  from .notes import ProjectMergeRequestNoteManager # noqa: F401
45
45
  from .pipelines import ProjectMergeRequestPipelineManager # noqa: F401
46
46
  from .reviewers import ProjectMergeRequestReviewerDetailManager
47
+ from .status_checks import ProjectMergeRequestStatusCheckManager
47
48
 
48
49
  __all__ = [
49
50
  "MergeRequest",
@@ -167,6 +168,7 @@ class ProjectMergeRequest(
167
168
  resourcemilestoneevents: ProjectMergeRequestResourceMilestoneEventManager
168
169
  resourcestateevents: ProjectMergeRequestResourceStateEventManager
169
170
  reviewer_details: ProjectMergeRequestReviewerDetailManager
171
+ status_checks: ProjectMergeRequestStatusCheckManager
170
172
 
171
173
  @cli.register_custom_action(cls_names="ProjectMergeRequest")
172
174
  @exc.on_http_error(exc.GitlabMROnBuildSuccessError)
@@ -11,7 +11,9 @@ from typing import (
11
11
  Callable,
12
12
  cast,
13
13
  Iterator,
14
+ Literal,
14
15
  Optional,
16
+ overload,
15
17
  TYPE_CHECKING,
16
18
  Union,
17
19
  )
@@ -122,6 +124,48 @@ class GenericPackageManager(RESTManager):
122
124
  attrs.update(server_data)
123
125
  return self._obj_cls(self, attrs=attrs)
124
126
 
127
+ @overload
128
+ def download(
129
+ self,
130
+ package_name: str,
131
+ package_version: str,
132
+ file_name: str,
133
+ streamed: Literal[False] = False,
134
+ action: None = None,
135
+ chunk_size: int = 1024,
136
+ *,
137
+ iterator: Literal[False] = False,
138
+ **kwargs: Any,
139
+ ) -> bytes: ...
140
+
141
+ @overload
142
+ def download(
143
+ self,
144
+ package_name: str,
145
+ package_version: str,
146
+ file_name: str,
147
+ streamed: bool = False,
148
+ action: None = None,
149
+ chunk_size: int = 1024,
150
+ *,
151
+ iterator: Literal[True] = True,
152
+ **kwargs: Any,
153
+ ) -> Iterator[Any]: ...
154
+
155
+ @overload
156
+ def download(
157
+ self,
158
+ package_name: str,
159
+ package_version: str,
160
+ file_name: str,
161
+ streamed: Literal[True] = True,
162
+ action: Optional[Callable[[bytes], None]] = None,
163
+ chunk_size: int = 1024,
164
+ *,
165
+ iterator: Literal[False] = False,
166
+ **kwargs: Any,
167
+ ) -> None: ...
168
+
125
169
  @cli.register_custom_action(
126
170
  cls_names="GenericPackageManager",
127
171
  required=("package_name", "package_version", "file_name"),
@@ -11,7 +11,9 @@ from typing import (
11
11
  Dict,
12
12
  Iterator,
13
13
  List,
14
+ Literal,
14
15
  Optional,
16
+ overload,
15
17
  TYPE_CHECKING,
16
18
  Union,
17
19
  )
@@ -102,6 +104,7 @@ from .statistics import ( # noqa: F401
102
104
  ProjectAdditionalStatisticsManager,
103
105
  ProjectIssuesStatisticsManager,
104
106
  )
107
+ from .status_checks import ProjectExternalStatusCheckManager # noqa: F401
105
108
  from .tags import ProjectProtectedTagManager, ProjectTagManager # noqa: F401
106
109
  from .templates import ( # noqa: F401
107
110
  ProjectDockerfileTemplateManager,
@@ -251,6 +254,7 @@ class Project(
251
254
  secure_files: ProjectSecureFileManager
252
255
  services: ProjectServiceManager
253
256
  snippets: ProjectSnippetManager
257
+ external_status_checks: ProjectExternalStatusCheckManager
254
258
  storage: "ProjectStorageManager"
255
259
  tags: ProjectTagManager
256
260
  triggers: ProjectTriggerManager
@@ -487,6 +491,42 @@ class Project(
487
491
  path = f"/projects/{self.encoded_id}/restore"
488
492
  self.manager.gitlab.http_post(path, **kwargs)
489
493
 
494
+ @overload
495
+ def snapshot(
496
+ self,
497
+ wiki: bool = False,
498
+ streamed: Literal[False] = False,
499
+ action: None = None,
500
+ chunk_size: int = 1024,
501
+ *,
502
+ iterator: Literal[False] = False,
503
+ **kwargs: Any,
504
+ ) -> bytes: ...
505
+
506
+ @overload
507
+ def snapshot(
508
+ self,
509
+ wiki: bool = False,
510
+ streamed: bool = False,
511
+ action: None = None,
512
+ chunk_size: int = 1024,
513
+ *,
514
+ iterator: Literal[True] = True,
515
+ **kwargs: Any,
516
+ ) -> Iterator[Any]: ...
517
+
518
+ @overload
519
+ def snapshot(
520
+ self,
521
+ wiki: bool = False,
522
+ streamed: Literal[True] = True,
523
+ action: Optional[Callable[[bytes], None]] = None,
524
+ chunk_size: int = 1024,
525
+ *,
526
+ iterator: Literal[False] = False,
527
+ **kwargs: Any,
528
+ ) -> None: ...
529
+
490
530
  @cli.register_custom_action(cls_names="Project", optional=("wiki",))
491
531
  @exc.on_http_error(exc.GitlabGetError)
492
532
  def snapshot(
@@ -4,7 +4,18 @@ GitLab API: https://docs.gitlab.com/ee/api/repositories.html
4
4
  Currently this module only contains repository-related methods for projects.
5
5
  """
6
6
 
7
- from typing import Any, Callable, Dict, Iterator, List, Optional, TYPE_CHECKING, Union
7
+ from typing import (
8
+ Any,
9
+ Callable,
10
+ Dict,
11
+ Iterator,
12
+ List,
13
+ Literal,
14
+ Optional,
15
+ overload,
16
+ TYPE_CHECKING,
17
+ Union,
18
+ )
8
19
 
9
20
  import requests
10
21
 
@@ -106,6 +117,42 @@ class RepositoryMixin(_RestObjectBase):
106
117
  path = f"/projects/{self.encoded_id}/repository/blobs/{sha}"
107
118
  return self.manager.gitlab.http_get(path, **kwargs)
108
119
 
120
+ @overload
121
+ def repository_raw_blob(
122
+ self,
123
+ sha: str,
124
+ streamed: Literal[False] = False,
125
+ action: None = None,
126
+ chunk_size: int = 1024,
127
+ *,
128
+ iterator: Literal[False] = False,
129
+ **kwargs: Any,
130
+ ) -> bytes: ...
131
+
132
+ @overload
133
+ def repository_raw_blob(
134
+ self,
135
+ sha: str,
136
+ streamed: bool = False,
137
+ action: None = None,
138
+ chunk_size: int = 1024,
139
+ *,
140
+ iterator: Literal[True] = True,
141
+ **kwargs: Any,
142
+ ) -> Iterator[Any]: ...
143
+
144
+ @overload
145
+ def repository_raw_blob(
146
+ self,
147
+ sha: str,
148
+ streamed: Literal[True] = True,
149
+ action: Optional[Callable[[bytes], None]] = None,
150
+ chunk_size: int = 1024,
151
+ *,
152
+ iterator: Literal[False] = False,
153
+ **kwargs: Any,
154
+ ) -> None: ...
155
+
109
156
  @cli.register_custom_action(cls_names="Project", required=("sha",))
110
157
  @exc.on_http_error(exc.GitlabGetError)
111
158
  def repository_raw_blob(
@@ -197,6 +244,42 @@ class RepositoryMixin(_RestObjectBase):
197
244
  path = f"/projects/{self.encoded_id}/repository/contributors"
198
245
  return self.manager.gitlab.http_list(path, **kwargs)
199
246
 
247
+ @overload
248
+ def repository_archive(
249
+ self,
250
+ sha: Optional[str] = None,
251
+ streamed: Literal[False] = False,
252
+ action: None = None,
253
+ chunk_size: int = 1024,
254
+ *,
255
+ iterator: Literal[False] = False,
256
+ **kwargs: Any,
257
+ ) -> bytes: ...
258
+
259
+ @overload
260
+ def repository_archive(
261
+ self,
262
+ sha: Optional[str] = None,
263
+ streamed: bool = False,
264
+ action: None = None,
265
+ chunk_size: int = 1024,
266
+ *,
267
+ iterator: Literal[True] = True,
268
+ **kwargs: Any,
269
+ ) -> Iterator[Any]: ...
270
+
271
+ @overload
272
+ def repository_archive(
273
+ self,
274
+ sha: Optional[str] = None,
275
+ streamed: Literal[True] = True,
276
+ action: Optional[Callable[[bytes], None]] = None,
277
+ chunk_size: int = 1024,
278
+ *,
279
+ iterator: Literal[False] = False,
280
+ **kwargs: Any,
281
+ ) -> None: ...
282
+
200
283
  @cli.register_custom_action(cls_names="Project", optional=("sha", "format"))
201
284
  @exc.on_http_error(exc.GitlabListError)
202
285
  def repository_archive(
@@ -3,7 +3,17 @@ GitLab API:
3
3
  https://docs.gitlab.com/ee/api/secure_files.html
4
4
  """
5
5
 
6
- from typing import Any, Callable, cast, Iterator, Optional, TYPE_CHECKING, Union
6
+ from typing import (
7
+ Any,
8
+ Callable,
9
+ cast,
10
+ Iterator,
11
+ Literal,
12
+ Optional,
13
+ overload,
14
+ TYPE_CHECKING,
15
+ Union,
16
+ )
7
17
 
8
18
  import requests
9
19
 
@@ -18,6 +28,39 @@ __all__ = ["ProjectSecureFile", "ProjectSecureFileManager"]
18
28
 
19
29
 
20
30
  class ProjectSecureFile(ObjectDeleteMixin, RESTObject):
31
+ @overload
32
+ def download(
33
+ self,
34
+ streamed: Literal[False] = False,
35
+ action: None = None,
36
+ chunk_size: int = 1024,
37
+ *,
38
+ iterator: Literal[False] = False,
39
+ **kwargs: Any,
40
+ ) -> bytes: ...
41
+
42
+ @overload
43
+ def download(
44
+ self,
45
+ streamed: bool = False,
46
+ action: None = None,
47
+ chunk_size: int = 1024,
48
+ *,
49
+ iterator: Literal[True] = True,
50
+ **kwargs: Any,
51
+ ) -> Iterator[Any]: ...
52
+
53
+ @overload
54
+ def download(
55
+ self,
56
+ streamed: Literal[True] = True,
57
+ action: Optional[Callable[[bytes], None]] = None,
58
+ chunk_size: int = 1024,
59
+ *,
60
+ iterator: Literal[False] = False,
61
+ **kwargs: Any,
62
+ ) -> None: ...
63
+
21
64
  @cli.register_custom_action(cls_names="ProjectSecureFile")
22
65
  @exc.on_http_error(exc.GitlabGetError)
23
66
  def download(
@@ -1,4 +1,15 @@
1
- from typing import Any, Callable, cast, Iterator, List, Optional, TYPE_CHECKING, Union
1
+ from typing import (
2
+ Any,
3
+ Callable,
4
+ cast,
5
+ Iterator,
6
+ List,
7
+ Literal,
8
+ Optional,
9
+ overload,
10
+ TYPE_CHECKING,
11
+ Union,
12
+ )
2
13
 
3
14
  import requests
4
15
 
@@ -24,6 +35,39 @@ __all__ = [
24
35
  class Snippet(UserAgentDetailMixin, SaveMixin, ObjectDeleteMixin, RESTObject):
25
36
  _repr_attr = "title"
26
37
 
38
+ @overload
39
+ def content(
40
+ self,
41
+ streamed: Literal[False] = False,
42
+ action: None = None,
43
+ chunk_size: int = 1024,
44
+ *,
45
+ iterator: Literal[False] = False,
46
+ **kwargs: Any,
47
+ ) -> bytes: ...
48
+
49
+ @overload
50
+ def content(
51
+ self,
52
+ streamed: bool = False,
53
+ action: None = None,
54
+ chunk_size: int = 1024,
55
+ *,
56
+ iterator: Literal[True] = True,
57
+ **kwargs: Any,
58
+ ) -> Iterator[Any]: ...
59
+
60
+ @overload
61
+ def content(
62
+ self,
63
+ streamed: Literal[True] = True,
64
+ action: Optional[Callable[[bytes], None]] = None,
65
+ chunk_size: int = 1024,
66
+ *,
67
+ iterator: Literal[False] = False,
68
+ **kwargs: Any,
69
+ ) -> None: ...
70
+
27
71
  @cli.register_custom_action(cls_names="Snippet")
28
72
  @exc.on_http_error(exc.GitlabGetError)
29
73
  def content(
@@ -148,7 +192,7 @@ class SnippetManager(CRUDMixin, RESTManager):
148
192
  """
149
193
  utils.warn(
150
194
  message=(
151
- "Gitlab.snippets.public() is deprecated and will be removed in a"
195
+ "Gitlab.snippets.public() is deprecated and will be removed in a "
152
196
  "future major version. Use Gitlab.snippets.list_public() instead."
153
197
  ),
154
198
  category=DeprecationWarning,
@@ -167,6 +211,39 @@ class ProjectSnippet(UserAgentDetailMixin, SaveMixin, ObjectDeleteMixin, RESTObj
167
211
  discussions: ProjectSnippetDiscussionManager
168
212
  notes: ProjectSnippetNoteManager
169
213
 
214
+ @overload
215
+ def content(
216
+ self,
217
+ streamed: Literal[False] = False,
218
+ action: None = None,
219
+ chunk_size: int = 1024,
220
+ *,
221
+ iterator: Literal[False] = False,
222
+ **kwargs: Any,
223
+ ) -> bytes: ...
224
+
225
+ @overload
226
+ def content(
227
+ self,
228
+ streamed: bool = False,
229
+ action: None = None,
230
+ chunk_size: int = 1024,
231
+ *,
232
+ iterator: Literal[True] = True,
233
+ **kwargs: Any,
234
+ ) -> Iterator[Any]: ...
235
+
236
+ @overload
237
+ def content(
238
+ self,
239
+ streamed: Literal[True] = True,
240
+ action: Optional[Callable[[bytes], None]] = None,
241
+ chunk_size: int = 1024,
242
+ *,
243
+ iterator: Literal[False] = False,
244
+ **kwargs: Any,
245
+ ) -> None: ...
246
+
170
247
  @cli.register_custom_action(cls_names="ProjectSnippet")
171
248
  @exc.on_http_error(exc.GitlabGetError)
172
249
  def content(
@@ -0,0 +1,52 @@
1
+ from gitlab.base import RESTManager, RESTObject
2
+ from gitlab.mixins import (
3
+ CreateMixin,
4
+ DeleteMixin,
5
+ ListMixin,
6
+ ObjectDeleteMixin,
7
+ SaveMixin,
8
+ UpdateMethod,
9
+ UpdateMixin,
10
+ )
11
+ from gitlab.types import ArrayAttribute, RequiredOptional
12
+
13
+ __all__ = [
14
+ "ProjectExternalStatusCheck",
15
+ "ProjectExternalStatusCheckManager",
16
+ "ProjectMergeRequestStatusCheck",
17
+ "ProjectMergeRequestStatusCheckManager",
18
+ ]
19
+
20
+
21
+ class ProjectExternalStatusCheck(SaveMixin, ObjectDeleteMixin, RESTObject):
22
+ pass
23
+
24
+
25
+ class ProjectExternalStatusCheckManager(
26
+ ListMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTManager
27
+ ):
28
+ _path = "/projects/{project_id}/external_status_checks"
29
+ _obj_cls = ProjectExternalStatusCheck
30
+ _from_parent_attrs = {"project_id": "id"}
31
+ _create_attrs = RequiredOptional(
32
+ required=("name", "external_url"),
33
+ optional=("shared_secret", "protected_branch_ids"),
34
+ )
35
+ _update_attrs = RequiredOptional(
36
+ optional=("name", "external_url", "shared_secret", "protected_branch_ids")
37
+ )
38
+ _types = {"protected_branch_ids": ArrayAttribute}
39
+
40
+
41
+ class ProjectMergeRequestStatusCheck(SaveMixin, RESTObject):
42
+ pass
43
+
44
+
45
+ class ProjectMergeRequestStatusCheckManager(ListMixin, RESTManager):
46
+ _path = "/projects/{project_id}/merge_requests/{merge_request_iid}/status_checks"
47
+ _obj_cls = ProjectMergeRequestStatusCheck
48
+ _from_parent_attrs = {"project_id": "project_id", "merge_request_iid": "iid"}
49
+ _update_attrs = RequiredOptional(
50
+ required=("sha", "external_status_check_id", "status")
51
+ )
52
+ _update_method = UpdateMethod.POST
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: python-gitlab
3
- Version: 5.3.1
3
+ Version: 5.4.0
4
4
  Summary: The python wrapper for the GitLab REST and GraphQL APIs.
5
5
  Author-email: Gauvain Pocentek <gauvain@pocentek.net>
6
6
  Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
@@ -1,13 +1,13 @@
1
1
  gitlab/__init__.py,sha256=UP73h54550MIXpRt5OCLJJ-oBHIx1iHSdxmGARfhbO4,1440
2
2
  gitlab/__main__.py,sha256=HTesNl0UAU6mPb9EXWkTKMy6Q6pAUxGi3iPnDHTE2uE,68
3
- gitlab/_version.py,sha256=WvFp5Sk3ASKgHQPGMRQiQnGPAUHUNRNK99uzJ205LLo,249
3
+ gitlab/_version.py,sha256=6xIwpGFEjYiKx8Z_Hgds7jGVg68iRAssqFOl3-Mcgb4,249
4
4
  gitlab/base.py,sha256=-4DNPEWtOB1sGmETTivrJVyl-DWtbmWTUIDTHpenF9Y,13810
5
5
  gitlab/cli.py,sha256=d3-LtZuA1Fgon5wZWn4c3E70fTIu4mM4Juyhh3F8EBs,12416
6
- gitlab/client.py,sha256=oMUYbWmRQg9Vdp-3_YXI8C3ho4eJ4RopEahHqBGUjGo,54846
6
+ gitlab/client.py,sha256=Mx1ANfIOpshgBg5saGReZsNbbK6TZmCg2iJUApAWL5Y,55065
7
7
  gitlab/config.py,sha256=T1DgUXD0-MN2qNszrv-SO5d4uy0FITnNN0vWJgOt2yo,9088
8
- gitlab/const.py,sha256=CD9ahY-Tefhc6OHsmHG0lj5uPdH1DwU1xZmSQfho_ao,5374
8
+ gitlab/const.py,sha256=7SgYfngwRSwzpZMhYyT_Xko0KyGhMrAg8DiyX18DsxM,5114
9
9
  gitlab/exceptions.py,sha256=VOQftPzEq5mpVj6vke7z6Xe4S7Yf_rDTab0lNHqf3AY,8390
10
- gitlab/mixins.py,sha256=SLupFM7GWlVFhUW0OCMM60TKfGtRwY_Y2HpPvM7cmbw,37112
10
+ gitlab/mixins.py,sha256=z543RVakuZI7YtKga-lFx4jcjxAUYcGxaRXj6uMZIFI,37899
11
11
  gitlab/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  gitlab/types.py,sha256=lepiiI_YOr94B4koqIHuY70tszZC_X3YW4lDvbadbI8,3312
13
13
  gitlab/utils.py,sha256=3OngV45Gb4UO2GR-6-kXax1Ghdw6bpyRdUC2cHpyCSw,9027
@@ -17,11 +17,11 @@ gitlab/_backends/protocol.py,sha256=m5qSz1o3i0H4XJCWnqx0wIFilOIU9cKxzFsYxLL6Big,
17
17
  gitlab/_backends/requests_backend.py,sha256=CrSDTfkvi17dT4kTU8R3qQFBNCPJqEfBJq4gJ2GXleA,5534
18
18
  gitlab/v4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  gitlab/v4/cli.py,sha256=vVWbeOWUdIPagCRcR-myY6E5tPVmhomroT1y6r2HwsQ,22721
20
- gitlab/v4/objects/__init__.py,sha256=jLRGKs89j9JSB-yDU5sOLmPZ2jTIwvDaTycGIhRjWOQ,2153
20
+ gitlab/v4/objects/__init__.py,sha256=rorXTLL7nVxZtwnqVtQPRRprBQplil_w-lp87HJ3W7Q,2182
21
21
  gitlab/v4/objects/access_requests.py,sha256=pPYwB-b4fvKVdBoBRpzx2ensiMXbQwmBkN0XBh6ScaA,923
22
22
  gitlab/v4/objects/appearance.py,sha256=uMt0bjo_KlxwKHItFzGMY9vXm5e489UG_o0EcFVJE8E,1932
23
23
  gitlab/v4/objects/applications.py,sha256=FB1Se6Xa3CFLJlSeZ7lLoyAwY8cAF4DUDsuc59NGpcs,591
24
- gitlab/v4/objects/artifacts.py,sha256=_oJbZrtK4058ZYd_nn0D1DT8I-c0f6XzgkgMcEa6ykQ,5098
24
+ gitlab/v4/objects/artifacts.py,sha256=osS5eeRKeNIHsJmYscaTp5HDWYCTWwphSv8HbAIho8Y,6989
25
25
  gitlab/v4/objects/audit_events.py,sha256=OPhGt3br-pOyqMGUvXKAVuBvEz9_TQttBfOnjytAtJY,1910
26
26
  gitlab/v4/objects/award_emojis.py,sha256=ASgIh4475tf1pq2xBHP2bYgKoQoP6UxgoZUHT65iYPM,5881
27
27
  gitlab/v4/objects/badges.py,sha256=wtL7u7qQ01vwUIpA_9RsztAWsVSNLnPsov9VAYyagLQ,1464
@@ -32,7 +32,7 @@ gitlab/v4/objects/bulk_imports.py,sha256=rexiCZiZLRdzDlFqRjW4MN8JGfbaYV71s1BxKZx
32
32
  gitlab/v4/objects/ci_lint.py,sha256=HhU-PJsQdymh3p0wFxB0ecf84Sd0UaiX0V3YEYQjMqg,2308
33
33
  gitlab/v4/objects/cluster_agents.py,sha256=zN-CEZVomcGXQSh7mzJScd55LzQmVwbDcLKVgUKaLhU,817
34
34
  gitlab/v4/objects/clusters.py,sha256=Gsz5Jf2L27gzdbQvb5gKY20gxFT4jZASAofy5qL5hxQ,3750
35
- gitlab/v4/objects/commits.py,sha256=31O2_eU19Z7Df1KKqfXY61lFDARUcQJAqUZDWvqlBI0,8972
35
+ gitlab/v4/objects/commits.py,sha256=mKHx9Xg32cSyzlCVMAAfydi3xdFF8U2U5tc2J40KK0Y,9100
36
36
  gitlab/v4/objects/container_registry.py,sha256=w-t1nbjavJ18MEPmbIrEUcaOP2mXsr3Oc1Ub_1U95Y0,3360
37
37
  gitlab/v4/objects/custom_attributes.py,sha256=48HKZ2C65UUU65FdvKrefFzRMVKRbG-rl58OE9FAuyI,1875
38
38
  gitlab/v4/objects/deploy_keys.py,sha256=hv9WSzbE9TqRskVSfyNfATGxSw7-urId2tH6ag1hnq4,1947
@@ -45,49 +45,50 @@ gitlab/v4/objects/epics.py,sha256=HKLpEL7_K54M6prGjga3qw5VfI2ZGGxBbfz42Oumvr0,41
45
45
  gitlab/v4/objects/events.py,sha256=20yCSlR9XB75AwMzatmAt4VdT9PL2nX0t1p1sAWbrvI,7067
46
46
  gitlab/v4/objects/export_import.py,sha256=XVmrSq_qHwQr3XamFPfISEXnlBd-icJRm2CCa3V2puY,1909
47
47
  gitlab/v4/objects/features.py,sha256=N7T52I2JyNIgD1JejrSr8fNa14ZlAUxrS2VceUekhj0,1973
48
- gitlab/v4/objects/files.py,sha256=SEBrwJR-AnjJUhsFTANe_WP4GBtwTGtoq4ahgoTemTY,12025
48
+ gitlab/v4/objects/files.py,sha256=Vbz5mdcvmPR7QKvTufWxdnux2BRDG1dwhEPDqh8VQr0,13041
49
49
  gitlab/v4/objects/geo_nodes.py,sha256=tD9piU7OIZgbNQRUeLTFPtAJ6PVL_SI6tR_zh6Tm2M8,3686
50
50
  gitlab/v4/objects/group_access_tokens.py,sha256=EijY0sfsp0Gtx_q4JLBeLL3jphx5b_6-nTzKxV272jc,1023
51
51
  gitlab/v4/objects/groups.py,sha256=YxOeaRYUjhu8PicCicVT7Eua04YuyOLAc8J13V7r9Gg,15958
52
52
  gitlab/v4/objects/hooks.py,sha256=ig8qyC6ZWpZXqcGYCSS7LVvTpD1xnLkNNtfJAOXeYv8,4445
53
53
  gitlab/v4/objects/integrations.py,sha256=QWl5ZnE1oivt4ho9qJa_o268ORdaW35D4klBRy1jUyQ,9229
54
54
  gitlab/v4/objects/invitations.py,sha256=ya9x7xhL1oSbx-FLJud-lHKmbYQoTplZlAbjsZip2CI,2734
55
- gitlab/v4/objects/issues.py,sha256=kxciXrLGxCsevJ2eoxpDdMLnw1kF4VrQTy4YB4AoN1U,10393
55
+ gitlab/v4/objects/issues.py,sha256=RHvoE4aJgMAfeWp3md9Ekg29PaiTbPIlDAn99Pg_ap4,10403
56
56
  gitlab/v4/objects/iterations.py,sha256=QsPOg0YB57ShQUdTQwa_wXtNfWAM2c53kWE6y5xjg6E,1561
57
57
  gitlab/v4/objects/job_token_scope.py,sha256=J69VVjtRgnTYQrFHFxOWQv3T2s6XRxb7uz57IAhnsdU,2622
58
- gitlab/v4/objects/jobs.py,sha256=g7l5dA6-99tyLDoohjJ_xZvGyMbeytn4L9T-h78NQaE,9140
58
+ gitlab/v4/objects/jobs.py,sha256=tEaBf_PGxSiJQLe4HWAd3nSTmP40V_kqcjeL5lJ1juU,11535
59
59
  gitlab/v4/objects/keys.py,sha256=IclYGSzcVEZPIhDdIz-p16rvb68FnBTgAf1cWCXWjkY,882
60
- gitlab/v4/objects/labels.py,sha256=JvOciJ6V76pF9HuJp5OT_Ykq8oqaa6ItxvpKf3hiEzs,4736
60
+ gitlab/v4/objects/labels.py,sha256=4o0R9hfhsowLfPT_XGPu74R4o4Q4nOosajmf-s4Cncg,4756
61
61
  gitlab/v4/objects/ldap.py,sha256=adpkdfk7VBjshuh8SpCsc77Pax4QgqCx1N12CuzitDE,1662
62
62
  gitlab/v4/objects/members.py,sha256=YJO9MaqlCSUnozHIlI7MfSlcWTju4xRmW8QIlEiBmok,3902
63
63
  gitlab/v4/objects/merge_request_approvals.py,sha256=XJWjThmc0dbKpYzMW7XB3iyz7G9qRerUNAyZMVw5it0,6627
64
- gitlab/v4/objects/merge_requests.py,sha256=GftA_42h4zyS7LG7-lmf4wG5gJPHkYqQwPXFB-Sywxs,18532
64
+ gitlab/v4/objects/merge_requests.py,sha256=d2KpiITBzpamdpoGU-H2z1wJaPuZxjgYznHLT0HeKPo,18654
65
65
  gitlab/v4/objects/merge_trains.py,sha256=e0Gp2Ri75elcG_r9w8qxdrcWW_YiebPRwUYIH5od8kc,422
66
66
  gitlab/v4/objects/milestones.py,sha256=LHAGYJlTm2ed3eqv4mTO-QZ7vRbwGXRFpre_G4gHdKY,7073
67
67
  gitlab/v4/objects/namespaces.py,sha256=5_km8RP_OLZoRm6u-p53S2AM5UsHyJ4j65fi5fGIoLo,1535
68
68
  gitlab/v4/objects/notes.py,sha256=Y0wrSD2pwvzX1RfyzyeXMMBy0_jOsWsaIUpa6CYWprg,8588
69
69
  gitlab/v4/objects/notification_settings.py,sha256=zhltGjuu1HiqdON2v9-uKu7Z6TOOBOgQ3GdWgfEAJ64,2061
70
70
  gitlab/v4/objects/package_protection_rules.py,sha256=OVO9R_ePWjNFKK8LCuycGpCds6Yj6ZFtirZRSlzKa7Q,1129
71
- gitlab/v4/objects/packages.py,sha256=4tEocanjw1GlFvfOncCY0Z-jJfjiFLhZeUiBIjLz9_g,7225
71
+ gitlab/v4/objects/packages.py,sha256=vVQmMSXunJeZxC0mvpUjsg9eatJqLpN0OxLn6nRSjNI,8255
72
72
  gitlab/v4/objects/pages.py,sha256=Z9x9Sd21daSLmapkBLoV3bKmxQu-JFtrHgJMBjfNbg8,1868
73
73
  gitlab/v4/objects/personal_access_tokens.py,sha256=vMsAytE5czai3fpyTCyV1sR3cZDZRhvI06u08L8O7mw,1315
74
74
  gitlab/v4/objects/pipelines.py,sha256=nQrzNW6WCTcDCqz_nl8i7YYGpXfRaEVGGpeRdObjeW0,10664
75
75
  gitlab/v4/objects/project_access_tokens.py,sha256=z_BCaBtXC7wzGVN6Ip0H72VwHID8XEBHDddCw0J8hO0,1043
76
- gitlab/v4/objects/projects.py,sha256=QI0_jOwo2B_7lydiiNUCW86e3KayTLbMgHdBjdvz7sY,45703
76
+ gitlab/v4/objects/projects.py,sha256=X5cznXiJe-mxKeKI6LpMP2XMqbjmBUmqs6P7ZCD81dE,46711
77
77
  gitlab/v4/objects/push_rules.py,sha256=0dKMWEzF5h1zATh0_j_SvjQ7HKx9_5M7J9hzDGB66Rc,3041
78
78
  gitlab/v4/objects/registry_protection_repository_rules.py,sha256=iu4ubqfh_sw0BCxRqqvXEUrPXspr8d0z3njQLwTatpo,1153
79
79
  gitlab/v4/objects/registry_protection_rules.py,sha256=bZsUAjoxwQEHOfr4Bxz6FQA2MGHZpWOFz00o99hcfI4,1092
80
80
  gitlab/v4/objects/releases.py,sha256=j4_45oOj2yaA2XZ3fwBcKhFJ6li4vQy_zyr013LKfvY,1972
81
- gitlab/v4/objects/repositories.py,sha256=RfOzuEvq_dBY1t6KaHG939tfsto9PiyMi-y_ikXSqkU,11221
81
+ gitlab/v4/objects/repositories.py,sha256=c3Tj6gbjhIsjrXCooeYZnrGcLAyeKV0ERcd7SzgjriE,13027
82
82
  gitlab/v4/objects/resource_groups.py,sha256=fYYnA2YO9CSTzxwImVCVPSiPkIeNpKRrPj7dpzwati4,1427
83
83
  gitlab/v4/objects/reviewers.py,sha256=HTU8hw09fRofvoj5V4kde1PLK3QSe1uY3BVUtxOvJ00,517
84
84
  gitlab/v4/objects/runners.py,sha256=QFYiApMyBWs0rhw1drylutoltI2zdIwDeYP1oFJUGJ4,4917
85
- gitlab/v4/objects/secure_files.py,sha256=KC5jGC79Qd_IeHx1EhjobMZrJPPIA-4jUYZny_o3cCE,2521
85
+ gitlab/v4/objects/secure_files.py,sha256=c7vZ2Ia3qCC6lJY-Rg5zsLgQ0NIVHQnVV8QNwFwoomM,3341
86
86
  gitlab/v4/objects/service_accounts.py,sha256=r2s33LU9LLgzYtCiUwQEiqEB9o7YuzJRw0aaFXEJK6Q,603
87
87
  gitlab/v4/objects/settings.py,sha256=LTkdyhhU2MTA15EJw2lZeqDKfK_Bg65CV1CchPljrqY,4295
88
88
  gitlab/v4/objects/sidekiq.py,sha256=kIMgglIBJkbA_io9MXwkCEUs8mZPte6sFQYoWH1TXI4,2996
89
- gitlab/v4/objects/snippets.py,sha256=Tq_-9thqcFWN0AqfYOROxwbXfKqlY0zLqbVcp7nww3w,8176
89
+ gitlab/v4/objects/snippets.py,sha256=bHGzCPBCVgYYb5X29G3IVjCQgy7Gn87Y5kbHeJOTlps,9755
90
90
  gitlab/v4/objects/statistics.py,sha256=NPN8WpCwFJeWeLcn5zahwAgzpJl-Q6bJyoi5ff8XCRQ,2638
91
+ gitlab/v4/objects/status_checks.py,sha256=AV73nxwyKLWd5kCpQKB_Q-PBt2_4LeB0nM6Q3ATArm4,1609
91
92
  gitlab/v4/objects/tags.py,sha256=LCvSzI44a1NlrUVi5A_2eOwFSOJjVBSkWe71QdXH_68,1453
92
93
  gitlab/v4/objects/templates.py,sha256=IBu46OdUsYwAvozGwPoFLoQf61jdp3_VGcIPbL3ni6c,5092
93
94
  gitlab/v4/objects/todos.py,sha256=HMqvK9CDyxj2jwSQKjnaTLmMztDhqIL_62CHh6Rh4lk,1846
@@ -96,10 +97,10 @@ gitlab/v4/objects/triggers.py,sha256=UAERq_C-QdPBbBQPHLh5IfhpkdDeIxdnVGPHfu9Qy5Y
96
97
  gitlab/v4/objects/users.py,sha256=_gGrTwcE17jeoXIPgfFSv54jtF1_9C1R0Y0hhssTvXY,21381
97
98
  gitlab/v4/objects/variables.py,sha256=S0Vz32jEpUbo4J2js8gMPPTVpcy1ge5FYVHLiPz9c-A,2627
98
99
  gitlab/v4/objects/wikis.py,sha256=JtI1cQqZV1_PRfKVlQRMh4LZjdxEfi9T2VuFYv6PrV8,1775
99
- python_gitlab-5.3.1.dist-info/AUTHORS,sha256=Z0P61GJSVnp7iFbRcMezhx3f4zMyPkVmG--TWaRo768,526
100
- python_gitlab-5.3.1.dist-info/COPYING,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
101
- python_gitlab-5.3.1.dist-info/METADATA,sha256=wxAa_-95qcT5A5UpvnnFTXHoGZO0s3u6dSkxVUAO_wk,8478
102
- python_gitlab-5.3.1.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
103
- python_gitlab-5.3.1.dist-info/entry_points.txt,sha256=nhpKLLP_uQPFByn8UtE9zsvQQwa402t52o_Cw9IFXMo,43
104
- python_gitlab-5.3.1.dist-info/top_level.txt,sha256=MvIaP8p_Oaf4gO_hXmHkX-5y2deHLp1pe6tJR3ukQ6o,7
105
- python_gitlab-5.3.1.dist-info/RECORD,,
100
+ python_gitlab-5.4.0.dist-info/AUTHORS,sha256=Z0P61GJSVnp7iFbRcMezhx3f4zMyPkVmG--TWaRo768,526
101
+ python_gitlab-5.4.0.dist-info/COPYING,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
102
+ python_gitlab-5.4.0.dist-info/METADATA,sha256=m9b5jCa1hyOliDS_pOjD12zWD5DXsXOdUj0a8ZX3ApA,8478
103
+ python_gitlab-5.4.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
104
+ python_gitlab-5.4.0.dist-info/entry_points.txt,sha256=nhpKLLP_uQPFByn8UtE9zsvQQwa402t52o_Cw9IFXMo,43
105
+ python_gitlab-5.4.0.dist-info/top_level.txt,sha256=MvIaP8p_Oaf4gO_hXmHkX-5y2deHLp1pe6tJR3ukQ6o,7
106
+ python_gitlab-5.4.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5