8000 feat: adds member role methods · rickbrouwer/python-gitlab@055557e · GitHub
[go: up one dir, main page]

Skip to content
< 8000 header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark>

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 055557e

Browse files
SachinKSingh28nejch
authored andcommitted
feat: adds member role methods
1 parent 6eee494 commit 055557e

File tree

8 files changed

+406
-0
lines changed

8 files changed

+406
-0
lines changed

docs/api-objects.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ API examples
3636
gl_objects/boards
3737
gl_objects/labels
3838
gl_objects/notifications
39+
gl_objects/member_roles.rst
3940
gl_objects/merge_trains
4041
gl_objects/merge_requests
4142
gl_objects/merge_request_approvals.rst

docs/gl_objects/member_roles.rst

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
############
2+
Member Roles
3+
############
4+
5+
You can configure member roles at the instance-level (admin only), or
6+
at group level.
7+
8+
Instance-level member roles
9+
===========================
10+
11+
This endpoint requires admin access.
12+
13+
Reference
14+
---------
15+
16+
* v4 API
17+
18+
+ :class:`gitlab.v4.objects.MemberRole`
19+
+ :class:`gitlab.v4.objects.MemberRoleManager`
20+
+ :attr:`gitlab.Gitlab.member_roles`
21+
22+
* GitLab API
23+
24+
+ https://docs.gitlab.com/ee/api/member_roles.html#manage-instance-member-roles
25+
26+
Examples
27+
--------
28+
29+
List member roles::
30+
31+
variables = gl.member_roles.list()
32+
33+
Create a member role::
34+
35+
variable = gl.member_roles.create({'name': 'Custom Role', 'base_access_level': value})
36+
37+
Remove a member role::
38+
39+
gl.member_roles.delete(member_role_id)
40+
41+
Group member role
42+
=================
43+
44+
Reference
45+
---------
46+
47+
* v4 API
48+
49+
+ :class:`gitlab.v4.objects.GroupMemberRole`
50+
+ :class:`gitlab.v4.objects.GroupMemberRoleManager`
51+
+ :attr:`gitlab.v4.objects.Group.member_roles`
52+
53+
* GitLab API
54+
55+
+ https://docs.gitlab.com/ee/api/member_roles.html#manage-group-member-roles
56+
57+
Examples
58+
--------
59+
60+
List member roles::
61+
62+
member_roles = group.member_roles.list()
63+
64+
Create a member role::
65+
66+
member_roles = group.member_roles.create({'name': 'Custom Role', 'base_access_level': value})
67+
68+
Remove a member role::
69+
70+
gl.member_roles.delete(member_role_id)
71+

gitlab/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ def __init__(
166166
"""See :class:`~gitlab.v4.objects.LicenseManager`"""
167167
self.namespaces = objects.NamespaceManager(self)
168168
"""See :class:`~gitlab.v4.objects.NamespaceManager`"""
169+
self.member_roles = objects.MemberRoleManager(self)
170+
"""See :class:`~gitlab.v4.objects.MergeRequestManager`"""
169171
self.mergerequests = objects.MergeRequestManager(self)
170172
"""See :class:`~gitlab.v4.objects.MergeRequestManager`"""
171173
self.notificationsettings = objects.NotificationSettingsManager(self)

gitlab/v4/objects/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from .keys import *
4040
from .labels import *
4141
from .ldap import *
42+
from .member_roles import *
4243
from .members import *
4344
from .merge_request_approvals import *
4445
from .merge_requests import *

gitlab/v4/objects/groups.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from .issues import GroupIssueManager # noqa: F401
3737
from .iterations import GroupIterationManager # noqa: F401
3838
from .labels import GroupLabelManager # noqa: F401
39+
from .member_roles import GroupMemberRoleManager # noqa: F401
3940
from .members import ( # noqa: F401
4041
GroupBillableMemberManager,
4142
GroupMemberAllManager,
@@ -92,6 +93,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
9293
iterations: GroupIterationManager
9394
labels: GroupLabelManager
9495
ldap_group_links: GroupLDAPGroupLinkManager
96+
member_roles: GroupMemberRoleManager
9597
members: GroupMemberManager
9698
members_all: GroupMemberAllManager
9799
mergerequests: GroupMergeRequestManager

gitlab/v4/objects/member_roles.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
"""
2+
GitLab API:
3+
https://docs.gitlab.com/ee/api/instance_level_ci_variables.html
4+
https://docs.gitlab.com/ee/api/project_level_variables.html
5+
https://docs.gitlab.com/ee/api/group_level_variables.html
6+
"""
7+
8+
from gitlab.base import RESTObject
9+
from gitlab.mixins import (
10+
CreateMixin,
11+
DeleteMixin,
12+
ListMixin,
13+
ObjectDeleteMixin,
14+
SaveMixin,
15+
)
16+
from gitlab.types import RequiredOptional
17+
18+
__all__ = [
19+
"MemberRole",
20+
"MemberRoleManager",
21+
"GroupMemberRole",
22+
"GroupMemberRoleManager",
23+
]
24+
25+
26+
class MemberRole(SaveMixin, ObjectDeleteMixin, RESTObject):
27+
pass
28+
29+
30+
class MemberRoleManager(
31+
ListMixin[MemberRole], CreateMixin[MemberRole], DeleteMixin[MemberRole]
32+
):
33+
_path = "/member_roles"
34+
_obj_cls = MemberRole
35+
_create_attrs = RequiredOptional(
36+
required=("name", "base_access_level"),
37+
optional=(
38+
"description",
39+
"admin_cicd_variables",
40+
"admin_compliance_framework",
41+
"admin_group_member",
42+
"admin_group_member",
43+
"admin_merge_request",
44+
"admin_push_rules",
45+
"admin_terraform_state",
46+
"admin_vulnerability",
47+
"admin_web_hook",
48+
"archive_project",
49+
"manage_deploy_tokens",
50+
"manage_group_access_tokens",
51+
"manage_merge_request_settings",
52+
"manage_project_access_tokens",
53+
"manage_security_policy_link",
54+
"read_code",
55+
"read_runners",
56+
"read_dependency",
57+
"read_vulnerability",
58+
"remove_group",
59+
"remove_project",
60+
),
61+
)
62+
63+
64+
class GroupMemberRole(SaveMixin, ObjectDeleteMixin, RESTObject):
65+
pass
66+
67+
68+
class GroupMemberRoleManager(
69+
ListMixin[GroupMemberRole],
70+
CreateMixin[GroupMemberRole],
71+
DeleteMixin[GroupMemberRole],
72+
):
73+
_path = "/groups/{group_id}/member_roles"
74+
_from_parent_attrs = {"group_id": "id"}
75+
_obj_cls = GroupMemberRole
76+
_create_attrs = RequiredOptional(
77+
required=("name", "base_access_level"),
78+
optional=(
79+
"description",
80+
"admin_cicd_variables",
81+
"admin_compliance_framework",
82+
"admin_group_member",
83+
"admin_group_member",
84+
"admin_merge_request",
85+
"admin_push_rules",
86+
"admin_terraform_state",
87+
"admin_vulnerability",
88+
"admin_web_hook",
89+
"archive_project",
90+
"manage_deploy_tokens",
91+
"manage_group_access_tokens",
92+
"manage_merge_request_settings",
93+
"manage_project_access_tokens",
94+
"manage_security_policy_link",
95+
"read_code",
96+
"read_runners",
97+
"read_dependency",
98+
"read_vulnerability",
99+
"remove_group",
100+
"remove_project",
101+
),
102+
)
Lines changed: 18 additions & 0 deletions

0 commit comments

Comments
 (0)
0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""
2+
GitLab API:
3+
https://docs.gitlab.com/ee/api/member_roles.html
4+
"""
5+
6+
7+
def test_instance_member_role(gl):
8+
member_role = gl.member_roles.create(
9+
{
10+
"name": "Custom webhook manager role",
11+
"base_access_level": 20,
12+
"description": "Custom reporter that can manage webhooks",
13+
"admin_web_hook": True,
14+
}
15+
)
16+
assert member_role.id > 0
17+
assert member_role in gl.member_roles.list()
18+
gl.member_roles.delete(member_role.id)