Skip to content

Commit e42b07e

Browse files
committed
feat: add support for Groups API method transfer_group
1 parent 9894b35 commit e42b07e

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

gitlab/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ class GitlabTransferProjectError(GitlabOperationError):
107107
pass
108108

109109

110+
class GitlabGroupTransferError(GitlabOperationError):
111+
pass
112+
113+
110114
class GitlabProjectDeployKeyError(GitlabOperationError):
111115
pass
112116

gitlab/v4/objects/groups.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,34 @@ def transfer_project(self, project_id: int, **kwargs: Any) -> None:
9393
path = f"/groups/{self.id}/projects/{project_id}"
9494
self.manager.gitlab.http_post(path, **kwargs)
9595

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

0 commit comments

Comments
 (0)