@@ -95,12 +95,34 @@ def transfer_project(self, project_id: int, **kwargs: Any) -> None:
9595path = f"/groups/{ self .encoded_id } /projects/{ project_id } "
9696self .manager .gitlab .http_post (path ,** kwargs )
9797
98+ @cli .register_custom_action ("Group" ,tuple (), ("group_id" ,))
99+ @exc .on_http_error (exc .GitlabGroupTransferError )
100+ def transfer (self ,group_id :Optional [int ]= None ,** kwargs :Any )-> None :
101+ """Transfer the group to a new parent group or make it a top-level group.
102+
103+ Requires GitLab ≥14.6.
104+
105+ Args:
106+ group_id: ID of the new parent group. When not specified,
107+ the group to transfer is instead turned into a top-level group.
108+ **kwargs: Extra options to send to the server (e.g. sudo)
109+
110+ Raises:
111+ GitlabAuthenticationError: If authentication is not correct
112+ GitlabGroupTransferError: If the group could not be transferred
113+ """
114+ path = f"/groups/{ self .id } /transfer"
115+ post_data = {}
116+ if group_id is not None :
117+ post_data ["group_id" ]= group_id
118+ self .manager .gitlab .http_post (path ,post_data = post_data ,** kwargs )
119+
98120@cli .register_custom_action ("Group" , ("scope" ,"search" ))
99121@exc .on_http_error (exc .GitlabSearchError )
100122def search (
101123self ,scope :str ,search :str ,** kwargs :Any
102124 )-> Union [gitlab .GitlabList ,List [Dict [str ,Any ]]]:
103- """Search the group resources matching the provided string.'
125+ """Search the group resources matching the provided string.
104126
105127 Args:
106128 scope: Scope of the search