@@ -768,16 +768,47 @@ class GroupProjectManager(BaseManager):
768
768
obj_cls = GroupProject
769
769
770
770
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
+
771
799
class Group (GitlabObject ):
772
800
_url = '/groups'
773
801
_constructorTypes = {'projects' : 'Project' }
774
802
requiredCreateAttrs = ['name' , 'path' ]
775
803
optionalCreateAttrs = ['description' , 'visibility_level' ]
776
804
optionalUpdateAttrs = ['name' , 'path' , 'description' , 'visibility_level' ]
777
805
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
+ ]
781
812
782
813
GUEST_ACCESS = gitlab .GUEST_ACCESS
783
814
REPORTER_ACCESS = gitlab .REPORTER_ACCESS
@@ -1803,6 +1834,34 @@ def available(self, **kwargs):
1803
1834
return json .dumps (ProjectService ._service_attrs .keys ())
1804
1835
1805
1836
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
+
1806
1865
class Project (GitlabObject ):
1807
1866
_url = '/projects'
1808
1867
_constructorTypes = {'owner' : 'User' , 'namespace' : 'Group' }
@@ -1822,6 +1881,8 @@ class Project(GitlabObject):
1822
1881
'public_builds' ]
1823
1882
shortPrintAttr = 'path'
1824
1883
managers = [
1884
+ ('accessrequests' , ProjectAccessRequestManager ,
1885
+ [('project_id' , 'id' )]),
1825
1886
('branches' , ProjectBranchManager , [('project_id' , 'id' )]),
1826
1887
('builds' , ProjectBuildManager , [('project_id' , 'id' )]),
1827
1888
('commits' , ProjectCommitManager , [('project_id' , 'id' )]),
0 commit comments