summaryrefslogtreecommitdiff
path: root/gitlab
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
parent8257400fd78e0fdc26fdcb207dbc6e923332e209 (diff)
downloadgitlab-40db4cdd24cf31fd6a192b229c132fe28e682eb8.tar.gz
Add support for access requests
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/__init__.py6
-rw-r--r--gitlab/objects.py67
2 files changed, 70 insertions, 3 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 82f4918..14e4a5b 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -70,6 +70,8 @@ class Gitlab(object):
user_keys (UserKeyManager): Manager for GitLab users' SSH keys.
users (UserManager): Manager for GitLab users
keys (DeployKeyManager): Manager for deploy keys
+ group_accessrequests (GroupAccessRequestManager): Manager for GitLab
+ groups access requests
group_issues (GroupIssueManager): Manager for GitLab group issues
group_projects (GroupProjectManager): Manager for GitLab group projects
group_members (GroupMemberManager): Manager for GitLab group members
@@ -78,6 +80,8 @@ class Gitlab(object):
issues (IssueManager): Manager for GitLab issues
licenses (LicenseManager): Manager for licenses
namespaces (NamespaceManager): Manager for namespaces
+ project_accessrequests (ProjectAccessRequestManager): Manager for
+ GitLab projects access requests
project_branches (ProjectBranchManager): Manager for GitLab projects
branches
project_builds (ProjectBuildManager): Manager for GitLab projects
@@ -159,6 +163,7 @@ class Gitlab(object):
self.user_keys = UserKeyManager(self)
self.users = UserManager(self)
self.keys = KeyManager(self)
+ self.group_accessrequests = GroupAccessRequestManager(self)
self.group_issues = GroupIssueManager(self)
self.group_projects = GroupProjectManager(self)
self.group_members = GroupMemberManager(self)
@@ -167,6 +172,7 @@ class Gitlab(object):
self.issues = IssueManager(self)
self.licenses = LicenseManager(self)
self.namespaces = NamespaceManager(self)
+ self.project_accessrequests = ProjectAccessRequestManager(self)
self.project_branches = ProjectBranchManager(self)
self.project_builds = ProjectBuildManager(self)
self.project_commits = ProjectCommitManager(self)
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')]),