Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit473dc6f

Browse files
esabouraudGauvain Pocentek
authored and
Gauvain Pocentek
committed
Add support for project-level MR approval configuration
1 parentbbefb99 commit473dc6f

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed

‎docs/gl_objects/mr_approvals.rst

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
##############################################
2+
Project-level merge request approvals settings
3+
##############################################
4+
5+
References
6+
----------
7+
8+
* v4 API:
9+
10+
+:class:`gitlab.v4.objects.ProjectApproval`
11+
+:class:`gitlab.v4.objects.ProjectApprovalManager`
12+
+:attr:`gitlab.v4.objects.Project.approvals`
13+
14+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html#project-level-mr-approvals
15+
16+
Examples
17+
--------
18+
19+
Get project-level MR approvals settings::
20+
21+
mras = project.approvals.get()
22+
23+
Change project-level MR approvals settings::
24+
25+
mras.approvals_before_merge = 2
26+
mras.save()
27+
28+
Change project-level MR allowed approvers::
29+
30+
project.approvals.set_approvers(approver_ids = [105], approver_group_ids=[653, 654])

‎gitlab/mixins.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,18 @@ def get_update_attrs(self):
223223
"""
224224
returngetattr(self,'_update_attrs', (tuple(),tuple()))
225225

226+
def_get_update_method(self):
227+
"""Return the HTTP method to use.
228+
229+
Returns:
230+
object: http_put (default) or http_post
231+
"""
232+
ifgetattr(self,'_update_uses_post',False):
233+
http_method=self.gitlab.http_post
234+
else:
235+
http_method=self.gitlab.http_put
236+
returnhttp_method
237+
226238
@exc.on_http_error(exc.GitlabUpdateError)
227239
defupdate(self,id=None,new_data={},**kwargs):
228240
"""Update an object on the server.
@@ -265,8 +277,8 @@ def update(self, id=None, new_data={}, **kwargs):
265277
else:
266278
new_data[attr_name]=type_obj.get_for_api()
267279

268-
returnself.gitlab.http_put(path,post_data=new_data,files=files,
269-
**kwargs)
280+
http_method=self._get_update_method()
281+
returnhttp_method(path,post_data=new_data,files=files,**kwargs)
270282

271283

272284
classSetMixin(object):

‎gitlab/v4/objects.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2631,6 +2631,42 @@ class ProjectAccessRequestManager(ListMixin, CreateMixin, DeleteMixin,
26312631
_from_parent_attrs= {'project_id':'id'}
26322632

26332633

2634+
classProjectApproval(SaveMixin,RESTObject):
2635+
_id_attr=None
2636+
2637+
2638+
classProjectApprovalManager(GetWithoutIdMixin,UpdateMixin,RESTManager):
2639+
_path='/projects/%(project_id)s/approvals'
2640+
_obj_cls=ProjectApproval
2641+
_from_parent_attrs= {'project_id':'id'}
2642+
_update_attrs= (tuple(),
2643+
('approvals_before_merge','reset_approvals_on_push',
2644+
'disable_overriding_approvers_per_merge_request'))
2645+
_update_uses_post=True
2646+
2647+
@exc.on_http_error(exc.GitlabUpdateError)
2648+
defset_approvers(self,approver_ids=[],approver_group_ids=[],
2649+
**kwargs):
2650+
"""Change project-level allowed approvers and approver groups.
2651+
2652+
Args:
2653+
approver_ids (list): User IDs that can approve MRs.
2654+
approver_group_ids (list): Group IDs whose members can approve MRs.
2655+
2656+
Raises:
2657+
GitlabAuthenticationError: If authentication is not correct
2658+
GitlabUpdateError: If the server failed to perform the request
2659+
"""
2660+
2661+
path='/projects/%s/approvers'%self._parent.get_id()
2662+
data= {'approver_ids':approver_ids,
2663+
'approver_group_ids':approver_group_ids}
2664+
try:
2665+
self.gitlab.http_put(path,post_data=data,**kwargs)
2666+
exceptexc.GitlabHttpErrorase:
2667+
raiseexc.GitlabUpdateError(e.response_code,e.error_message)
2668+
2669+
26342670
classProjectDeployment(RESTObject):
26352671
pass
26362672

@@ -2729,6 +2765,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
27292765
_short_print_attr='path'
27302766
_managers= (
27312767
('accessrequests','ProjectAccessRequestManager'),
2768+
('approvals','ProjectApprovalManager'),
27322769
('badges','ProjectBadgeManager'),
27332770
('boards','ProjectBoardManager'),
27342771
('branches','ProjectBranchManager'),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp