8000 feat(group): add support for group level MR approval rules · python-gitlab/python-gitlab@304bdd0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 304bdd0

Browse files
amimasnejch
authored andcommitted
feat(group): add support for group level MR approval rules
1 parent cfa6358 commit 304bdd0

File tree

4 files changed

+354
-16
lines changed

4 files changed

+354
-16
lines changed

docs/gl_objects/merge_request_approvals.rst

Lines changed: 77 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,47 @@
22
Merge request approvals settings
33
################################
44

5-
Merge request approvals can be defined at the project level or at the merge
6-
request level.
5+
Merge request approvals can be defined at the group level, or the project level or at the merge request level.
6+
7+
Group approval rules
8+
====================
9+
10+
References
11+
----------
12+
13+
* v4 API:
14+
15+
+ :class:`gitlab.v4.objects.GroupApprovalRule`
16+
+ :class:`gitlab.v4.objects.GroupApprovalRuleManager`
17+
18+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
19+
20+
Examples
21+
--------
22+
23+
List group-level MR approval rules::
24+
25+
group_approval_rules = group.approval_rules.list()
26+
27+
Change group-level MR approval rule::
28+
29+
g_approval_rule = group.approval_rules.get(123)
30+
g_approval_rule.user_ids = [234]
31+
g_approval_rule.save()
32+
33+
Create new group-level MR approval rule::
34+
35+
group.approval_rules.create({
36+
"name": "my new approval rule",
37+
"approvals_required": 2,
38+
"rule_type": "regular",
39+
"user_ids": [105],
40+
"group_ids": [653, 654],
41+
})
42+
43+
44+
Project approval rules
45+
======================
746

847
References
948
----------
@@ -15,15 +54,6 @@ References
1554
+ :class:`gitlab.v4.objects.ProjectApprovalRule`
1655
+ :class:`gitlab.v4.objects.ProjectApprovalRuleManager`
1756
+ :attr:`gitlab.v4.objects.Project.approvals`
18-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApproval`
19-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
20-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
21-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
22-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
23-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
24-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
25-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
26-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
2757

2858
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
2959

@@ -43,7 +73,41 @@ Delete project-level MR approval rule::
4373

4474
p_approvalrule.delete()
4575

46-
Get project-level or MR-level MR approvals settings::
76+
Get project-level MR approvals settings::
77+
78+
p_mras = project.approvals.get()
79+
80+
Change project-level MR approvals settings::
81+
82+
p_mras.approvals_before_merge = 2
83+
p_mras.save()
84+
85+
86+
Merge request approval rules
87+
============================
88+
89+
References
90+
----------
91+
92+
* v4 API:
93+
94+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApproval`
95+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
96+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
97+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
98+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
99+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
100+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
101+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
102+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
103+
104+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
105+
106+
Examples
107+
--------
108+
109+
110+
Get MR-level MR approvals settings::
47111

48112
p_mras = project.approvals.get()
49113

@@ -53,10 +117,7 @@ Get MR-level approval state::
53117

54118
mr_approval_state = mr.approval_state.get()
55119

56-
Change project-level or MR-level MR approvals settings::
57-
58-
p_mras.approvals_before_merge = 2
59-
p_mras.save()
120+
Change MR-level MR approvals settings::
60121

61122
mr.approvals.set_approvers(approvals_required=1)
62123
# or

gitlab/v4/objects/groups.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
GroupMemberAllManager,
4040
GroupMemberManager,
4141
)
42+
from .merge_request_approvals import GroupApprovalRuleManager
4243
from .merge_requests import GroupMergeRequestManager # noqa: F401
4344
from .milestones import GroupMilestoneManager # noqa: F401
4445
from .notification_settings import GroupNotificationSettingsManager # noqa: F401
@@ -70,6 +71,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
7071

7172
access_tokens: GroupAccessTokenManager
7273
accessrequests: GroupAccessRequestManager
74+
approval_rules: GroupApprovalRuleManager
7375
audit_events: GroupAuditEventManager
7476
badges: GroupBadgeManager
7577
billable_members: GroupBillableMemberManager

gitlab/v4/objects/merge_request_approvals.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
from gitlab.types import RequiredOptional
1717

1818
__all__ = [
19+
"GroupApprovalRule",
20+
"GroupApprovalRuleManager",
1921
"ProjectApproval",
2022
"ProjectApprovalManager",
2123
"ProjectApprovalRule",
@@ -29,6 +31,26 @@
2931
]
3032

3133

34+
class GroupApprovalRule(SaveMixin, RESTObject):
35+
_id_attr = "id"
36+
_repr_attr = "name"
37+
38+
39+
class GroupApprovalRuleManager(RetrieveMixin, CreateMixin, UpdateMixin, RESTManager):
40+
_path = "/groups/{group_id}/approval_rules"
41+
_obj_cls = GroupApprovalRule
42+
_from_parent_attrs = {"group_id": "id"}
43+
_create_attrs = RequiredOptional(
44+
required=("name", "approvals_required"),
45+
optional=("user_ids", "group_ids", "rule_type"),
46+
)
47+
48+
def get(
49+
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
50+
) -> GroupApprovalRule:
51+
return cast(GroupApprovalRule, super().get(id=id, lazy=lazy, **kwargs))
52+
53+
3254
class ProjectApproval(SaveMixin, RESTObject):
3355
_id_attr = None
3456

0 commit comments

Comments
 (0)
0