diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2016-08-27 23:01:29 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2016-08-27 23:01:29 +0200 |
commit | 40db4cdd24cf31fd6a192b229c132fe28e682eb8 (patch) | |
tree | cf2b523bdfbf0524b538f39faa7244a77a90fc54 /gitlab | |
parent | 8257400fd78e0fdc26fdcb207dbc6e923332e209 (diff) | |
download | gitlab-40db4cdd24cf31fd6a192b229c132fe28e682eb8.tar.gz |
Add support for access requests
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/__init__.py | 6 | ||||
-rw-r--r-- | gitlab/objects.py | 67 |
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')]), |