Skip to content

feat: add users activate, deactivate functionality #923

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/gl_objects/users.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ Block/Unblock a user::
user.block()
user.unblock()

Activate/Deactivate a user::

user.activate()
user.deactivate()

Set the avatar image for a user::

# the avatar image can be passed as data (content of the file) or as a file
Expand Down
8 changes: 8 additions & 0 deletions gitlab/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,14 @@ class GitlabUnblockError(GitlabOperationError):
pass


class GitlabDeactivateError(GitlabOperationError):
pass


class GitlabActivateError(GitlabOperationError):
pass


class GitlabSubscribeError(GitlabOperationError):
pass

Expand Down
25 changes: 25 additions & 0 deletions gitlab/tests/test_gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,31 @@ def resp_deployment_update(url, request):
deployment.save()
self.assertEqual(deployment.status, "failed")

def test_user_activate_deactivate(self):
@urlmatch(
scheme="http",
netloc="localhost",
path="/api/v4/users/1/activate",
method="post",
)
def resp_activate(url, request):
headers = {"content-type": "application/json"}
return response(201, {}, headers, None, 5, request)

@urlmatch(
scheme="http",
netloc="localhost",
path="/api/v4/users/1/deactivate",
method="post",
)
def resp_deactivate(url, request):
headers = {"content-type": "application/json"}
return response(201, {}, headers, None, 5, request)

with HTTMock(resp_activate), HTTMock(resp_deactivate):
self.gl.users.get(1, lazy=True).activate()
self.gl.users.get(1, lazy=True).deactivate()

def test_update_submodule(self):
@urlmatch(
scheme="http", netloc="localhost", path="/api/v4/projects/1$", method="get"
Expand Down
42 changes: 42 additions & 0 deletions gitlab/v4/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,48 @@ def unblock(self, **kwargs):
self._attrs["state"] = "active"
return server_data

@cli.register_custom_action("User")
@exc.on_http_error(exc.GitlabDeactivateError)
def deactivate(self, **kwargs):
"""Deactivate the user.

Args:
**kwargs: Extra options to send to the server (e.g. sudo)

Raises:
GitlabAuthenticationError: If authentication is not correct
GitlabDeactivateError: If the user could not be deactivated

Returns:
bool: Whether the user status has been changed
"""
path = "/users/%s/deactivate" % self.id
server_data = self.manager.gitlab.http_post(path, **kwargs)
if server_data:
self._attrs["state"] = "deactivated"
return server_data

@cli.register_custom_action("User")
@exc.on_http_error(exc.GitlabActivateError)
def activate(self, **kwargs):
"""Activate the user.

Args:
**kwargs: Extra options to send to the server (e.g. sudo)

Raises:
GitlabAuthenticationError: If authentication is not correct
GitlabActivateError: If the user could not be activated

Returns:
bool: Whether the user status has been changed
"""
path = "/users/%s/activate" % self.id
server_data = self.manager.gitlab.http_post(path, **kwargs)
if server_data:
self._attrs["state"] = "active"
return server_data


class UserManager(CRUDMixin, RESTManager):
_path = "/users"
Expand Down