Skip to content

Commit fddc25a

Browse files
authored
Merge pull request #919 from appian/project-approval-rules
fix(projects): support `approval_rules` endpoint for projects
2 parents 6048175 + 94bac44 commit fddc25a

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

docs/gl_objects/mr_approvals.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ References
1212

1313
+ :class:`gitlab.v4.objects.ProjectApproval`
1414
+ :class:`gitlab.v4.objects.ProjectApprovalManager`
15+
+ :class:`gitlab.v4.objects.ProjectApprovalRule`
16+
+ :class:`gitlab.v4.objects.ProjectApprovalRuleManager`
1517
+ :attr:`gitlab.v4.objects.Project.approvals`
1618
+ :class:`gitlab.v4.objects.ProjectMergeRequestApproval`
1719
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
@@ -22,6 +24,19 @@ References
2224
Examples
2325
--------
2426

27+
List project-level MR approval rules::
28+
29+
p_mras = project.approvalrules.list()
30+
31+
Change project-level MR approval rule::
32+
33+
p_approvalrule.user_ids = [234]
34+
p_approvalrule.save()
35+
36+
Delete project-level MR approval rule::
37+
38+
p_approvalrule.delete()
39+
2540
Get project-level or MR-level MR approvals settings::
2641

2742
p_mras = project.approvals.get()

gitlab/v4/objects.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3777,6 +3777,19 @@ def set_approvers(self, approver_ids=None, approver_group_ids=None, **kwargs):
37773777
self.gitlab.http_put(path, post_data=data, **kwargs)
37783778

37793779

3780+
class ProjectApprovalRule(SaveMixin, ObjectDeleteMixin, RESTObject):
3781+
_id_attr = "id"
3782+
3783+
3784+
class ProjectApprovalRuleManager(
3785+
ListMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTManager
3786+
):
3787+
_path = "/projects/%(project_id)s/approval_rules"
3788+
_obj_cls = ProjectApprovalRule
3789+
_from_parent_attrs = {"project_id": "id"}
3790+
_create_attrs = (("name", "approvals_required"), ("user_ids", "group_ids"))
3791+
3792+
37803793
class ProjectDeployment(RESTObject, SaveMixin):
37813794
pass
37823795

@@ -3888,6 +3901,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
38883901
_managers = (
38893902
("accessrequests", "ProjectAccessRequestManager"),
38903903
("approvals", "ProjectApprovalManager"),
3904+
("approvalrules", "ProjectApprovalRuleManager"),
38913905
("badges", "ProjectBadgeManager"),
38923906
("boards", "ProjectBoardManager"),
38933907
("branches", "ProjectBranchManager"),

tools/ee-test.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ def end_log():
5353
mr.approvals.set_approvers([1], [])
5454
approval = mr.approvals.get()
5555
assert approval.approvers[0]["user"]["id"] == 1
56+
57+
ars = project1.approvalrules.list(all=True)
58+
assert len(ars) == 0
59+
project.approvalrules.create(
60+
{"name": "approval-rule", "approvals_required": 1, "group_ids": [group1.id]}
61+
)
62+
ars = project1.approvalrules.list(all=True)
63+
assert len(ars) == 1
64+
ars[0].approvals_required == 2
65+
ars[0].save()
66+
ars = project1.approvalrules.list(all=True)
67+
assert len(ars) == 1
68+
assert ars[0].approvals_required == 2
69+
ars[0].delete()
70+
ars = project1.approvalrules.list(all=True)
71+
assert len(ars) == 0
5672
end_log()
5773

5874
start_log("geo nodes")

0 commit comments

Comments
 (0)