summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/gl_objects/groups.rst5
-rw-r--r--docs/gl_objects/projects.rst5
-rw-r--r--gitlab/v4/objects.py48
-rw-r--r--tools/python_test_v4.py1
4 files changed, 59 insertions, 0 deletions
diff --git a/docs/gl_objects/groups.rst b/docs/gl_objects/groups.rst
index c100f87..7fcf980 100644
--- a/docs/gl_objects/groups.rst
+++ b/docs/gl_objects/groups.rst
@@ -164,6 +164,11 @@ List group members::
members = group.members.list()
+List the group members recursively (including inherited members through
+ancestor groups)::
+
+ members = group.members.all(all=True)
+
Get a group member::
members = group.members.get(member_id)
diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst
index 5cc223f..dd43294 100644
--- a/docs/gl_objects/projects.rst
+++ b/docs/gl_objects/projects.rst
@@ -478,6 +478,11 @@ List the project members::
members = project.members.list()
+List the project members recursively (including inherited members through
+ancestor groups)::
+
+ members = project.members.all(all=True)
+
Search project members matching a query string::
members = project.members.list(query='bar')
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 281301e..3f01955 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -705,6 +705,30 @@ class GroupMemberManager(CRUDMixin, RESTManager):
_create_attrs = (('access_level', 'user_id'), ('expires_at', ))
_update_attrs = (('access_level', ), ('expires_at', ))
+ @cli.register_custom_action('GroupMemberManager')
+ @exc.on_http_error(exc.GitlabListError)
+ def all(self, **kwargs):
+ """List all the members, included inherited ones.
+
+ Args:
+ all (bool): If True, return all the items, without pagination
+ per_page (int): Number of items to retrieve per request
+ page (int): ID of the page to return (starts with page 1)
+ as_list (bool): If set to False and no pagination option is
+ defined, return a generator instead of a list
+ **kwargs: Extra options to send to the server (e.g. sudo)
+
+ Raises:
+ GitlabAuthenticationError: If authentication is not correct
+ GitlabListError: If the list could not be retrieved
+
+ Returns:
+ RESTObjectList: The list of members
+ """
+
+ path = '%s/all' % self.path
+ return self.gitlab.http_list(path, **kwargs)
+
class GroupMergeRequest(RESTObject):
pass
@@ -1884,6 +1908,30 @@ class ProjectMemberManager(CRUDMixin, RESTManager):
_create_attrs = (('access_level', 'user_id'), ('expires_at', ))
_update_attrs = (('access_level', ), ('expires_at', ))
+ @cli.register_custom_action('ProjectMemberManager')
+ @exc.on_http_error(exc.GitlabListError)
+ def all(self, **kwargs):
+ """List all the members, included inherited ones.
+
+ Args:
+ all (bool): If True, return all the items, without pagination
+ per_page (int): Number of items to retrieve per request
+ page (int): ID of the page to return (starts with page 1)
+ as_list (bool): If set to False and no pagination option is
+ defined, return a generator instead of a list
+ **kwargs: Extra options to send to the server (e.g. sudo)
+
+ Raises:
+ GitlabAuthenticationError: If authentication is not correct
+ GitlabListError: If the list could not be retrieved
+
+ Returns:
+ RESTObjectList: The list of members
+ """
+
+ path = '%s/all' % self.path
+ return self.gitlab.http_list(path, **kwargs)
+
class ProjectNote(RESTObject):
pass
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index 133aeb3..8ff099b 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -244,6 +244,7 @@ assert(len(group2.members.list()) == 2)
group1.members.delete(user1.id)
assert(len(group1.members.list()) == 2)
+assert(len(group1.members.all()))
member = group1.members.get(user2.id)
member.access_level = gitlab.const.OWNER_ACCESS
member.save()