summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
authorMax Wittig <max.wittig@siemens.com>2019-10-25 11:13:06 +0200
committerMax Wittig <max.wittig@siemens.com>2019-10-25 11:13:06 +0200
commit32ad66921e408f6553b9d60b6b4833ed3180f549 (patch)
treedc0b664dd13b17f9584971f2c730ad5b0b55ad84 /gitlab
parentac2266b66553cec11740bd5246e23d649606b5ef (diff)
downloadgitlab-32ad66921e408f6553b9d60b6b4833ed3180f549.tar.gz
feat: add users activate, deactivate functionality
These were introduced in GitLab 12.4
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/exceptions.py8
-rw-r--r--gitlab/tests/test_gitlab.py25
-rw-r--r--gitlab/v4/objects.py42
3 files changed, 75 insertions, 0 deletions
diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py
index d644e0f..aff3c87 100644
--- a/gitlab/exceptions.py
+++ b/gitlab/exceptions.py
@@ -157,6 +157,14 @@ class GitlabUnblockError(GitlabOperationError):
pass
+class GitlabDeactivateError(GitlabOperationError):
+ pass
+
+
+class GitlabActivateError(GitlabOperationError):
+ pass
+
+
class GitlabSubscribeError(GitlabOperationError):
pass
diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py
index c208b31..f9d4cc8 100644
--- a/gitlab/tests/test_gitlab.py
+++ b/gitlab/tests/test_gitlab.py
@@ -695,6 +695,31 @@ class TestGitlab(unittest.TestCase):
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"
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 474cc2b..fcac301 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -340,6 +340,48 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
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"