summaryrefslogtreecommitdiff
path: root/gitlab/objects.py
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2016-08-27 23:01:29 +0200
committerGauvain Pocentek <gauvain@pocentek.net>2016-08-27 23:01:29 +0200
commit40db4cdd24cf31fd6a192b229c132fe28e682eb8 (patch)
treecf2b523bdfbf0524b538f39faa7244a77a90fc54 /gitlab/objects.py
parent8257400fd78e0fdc26fdcb207dbc6e923332e209 (diff)
downloadgitlab-40db4cdd24cf31fd6a192b229c132fe28e682eb8.tar.gz
Add support for access requests
Diffstat (limited to 'gitlab/objects.py')
-rw-r--r--gitlab/objects.py67
1 files changed, 64 insertions, 3 deletions
diff --git a/gitlab/objects.py b/gitlab/objects.py
index a3f5277..bf46f87 100644
--- a/gitlab/objects.py
+++ b/gitlab/objects.py
@@ -768,6 +768,34 @@ class GroupProjectManager(BaseManager):
obj_cls = GroupProject
+class GroupAccessRequest(GitlabObject):
+ _url = '/groups/%(group_id)s/access_requests'
+ canGet = 'from_list'
+ canUpdate = False
+
+ def approve(self, access_level=gitlab.DEVELOPER_ACCESS, **kwargs):
+ """Approve an access request.
+
+ Attrs:
+ access_level (int): The access level for the user.
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabUpdateError: If the server fails to perform the request.
+ """
+
+ url = ('/groups/%(group_id)s/access_requests/%(id)s/approve' %
+ {'group_id': self.group_id, 'id': self.id})
+ data = {'access_level': access_level}
+ r = self.gitlab._raw_put(url, data=data, **kwargs)
+ raise_error_from_response(r, GitlabUpdateError, 201)
+ self._set_from_dict(r.json())
+
+
+class GroupAccessRequestManager(BaseManager):
+ obj_cls = GroupAccessRequest
+
+
class Group(GitlabObject):
_url = '/groups'
_constructorTypes = {'projects': 'Project'}
@@ -775,9 +803,12 @@ class Group(GitlabObject):
optionalCreateAttrs = ['description', 'visibility_level']
optionalUpdateAttrs = ['name', 'path', 'description', 'visibility_level']
shortPrintAttr = 'name'
- managers = [('members', GroupMemberManager, [('group_id', 'id')]),
- ('projects', GroupProjectManager, [('group_id', 'id')]),
- ('issues', GroupIssueManager, [('group_id', 'id')])]
+ managers = [
+ ('accessrequests', GroupAccessRequestManager, [('group_id', 'id')]),
+ ('members', GroupMemberManager, [('group_id', 'id')]),
+ ('projects', GroupProjectManager, [('group_id', 'id')]),
+ ('issues', GroupIssueManager, [('group_id', 'id')])
+ ]
GUEST_ACCESS = gitlab.GUEST_ACCESS
REPORTER_ACCESS = gitlab.REPORTER_ACCESS
@@ -1803,6 +1834,34 @@ class ProjectServiceManager(BaseManager):
return json.dumps(ProjectService._service_attrs.keys())
+class ProjectAccessRequest(GitlabObject):
+ _url = '/projects/%(project_id)s/access_requests'
+ canGet = 'from_list'
+ canUpdate = False
+
+ def approve(self, access_level=gitlab.DEVELOPER_ACCESS, **kwargs):
+ """Approve an access request.
+
+ Attrs:
+ access_level (int): The access level for the user.
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabUpdateError: If the server fails to perform the request.
+ """
+
+ url = ('/projects/%(project_id)s/access_requests/%(id)s/approve' %
+ {'project_id': self.project_id, 'id': self.id})
+ data = {'access_level': access_level}
+ r = self.gitlab._raw_put(url, data=data, **kwargs)
+ raise_error_from_response(r, GitlabUpdateError, 201)
+ self._set_from_dict(r.json())
+
+
+class ProjectAccessRequestManager(BaseManager):
+ obj_cls = ProjectAccessRequest
+
+
class Project(GitlabObject):
_url = '/projects'
_constructorTypes = {'owner': 'User', 'namespace': 'Group'}
@@ -1822,6 +1881,8 @@ class Project(GitlabObject):
'public_builds']
shortPrintAttr = 'path'
managers = [
+ ('accessrequests', ProjectAccessRequestManager,
+ [('project_id', 'id')]),
('branches', ProjectBranchManager, [('project_id', 'id')]),
('builds', ProjectBuildManager, [('project_id', 'id')]),
('commits', ProjectCommitManager, [('project_id', 'id')]),