| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent bbefb99 commit 473dc6f
3 files changed
| Original file line number | Diff line number | Diff 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]) | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -223,6 +223,18 @@ def get_update_attrs(self): | |||
| 223 | 223 | """ | |
| 224 | 224 | return getattr(self, '_update_attrs', (tuple(), tuple())) | |
| 225 | 225 | ||
| 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 | + if getattr(self, '_update_uses_post', False): | ||
| 233 | + http_method = self.gitlab.http_post | ||
| 234 | + else: | ||
| 235 | + http_method = self.gitlab.http_put | ||
| 236 | + return http_method | ||
| 237 | + | ||
| 226 | 238 | @exc.on_http_error(exc.GitlabUpdateError) | |
| 227 | 239 | def update(self, id=None, new_data={}, **kwargs): | |
| 228 | 240 | """Update an object on the server. | |
@@ -265,8 +277,8 @@ def update(self, id=None, new_data={}, **kwargs): | |||
| 265 | 277 | else: | |
| 266 | 278 | new_data[attr_name] = type_obj.get_for_api() | |
| 267 | 279 | ||
| 268 | - return self.gitlab.http_put(path, post_data=new_data, files=files, | ||
| 269 | - **kwargs) | ||
| 280 | + http_method = self._get_update_method() | ||
| 281 | + return http_method(path, post_data=new_data, files=files, **kwargs) | ||
| 270 | 282 | ||
| 271 | 283 | ||
| 272 | 284 | class SetMixin(object): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2631,6 +2631,42 @@ class ProjectAccessRequestManager(ListMixin, CreateMixin, DeleteMixin, | |||
| 2631 | 2631 | _from_parent_attrs = {'project_id': 'id'} | |
| 2632 | 2632 | ||
| 2633 | 2633 | ||
| 2634 | + class ProjectApproval(SaveMixin, RESTObject): | ||
| 2635 | + _id_attr = None | ||
| 2636 | + | ||
| 2637 | + | ||
| 2638 | + class ProjectApprovalManager(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 | + def set_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 | + except exc.GitlabHttpError as e: | ||
| 2667 | + raise exc.GitlabUpdateError(e.response_code, e.error_message) | ||
| 2668 | + | ||
| 2669 | + | ||
| 2634 | 2670 | class ProjectDeployment(RESTObject): | |
| 2635 | 2671 | pass | |
| 2636 | 2672 | ||
@@ -2729,6 +2765,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject): | |||
| 2729 | 2765 | _short_print_attr = 'path' | |
| 2730 | 2766 | _managers = ( | |
| 2731 | 2767 | ('accessrequests', 'ProjectAccessRequestManager'), | |
| 2768 | + ('approvals', 'ProjectApprovalManager'), | ||
| 2732 | 2769 | ('badges', 'ProjectBadgeManager'), | |
| 2733 | 2770 | ('boards', 'ProjectBoardManager'), | |
| 2734 | 2771 | ('branches', 'ProjectBranchManager'), | |
| Back | FazBrowse Home | New Git URL |
0 commit comments