3
3
https://docs.gitlab.com/ee/api/merge_requests.html
4
4
https://docs.gitlab.com/ee/api/merge_request_approvals.html
5
5
"""
6
+ from typing import Any ,cast ,Dict ,Optional ,TYPE_CHECKING ,Union
7
+
8
+ import requests
9
+
10
+ import gitlab
6
11
from gitlab import cli
7
12
from gitlab import exceptions as exc
8
13
from gitlab import types
@@ -159,7 +164,9 @@ class ProjectMergeRequest(
159
164
160
165
@cli .register_custom_action ("ProjectMergeRequest" )
161
166
@exc .on_http_error (exc .GitlabMROnBuildSuccessError )
162
- def cancel_merge_when_pipeline_succeeds (self ,** kwargs ):
167
+ def cancel_merge_when_pipeline_succeeds (
168
+ self ,** kwargs :Any
169
+ )-> "ProjectMergeRequest" :
163
170
"""Cancel merge when the pipeline succeeds.
164
171
165
172
Args:
@@ -169,17 +176,23 @@ def cancel_merge_when_pipeline_succeeds(self, **kwargs):
169
176
GitlabAuthenticationError: If authentication is not correct
170
177
GitlabMROnBuildSuccessError: If the server could not handle the
171
178
request
179
+
180
+ Returns:
181
+ ProjectMergeRequest
172
182
"""
173
183
174
184
path = (
175
185
f"{ self .manager .path } /{ self .get_id ()} /cancel_merge_when_pipeline_succeeds"
176
186
)
177
187
server_data = self .manager .gitlab .http_put (path ,** kwargs )
188
+ if TYPE_CHECKING :
189
+ assert isinstance (server_data ,dict )
178
190
self ._update_attrs (server_data )
191
+ return ProjectMergeRequest (self .manager ,server_data )
179
192
180
193
@cli .register_custom_action ("ProjectMergeRequest" )
181
194
@exc .on_http_error (exc .GitlabListError )
182
- def closes_issues (self ,** kwargs ) :
195
+ def closes_issues (self ,** kwargs : Any ) -> RESTObjectList :
183
196
"""List issues that will close on merge."
184
197
185
198
Args:
@@ -199,12 +212,14 @@ def closes_issues(self, **kwargs):
199
212
"""
200
213
path = f"{ self .manager .path } /{ self .get_id ()} /closes_issues"
201
214
data_list = self .manager .gitlab .http_list (path ,as_list = False ,** kwargs )
215
+ if TYPE_CHECKING :
216
+ assert isinstance (data_list ,gitlab .GitlabList )
202
217
manager = ProjectIssueManager (self .manager .gitlab ,parent = self .manager ._parent )
203
218
return RESTObjectList (manager ,ProjectIssue ,data_list )
204
219
205
220
@cli .register_custom_action ("ProjectMergeRequest" )
206
221
@exc .on_http_error (exc .GitlabListError )
207
- def commits (self ,** kwargs ) :
222
+ def commits (self ,** kwargs : Any ) -> RESTObjectList :
208
223
"""List the merge request commits.
209
224
210
225
Args:
@@ -225,12 +240,14 @@ def commits(self, **kwargs):
225
240
226
241
path = f"{ self .manager .path } /{ self .get_id ()} /commits"
227
242
data_list = self .manager .gitlab .http_list (path ,as_list = False ,** kwargs )
243
+ if TYPE_CHECKING :
244
+ assert isinstance (data_list ,gitlab .GitlabList )
228
245
manager = ProjectCommitManager (self .manager .gitlab ,parent = self .manager ._parent )
229
246
return RESTObjectList (manager ,ProjectCommit ,data_list )
230
247
231
248
@cli .register_custom_action ("ProjectMergeRequest" )
232
249
@exc .on_http_error (exc .GitlabListError )
233
- def changes (self ,** kwargs ) :
250
+ def changes (self ,** kwargs : Any ) -> Union [ Dict [ str , Any ], requests . Response ] :
234
251
"""List the merge request changes.
235
252
236
253
Args:
@@ -248,7 +265,7 @@ def changes(self, **kwargs):
248
265
249
266
@cli .register_custom_action ("ProjectMergeRequest" ,tuple (), ("sha" ,))
250
267
@exc .on_http_error (exc .GitlabMRApprovalError )
251
- def approve (self ,sha = None ,** kwargs ) :
268
+ def approve (self ,sha : Optional [ str ] = None ,** kwargs : Any ) -> Dict [ str , Any ] :
252
269
"""Approve the merge request.
253
270
254
271
Args:
@@ -259,6 +276,9 @@ def approve(self, sha=None, **kwargs):
259
276
GitlabAuthenticationError: If authentication is not correct
260
277
GitlabMRApprovalError: If the approval failed
261
278
279
+ Returns:
280
+ A dict containing the result.
281
+
262
282
https://docs.gitlab.com/ee/api/merge_request_approvals.html#approve-merge-request
263
283
"""
264
284
path = f"{ self .manager .path } /{ self .get_id ()} /approve"
@@ -267,11 +287,14 @@ def approve(self, sha=None, **kwargs):
267
287
data ["sha" ]= sha
268
288
269
289
server_data = self .manager .gitlab .http_post (path ,post_data = data ,** kwargs )
290
+ if TYPE_CHECKING :
291
+ assert isinstance (server_data ,dict )
270
292
self ._update_attrs (server_data )
293
+ return server_data
271
294
272
295
@cli .register_custom_action ("ProjectMergeRequest" )
273
296
@exc .on_http_error (exc .GitlabMRApprovalError )
274
- def unapprove (self ,** kwargs ) :
297
+ def unapprove (self ,** kwargs : Any ) -> None :
275
298
"""Unapprove the merge request.
276
299
277
300
Args:
@@ -284,14 +307,16 @@ def unapprove(self, **kwargs):
284
307
https://docs.gitlab.com/ee/api/merge_request_approvals.html#unapprove-merge-request
285
308
"""
286
309
path = f"{ self .manager .path } /{ self .get_id ()} /unapprove"
287
- data = {}
310
+ data : Dict [ str , Any ] = {}
288
311
289
312
server_data = self .manager .gitlab .http_post (path ,post_data = data ,** kwargs )
313
+ if TYPE_CHECKING :
314
+ assert isinstance (server_data ,dict )
290
315
self ._update_attrs (server_data )
291
316
292
317
@cli .register_custom_action ("ProjectMergeRequest" )
293
318
@exc .on_http_error (exc .GitlabMRRebaseError )
294
- def rebase (self ,** kwargs ) :
319
+ def rebase (self ,** kwargs : Any ) -> Union [ Dict [ str , Any ], requests . Response ] :
295
320
"""Attempt to rebase the source branch onto the target branch
296
321
297
322
Args:
@@ -302,12 +327,12 @@ def rebase(self, **kwargs):
302
327
GitlabMRRebaseError: If rebasing failed
303
328
"""
304
329
path = f"{ self .manager .path } /{ self .get_id ()} /rebase"
305
- data = {}
330
+ data : Dict [ str , Any ] = {}
306
331
return self .manager .gitlab .http_put (path ,post_data = data ,** kwargs )
307
332
308
333
@cli .register_custom_action ("ProjectMergeRequest" )
309
334
@exc .on_http_error (exc .GitlabGetError )
310
- def merge_ref (self ,** kwargs ) :
335
+ def merge_ref (self ,** kwargs : Any ) -> Union [ Dict [ str , Any ], requests . Response ] :
311
336
"""Attempt to merge changes between source and target branches into
312
337
`refs/merge-requests/:iid/merge`.
313
338
@@ -332,15 +357,15 @@ def merge_ref(self, **kwargs):
332
357
@exc .on_http_error (exc .GitlabMRClosedError )
333
358
def merge (
334
359
self ,
335
- merge_commit_message = None ,
336
- should_remove_source_branch = False ,
337
- merge_when_pipeline_succeeds = False ,
338
- ** kwargs ,
339
- ):
360
+ merge_commit_message : Optional [ str ] = None ,
361
+ should_remove_source_branch : bool = False ,
362
+ merge_when_pipeline_succeeds : bool = False ,
363
+ ** kwargs : Any ,
364
+ )-> Dict [ str , Any ] :
340
365
"""Accept the merge request.
341
366
342
367
Args:
343
- merge_commit_message (bool ): Commit message
368
+ merge_commit_message (str ): Commit message
344
369
should_remove_source_branch (bool): If True, removes the source
345
370
branch
346
371
merge_when_pipeline_succeeds (bool): Wait for the build to succeed,
@@ -352,7 +377,7 @@ def merge(
352
377
GitlabMRClosedError: If the merge failed
353
378
"""
354
379
path = f"{ self .manager .path } /{ self .get_id ()} /merge"
355
- data = {}
380
+ data : Dict [ str , Any ] = {}
356
381
if merge_commit_message :
357
382
data ["merge_commit_message" ]= merge_commit_message
358
383
if should_remove_source_branch is not None :
@@ -361,7 +386,10 @@ def merge(
361
386
data ["merge_when_pipeline_succeeds" ]= True
362
387
363
388
server_data = self .manager .gitlab .http_put (path ,post_data = data ,** kwargs )
389
+ if TYPE_CHECKING :
390
+ assert isinstance (server_data ,dict )
364
391
self ._update_attrs (server_data )
392
+ return server_data
365
393
366
394
367
395
class ProjectMergeRequestManager (CRUDMixin ,RESTManager ):
@@ -428,6 +456,11 @@ class ProjectMergeRequestManager(CRUDMixin, RESTManager):
428
456
"labels" :types .ListAttribute ,
429
457
}
430
458
459
+ def get (
460
+ self ,id :Union [str ,int ],lazy :bool = False ,** kwargs :Any
461
+ )-> ProjectMergeRequest :
462
+ return cast (ProjectMergeRequest ,super ().get (id = id ,lazy = lazy ,** kwargs ))
463
+
431
464
432
465
class ProjectDeploymentMergeRequest (MergeRequest ):
433
466
pass