diff options
author | Max Wittig <max.wittig@siemens.com> | 2019-09-04 08:53:59 +0200 |
---|---|---|
committer | Max Wittig <max.wittig95@gmail.com> | 2019-09-04 23:16:26 +0200 |
commit | b036347043a87a7f2d2df8be7658eb38c1f73183 (patch) | |
tree | c00a788437f790cb7d78aa15a2956a23070f146d | |
parent | 0256c678ea9593c6371ffff60663f83c423ca872 (diff) | |
download | gitlab-feat/status-api.tar.gz |
feat(user): add status apifeat/status-api
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | docs/gl_objects/users.rst | 38 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 36 | ||||
-rw-r--r-- | tools/python_test_v4.py | 11 |
4 files changed, 86 insertions, 0 deletions
@@ -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 |