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