Skip to content

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

+1
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

+71
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

+2
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

+1
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

+2
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

+102
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+
)
+18
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)

0 commit comments

Comments
 (0)