1+ from typing import Any , BinaryIO , cast , Dict , List , Optional , Type , Union
2+
3+ import requests
4+
5+ import gitlab
16from gitlab import cli
27from gitlab import exceptions as exc
38from gitlab import types
@@ -74,7 +79,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
7479
7580 @cli .register_custom_action ("Group" , ("project_id" ,))
7681 @exc .on_http_error (exc .GitlabTransferProjectError )
77- def transfer_project (self , project_id , ** kwargs ) :
82+ def transfer_project (self , project_id : int , ** kwargs : Any ) -> None :
7883 """Transfer a project to this group.
7984
8085 Args:
@@ -90,7 +95,9 @@ def transfer_project(self, project_id, **kwargs):
9095
9196 @cli .register_custom_action ("Group" , ("scope" , "search" ))
9297 @exc .on_http_error (exc .GitlabSearchError )
93- def search (self , scope , search , ** kwargs ):
98+ def search (
99+ self , scope : str , search : str , ** kwargs : Any
100+ ) -> Union [gitlab .GitlabList , List [Dict [str , Any ]]]:
94101 """Search the group resources matching the provided string.'
95102
96103 Args:
@@ -111,7 +118,9 @@ def search(self, scope, search, **kwargs):
111118
112119 @cli .register_custom_action ("Group" , ("cn" , "group_access" , "provider" ))
113120 @exc .on_http_error (exc .GitlabCreateError )
114- def add_ldap_group_link (self , cn , group_access , provider , ** kwargs ):
121+ def add_ldap_group_link (
122+ self , cn : str , group_access : int , provider : str , ** kwargs : Any
123+ ) -> None :
115124 """Add an LDAP group link.
116125
117126 Args:
@@ -131,7 +140,9 @@ def add_ldap_group_link(self, cn, group_access, provider, **kwargs):
131140
132141 @cli .register_custom_action ("Group" , ("cn" ,), ("provider" ,))
133142 @exc .on_http_error (exc .GitlabDeleteError )
134- def delete_ldap_group_link (self , cn , provider = None , ** kwargs ):
143+ def delete_ldap_group_link (
144+ self , cn : str , provider : Optional [str ] = None , ** kwargs : Any
145+ ) -> None :
135146 """Delete an LDAP group link.
136147
137148 Args:
@@ -151,7 +162,7 @@ def delete_ldap_group_link(self, cn, provider=None, **kwargs):
151162
152163 @cli .register_custom_action ("Group" )
153164 @exc .on_http_error (exc .GitlabCreateError )
154- def ldap_sync (self , ** kwargs ) :
165+ def ldap_sync (self , ** kwargs : Any ) -> None :
155166 """Sync LDAP groups.
156167
157168 Args:
@@ -166,7 +177,13 @@ def ldap_sync(self, **kwargs):
166177
167178 @cli .register_custom_action ("Group" , ("group_id" , "group_access" ), ("expires_at" ,))
168179 @exc .on_http_error (exc .GitlabCreateError )
169- def share (self , group_id , group_access , expires_at = None , ** kwargs ):
180+ def share (
181+ self ,
182+ group_id : int ,
183+ group_access : int ,
184+ expires_at : Optional [str ] = None ,
185+ ** kwargs : Any ,
186+ ) -> Union [Dict [str , Any ], requests .Response ]:
170187 """Share the group with a group.
171188
172189 Args:
@@ -184,11 +201,11 @@ def share(self, group_id, group_access, expires_at=None, **kwargs):
184201 "group_access" : group_access ,
185202 "expires_at" : expires_at ,
186203 }
187- self .manager .gitlab .http_post (path , post_data = data , ** kwargs )
204+ return self .manager .gitlab .http_post (path , post_data = data , ** kwargs )
188205
189206 @cli .register_custom_action ("Group" , ("group_id" ,))
190207 @exc .on_http_error (exc .GitlabDeleteError )
191- def unshare (self , group_id , ** kwargs ) :
208+ def unshare (self , group_id : int , ** kwargs : Any ) -> None :
192209 """Delete a shared group link within a group.
193210
194211 Args:
@@ -269,8 +286,18 @@ class GroupManager(CRUDMixin, RESTManager):
269286 )
270287 _types = {"avatar" : types .ImageAttribute , "skip_groups" : types .ListAttribute }
271288
289+ def get (self , id : Union [str , int ], lazy : bool = False , ** kwargs : Any ) -> Group :
290+ return cast (Group , super ().get (id = id , lazy = lazy , ** kwargs ))
291+
272292 @exc .on_http_error (exc .GitlabImportError )
273- def import_group (self , file , path , name , parent_id = None , ** kwargs ):
293+ def import_group (
294+ self ,
295+ file : BinaryIO ,
296+ path : str ,
297+ name : str ,
298+ parent_id : Optional [str ] = None ,
299+ ** kwargs : Any ,
300+ ) -> Union [Dict [str , Any ], requests .Response ]:
274301 """Import a group from an archive file.
275302
276303 Args:
@@ -304,7 +331,7 @@ class GroupSubgroup(RESTObject):
304331
305332class GroupSubgroupManager (ListMixin , RESTManager ):
306333 _path = "/groups/%(group_id)s/subgroups"
307- _obj_cls = GroupSubgroup
334+ _obj_cls : Union [ Type [ GroupDescendantGroup ], Type [ GroupSubgroup ]] = GroupSubgroup
308335 _from_parent_attrs = {"group_id" : "id" }
309336 _list_filters = (
310337 "skip_groups" ,
@@ -331,4 +358,4 @@ class GroupDescendantGroupManager(GroupSubgroupManager):
331358 """
332359
333360 _path = "/groups/%(group_id)s/descendant_groups"
334- _obj_cls = GroupDescendantGroup
361+ _obj_cls : Type [ GroupDescendantGroup ] = GroupDescendantGroup
0 commit comments