Skip to content

Commit 89c18c6

Browse files
feat(api): add support for get for a MR approval rule
In GitLab 14.10 they added support to get a single merge request approval rule [1] Add support for it to ProjectMergeRequestApprovalRuleManager [1] https://docs.gitlab.com/ee/api/merge_request_approvals.html#get-a-single-merge-request-level-rule
1 parent d9ea716 commit 89c18c6

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

docs/gl_objects/merge_request_approvals.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ List MR-level MR approval rules::
7878

7979
mr.approval_rules.list()
8080

81+
Get a single MR approval rule::
82+
83+
approval_rule_id = 123
84+
mr_approvalrule = mr.approval_rules.get(approval_rule_id)
85+
8186
Delete MR-level MR approval rule::
8287

8388
rules = mr.approval_rules.list()

gitlab/v4/objects/merge_request_approvals.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING
1+
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union
22

33
from gitlab import exceptions as exc
44
from gitlab.base import RESTManager, RESTObject
55
from gitlab.mixins import (
66
CreateMixin,
7+
CRUDMixin,
78
DeleteMixin,
89
GetWithoutIdMixin,
910
ListMixin,
@@ -189,9 +190,7 @@ def save(self, **kwargs: Any) -> None:
189190
SaveMixin.save(self, **kwargs)
190191

191192

192-
class ProjectMergeRequestApprovalRuleManager(
193-
ListMixin, UpdateMixin, CreateMixin, DeleteMixin, RESTManager
194-
):
193+
class ProjectMergeRequestApprovalRuleManager(CRUDMixin, RESTManager):
195194
_path = "/projects/{project_id}/merge_requests/{mr_iid}/approval_rules"
196195
_obj_cls = ProjectMergeRequestApprovalRule
197196
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
@@ -214,6 +213,13 @@ class ProjectMergeRequestApprovalRuleManager(
214213
optional=("approval_project_rule_id", "user_ids", "group_ids"),
215214
)
216215

216+
def get(
217+
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
218+
) -> ProjectMergeRequestApprovalRule:
219+
return cast(
220+
ProjectMergeRequestApprovalRule, super().get(id=id, lazy=lazy, **kwargs)
221+
)
222+
217223
def create(
218224
self, data: Optional[Dict[str, Any]] = None, **kwargs: Any
219225
) -> RESTObject:

tests/unit/objects/test_project_merge_request_approvals.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ def resp_mr_approval_rules():
100100
content_type="application/json",
101101
status=200,
102102
)
103+
rsps.add(
104+
method=responses.GET,
105+
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_rules/1",
106+
json=mr_ars_content[0],
107+
content_type="application/json",
108+
status=200,
109+
)
103110
rsps.add(
104111
method=responses.GET,
105112
url="http://localhost/api/v4/projects/1/merge_requests/1/approval_state",
@@ -243,6 +250,17 @@ def test_update_merge_request_approval_rule(project, resp_mr_approval_rules):
243250
assert ar_1.eligible_approvers[0]["id"] == updated_approval_rule_user_ids[0]
244251

245252

253+
def test_get_merge_request_approval_rule(project, resp_mr_approval_rules):
254+
merge_request = project.mergerequests.get(1, lazy=True)
255+
approval_rule = merge_request.approval_rules.get(approval_rule_id)
256+
assert isinstance(
257+
approval_rule,
258+
gitlab.v4.objects.merge_request_approvals.ProjectMergeRequestApprovalRule,
259+
)
260+
assert approval_rule.name == approval_rule_name
261+
assert approval_rule.id == approval_rule_id
262+
263+
246264
def test_get_merge_request_approval_state(project, resp_mr_approval_rules):
247265
merge_request = project.mergerequests.get(1, lazy=True)
248266
approval_state = merge_request.approval_state.get()

0 commit comments

Comments
 (0)