Skip to content

Commit 62c9fe6

Browse files
committed
feat(user): add status api
1 parent 0256c67 commit 62c9fe6

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ MANIFEST
88
docs/_build
99
.testrepository/
1010
.tox
11+
venv/

docs/gl_objects/users.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,43 @@ Delete an SSH key for a user::
250250
# or
251251
key.delete()
252252

253+
Status
254+
======
255+
256+
References
257+
----------
258+
259+
You can manipulate the status for the current user and you can read the status of other users.
260+
261+
* v4 API:
262+
263+
+ :class:`gitlab.v4.objects.CurrentUserStatus`
264+
+ :class:`gitlab.v4.objects.CurrentUserStatusManager`
265+
+ :attr:`gitlab.v4.objects.CurrentUser.status`
266+
+ :class:`gitlab.v4.objects.UserStatus`
267+
+ :class:`gitlab.v4.objects.UserStatusManager`
268+
+ :attr:`gitlab.v4.objects.User.status`
269+
270+
* GitLab API: https://docs.gitlab.com/ce/api/users.html#user-status
271+
272+
Examples
273+
--------
274+
275+
Get current user status::
276+
277+
status = user.status.get()
278+
279+
Update the status for the current user::
280+
281+
status = user.status.get()
282+
status.message = "message"
283+
status.emoji = "thumbsup"
284+
status.save()
285+
286+
Get the status of other users::
287+
288+
gl.users.get(1).status.get()
289+
253290
Emails
254291
======
255292

gitlab/v4/objects.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,17 @@ class UserActivities(RESTObject):
128128
_id_attr = "username"
129129

130130

131+
class UserStatus(RESTObject):
132+
_id_attr = None
133+
_short_print_attr = "message"
134+
135+
136+
class UserStatusManager(GetWithoutIdMixin, RESTManager):
137+
_path = "/users/%(user_id)s/status"
138+
_obj_cls = UserStatus
139+
_from_parent_attrs = {"user_id": "id"}
140+
141+
131142
class UserActivitiesManager(ListMixin, RESTManager):
132143
_path = "/user/activities"
133144
_obj_cls = UserActivities
@@ -186,6 +197,16 @@ class UserKeyManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
186197
_create_attrs = (("title", "key"), tuple())
187198

188199

200+
class UserStatus(RESTObject):
201+
pass
202+
203+
204+
class UserStatusManager(GetWithoutIdMixin, RESTManager):
205+
_path = "/users/%(user_id)s/status"
206+
_obj_cls = UserStatus
207+
_from_parent_attrs = {"user_id": "id"}
208+
209+
189210
class UserImpersonationToken(ObjectDeleteMixin, RESTObject):
190211
pass
191212

@@ -272,6 +293,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
272293
("impersonationtokens", "UserImpersonationTokenManager"),
273294
("keys", "UserKeyManager"),
274295
("projects", "UserProjectManager"),
296+
("status", "UserStatusManager"),
275297
)
276298

277299
@cli.register_custom_action("User")
@@ -330,6 +352,7 @@ class UserManager(CRUDMixin, RESTManager):
330352
"external",
331353
"search",
332354
"custom_attributes",
355+
"status",
333356
)
334357
_create_attrs = (
335358
tuple(),
@@ -410,10 +433,22 @@ class CurrentUserKeyManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager
410433
_create_attrs = (("title", "key"), tuple())
411434

412435

436+
class CurrentUserStatus(SaveMixin, RESTObject):
437+
_id_attr = None
438+
_short_print_attr = "message"
439+
440+
441+
class CurrentUserStatusManager(GetWithoutIdMixin, UpdateMixin, RESTManager):
442+
_path = "/user/status"
443+
_obj_cls = CurrentUserStatus
444+
_update_attrs = (tuple(), ("emoji", "message"))
445+
446+
413447
class CurrentUser(RESTObject):
414448
_id_attr = None
415449
_short_print_attr = "username"
416450
_managers = (
451+
("status", "CurrentUserStatusManager"),
417452
("emails", "CurrentUserEmailManager"),
418453
("gpgkeys", "CurrentUserGPGKeyManager"),
419454
("keys", "CurrentUserKeyManager"),

tools/python_test_v4.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,3 +911,14 @@
911911
release_test_project.releases.delete(release_tag_name)
912912
assert len(release_test_project.releases.list()) == 0
913913
release_test_project.delete()
914+
915+
# status
916+
message = "Test"
917+
emoji = "thumbsup"
918+
status = gl.user.status.get()
919+
status.message = message
920+
status.emoji = emoji
921+
status.save()
922+
new_status = gl.user.status.get()
923+
assert new_status.message == message
924+
assert new_status.emoji == emoji

0 commit comments

Comments
 (0)