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

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
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy