From e512cddd30f3047230e8eedb79d98dc06e93a77b Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 29 Jan 2020 19:26:52 +0200 Subject: [PATCH 1/4] fix(objects): update to new gitlab api for path, and args Updated the gitlab path for set_approvers to approvers_rules, added default arg for rule type, and added arg for # of approvals required. --- gitlab/v4/objects.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 1750a3641..8dca355aa 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -2685,10 +2685,11 @@ class ProjectMergeRequestApprovalManager(GetWithoutIdMixin, UpdateMixin, RESTMan _update_uses_post = True @exc.on_http_error(exc.GitlabUpdateError) - def set_approvers(self, approver_ids=None, approver_group_ids=None, **kwargs): + def set_approvers(self, approvals_required, approver_ids=None, approver_group_ids=None, **kwargs): """Change MR-level allowed approvers and approver groups. Args: + approvals_required (integer): The number of required approvals for this rule approver_ids (list): User IDs that can approve MRs approver_group_ids (list): Group IDs whose members can approve MRs @@ -2699,8 +2700,12 @@ def set_approvers(self, approver_ids=None, approver_group_ids=None, **kwargs): approver_ids = approver_ids or [] approver_group_ids = approver_group_ids or [] - path = "%s/%s/approvers" % (self._parent.manager.path, self._parent.get_id()) - data = {"approver_ids": approver_ids, "approver_group_ids": approver_group_ids} + path = "%s/%s/approval_rules" % (self._parent.manager.path, self._parent.get_id()) + data = { + "approvals_required": approvals_required, + "rule_type": "regular", + "user_ids": approver_ids, + "group_ids": approver_group_ids} self.gitlab.http_put(path, post_data=data, **kwargs) From 2cf12c7973e139c4932da1f31c33bb7658b132f7 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 30 Jan 2020 18:41:21 +0200 Subject: [PATCH 2/4] fix(docs and tests): update docs and tests for set_approvers Updated the docs with the new set_approvers arguments, and updated tests with the arg as well. --- docs/gl_objects/mr_approvals.rst | 2 +- tools/ee-test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/gl_objects/mr_approvals.rst b/docs/gl_objects/mr_approvals.rst index b5de88c28..9d38db040 100644 --- a/docs/gl_objects/mr_approvals.rst +++ b/docs/gl_objects/mr_approvals.rst @@ -56,5 +56,5 @@ Change project-level or MR-level MR allowed approvers:: project.approvals.set_approvers(approver_ids=[105], approver_group_ids=[653, 654]) - mr.approvals.set_approvers(approver_ids=[105], + mr.approvals.set_approvers(approvals_required = 1, approver_ids=[105], approver_group_ids=[653, 654]) diff --git a/tools/ee-test.py b/tools/ee-test.py index 82adf5cc1..af1295788 100755 --- a/tools/ee-test.py +++ b/tools/ee-test.py @@ -37,7 +37,7 @@ def end_log(): approval.save() approval = project1.approvals.get() assert v != approval.reset_approvals_on_push -project1.approvals.set_approvers([1], []) +project1.approvals.set_approvers(1, [1], []) approval = project1.approvals.get() assert approval.approvers[0]["user"]["id"] == 1 @@ -50,7 +50,7 @@ def end_log(): approval.save() approval = mr.approvals.get() assert approval.approvals_required == 3 -mr.approvals.set_approvers([1], []) +mr.approvals.set_approvers(1, [1], []) approval = mr.approvals.get() assert approval.approvers[0]["user"]["id"] == 1 From 65ecadcfc724a7086e5f84dbf1ecc9f7a02e5ed8 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 30 Jan 2020 18:52:12 +0200 Subject: [PATCH 3/4] fix(objects): update set_approvers function call Added a miss paramter update to the set_approvers function --- gitlab/v4/objects.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 8dca355aa..6b60583fa 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -2685,7 +2685,9 @@ class ProjectMergeRequestApprovalManager(GetWithoutIdMixin, UpdateMixin, RESTMan _update_uses_post = True @exc.on_http_error(exc.GitlabUpdateError) - def set_approvers(self, approvals_required, approver_ids=None, approver_group_ids=None, **kwargs): + def set_approvers( + self, approvals_required, approver_ids=None, approver_group_ids=None, **kwargs + ): """Change MR-level allowed approvers and approver groups. Args: @@ -2700,12 +2702,16 @@ def set_approvers(self, approvals_required, approver_ids=None, approver_group_id approver_ids = approver_ids or [] approver_group_ids = approver_group_ids or [] - path = "%s/%s/approval_rules" % (self._parent.manager.path, self._parent.get_id()) + path = "%s/%s/approval_rules" % ( + self._parent.manager.path, + self._parent.get_id(), + ) data = { - "approvals_required": approvals_required, - "rule_type": "regular", - "user_ids": approver_ids, - "group_ids": approver_group_ids} + "approvals_required": approvals_required, + "rule_type": "regular", + "user_ids": approver_ids, + "group_ids": approver_group_ids, + } self.gitlab.http_put(path, post_data=data, **kwargs) From 8e0c52620af47a9e2247eeb7dcc7a2e677822ff4 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 30 Jan 2020 20:56:33 +0200 Subject: [PATCH 4/4] fix(docs): update to new set approvers call for # of approvers to set the # of approvers for an MR you need to use the same function as for setting the approvers id. --- docs/gl_objects/mr_approvals.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/gl_objects/mr_approvals.rst b/docs/gl_objects/mr_approvals.rst index 9d38db040..253b68db3 100644 --- a/docs/gl_objects/mr_approvals.rst +++ b/docs/gl_objects/mr_approvals.rst @@ -48,8 +48,7 @@ Change project-level or MR-level MR approvals settings:: p_mras.approvals_before_merge = 2 p_mras.save() - mr_mras.approvals_before_merge = 2 - mr_mras.save() + mr_mras.set_approvers(approvals_required = 1) Change project-level or MR-level MR allowed approvers::