@@ -768,16 +768,47 @@ class GroupProjectManager(BaseManager):
768768 obj_cls = GroupProject
769769
770770
771+ class GroupAccessRequest (GitlabObject ):
772+ _url = '/groups/%(group_id)s/access_requests'
773+ canGet = 'from_list'
774+ canUpdate = False
775+
776+ def approve (self , access_level = gitlab .DEVELOPER_ACCESS , ** kwargs ):
777+ """Approve an access request.
778+
779+ Attrs:
780+ access_level (int): The access level for the user.
781+
782+ Raises:
783+ GitlabConnectionError: If the server cannot be reached.
784+ GitlabUpdateError: If the server fails to perform the request.
785+ """
786+
787+ url = ('/groups/%(group_id)s/access_requests/%(id)s/approve' %
788+ {'group_id' : self .group_id , 'id' : self .id })
789+ data = {'access_level' : access_level }
790+ r = self .gitlab ._raw_put (url , data = data , ** kwargs )
791+ raise_error_from_response (r , GitlabUpdateError , 201 )
792+ self ._set_from_dict (r .json ())
793+
794+
795+ class GroupAccessRequestManager (BaseManager ):
796+ obj_cls = GroupAccessRequest
797+
798+
771799class Group (GitlabObject ):
772800 _url = '/groups'
773801 _constructorTypes = {'projects' : 'Project' }
774802 requiredCreateAttrs = ['name' , 'path' ]
775803 optionalCreateAttrs = ['description' , 'visibility_level' ]
776804 optionalUpdateAttrs = ['name' , 'path' , 'description' , 'visibility_level' ]
777805 shortPrintAttr = 'name'
778- managers = [('members' , GroupMemberManager , [('group_id' , 'id' )]),
779- ('projects' , GroupProjectManager , [('group_id' , 'id' )]),
780- ('issues' , GroupIssueManager , [('group_id' , 'id' )])]
806+ managers = [
807+ ('accessrequests' , GroupAccessRequestManager , [('group_id' , 'id' )]),
808+ ('members' , GroupMemberManager , [('group_id' , 'id' )]),
809+ ('projects' , GroupProjectManager , [('group_id' , 'id' )]),
810+ ('issues' , GroupIssueManager , [('group_id' , 'id' )])
811+ ]
781812
782813 GUEST_ACCESS = gitlab .GUEST_ACCESS
783814 REPORTER_ACCESS = gitlab .REPORTER_ACCESS
@@ -1803,6 +1834,34 @@ def available(self, **kwargs):
18031834 return json .dumps (ProjectService ._service_attrs .keys ())
18041835
18051836
1837+ class ProjectAccessRequest (GitlabObject ):
1838+ _url = '/projects/%(project_id)s/access_requests'
1839+ canGet = 'from_list'
1840+ canUpdate = False
1841+
1842+ def approve (self , access_level = gitlab .DEVELOPER_ACCESS , ** kwargs ):
1843+ """Approve an access request.
1844+
1845+ Attrs:
1846+ access_level (int): The access level for the user.
1847+
1848+ Raises:
1849+ GitlabConnectionError: If the server cannot be reached.
1850+ GitlabUpdateError: If the server fails to perform the request.
1851+ """
1852+
1853+ url = ('/projects/%(project_id)s/access_requests/%(id)s/approve' %
1854+ {'project_id' : self .project_id , 'id' : self .id })
1855+ data = {'access_level' : access_level }
1856+ r = self .gitlab ._raw_put (url , data = data , ** kwargs )
1857+ raise_error_from_response (r , GitlabUpdateError , 201 )
1858+ self ._set_from_dict (r .json ())
1859+
1860+
1861+ class ProjectAccessRequestManager (BaseManager ):
1862+ obj_cls = ProjectAccessRequest
1863+
1864+
18061865class Project (GitlabObject ):
18071866 _url = '/projects'
18081867 _constructorTypes = {'owner' : 'User' , 'namespace' : 'Group' }
@@ -1822,6 +1881,8 @@ class Project(GitlabObject):
18221881 'public_builds' ]
18231882 shortPrintAttr = 'path'
18241883 managers = [
1884+ ('accessrequests' , ProjectAccessRequestManager ,
1885+ [('project_id' , 'id' )]),
18251886 ('branches' , ProjectBranchManager , [('project_id' , 'id' )]),
18261887 ('builds' , ProjectBuildManager , [('project_id' , 'id' )]),
18271888 ('commits' , ProjectCommitManager , [('project_id' , 'id' )]),
0 commit comments