summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Wittig <max.wittig@siemens.com>2019-09-04 08:53:59 +0200
committerMax Wittig <max.wittig95@gmail.com>2019-09-04 23:16:26 +0200
commitb036347043a87a7f2d2df8be7658eb38c1f73183 (patch)
treec00a788437f790cb7d78aa15a2956a23070f146d
parent0256c678ea9593c6371ffff60663f83c423ca872 (diff)
downloadgitlab-feat/status-api.tar.gz
feat(user): add status apifeat/status-api
-rw-r--r--.gitignore1
-rw-r--r--docs/gl_objects/users.rst38
-rw-r--r--gitlab/v4/objects.py36
-rw-r--r--tools/python_test_v4.py11
4 files changed, 86 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index daef3f3..febd0f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ MANIFEST
docs/_build
.testrepository/
.tox
+venv/
diff --git a/docs/gl_objects/users.rst b/docs/gl_objects/users.rst
index e66ef3a..a276ce1 100644
--- a/docs/gl_objects/users.rst
+++ b/docs/gl_objects/users.rst
@@ -250,6 +250,44 @@ Delete an SSH key for a user::
# or
key.delete()
+Status
+======
+
+References
+----------
+
+You can manipulate SSH keys for the current user and for the other users if you
+are admin.
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.CurrentUserStatus`
+ + :class:`gitlab.v4.objects.CurrentUserStatusManager`
+ + :attr:`gitlab.v4.objects.CurrentUser.status`
+ + :class:`gitlab.v4.objects.UserStatus`
+ + :class:`gitlab.v4.objects.UserStatusManager`
+ + :attr:`gitlab.v4.objects.User.status`
+
+* GitLab API: https://docs.gitlab.com/ce/api/users.html#user-status
+
+Examples
+--------
+
+Get current user status::
+
+ status = user.status.get()
+
+Update the status for the current user::
+
+ status = user.status.get()
+ status.message = "message"
+ status.emoji = "thumbsup"
+ status.save()
+
+Get the status of other users::
+
+ gl.users.get(1).status.get()
+
Emails
======
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index dd73be2..864a7db 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -128,6 +128,17 @@ class UserActivities(RESTObject):
_id_attr = "username"
+class UserStatus(RESTObject):
+ _id_attr = None
+ _short_print_attr = "message"
+
+
+class UserStatusManager(GetWithoutIdMixin, RESTManager):
+ _path = "/users/%(user_id)s/status"
+ _obj_cls = UserStatus
+ _from_parent_attrs = {"user_id": "id"}
+
+
class UserActivitiesManager(ListMixin, RESTManager):
_path = "/user/activities"
_obj_cls = UserActivities
@@ -186,6 +197,16 @@ class UserKeyManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
_create_attrs = (("title", "key"), tuple())
+class UserStatus(RESTObject):
+ pass
+
+
+class UserStatusManager(GetWithoutIdMixin, RESTManager):
+ _path = "/users/%(user_id)s/status"
+ _obj_cls = UserStatus
+ _from_parent_attrs = {"user_id": "id"}
+
+
class UserImpersonationToken(ObjectDeleteMixin, RESTObject):
pass
@@ -267,11 +288,13 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
_managers = (
("customattributes", "UserCustomAttributeManager"),
("emails", "UserEmailManager"),
+ ("status", "UserStatusManager"),
("events", "UserEventManager"),
("gpgkeys", "UserGPGKeyManager"),
("impersonationtokens", "UserImpersonationTokenManager"),
("keys", "UserKeyManager"),
("projects", "UserProjectManager"),
+ ("status", "UserStatusManager"),
)
@cli.register_custom_action("User")
@@ -330,6 +353,7 @@ class UserManager(CRUDMixin, RESTManager):
"external",
"search",
"custom_attributes",
+ "status",
)
_create_attrs = (
tuple(),
@@ -410,10 +434,22 @@ class CurrentUserKeyManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager
_create_attrs = (("title", "key"), tuple())
+class CurrentUserStatus(SaveMixin, RESTObject):
+ _id_attr = None
+ _short_print_attr = "message"
+
+
+class CurrentUserStatusManager(GetWithoutIdMixin, UpdateMixin, RESTManager):
+ _path = "/user/status"
+ _obj_cls = CurrentUserStatus
+ _update_attrs = (tuple(), ("emoji", "message"))
+
+
class CurrentUser(RESTObject):
_id_attr = None
_short_print_attr = "username"
_managers = (
+ ("status", "CurrentUserStatusManager"),
("emails", "CurrentUserEmailManager"),
("gpgkeys", "CurrentUserGPGKeyManager"),
("keys", "CurrentUserKeyManager"),
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index e6b6ab9..25272d5 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -911,3 +911,14 @@ assert retrieved_project.description == release_description
release_test_project.releases.delete(release_tag_name)
assert len(release_test_project.releases.list()) == 0
release_test_project.delete()
+
+# status
+message = "Test"
+emoji = "thumbsup"
+status = gl.user.status.get()
+status.message = message
+status.emoji = emoji
+status.save()
+new_status = gl.user.status.get()
+assert new_status.message == message
+assert new_status.emoji == emoji