1
+ from __future__ import annotations
2
+
3
+ import enum
1
4
import textwrap
2
5
from typing import AsyncIterator , Iterable , Sequence , Union
3
6
import uuid
10
13
11
14
__all__ = (
12
15
'User' ,
16
+ 'UserStatus' ,
17
+ 'UserRole' ,
13
18
)
14
19
15
20
_default_list_fields = (
24
29
)
25
30
26
31
32
+ class UserRole (str , enum .Enum ):
33
+ """
34
+ The role (privilege level) of users.
35
+ """
36
+ SUPERADMIN = 'superadmin'
37
+ ADMIN = 'admin'
38
+ USER = 'user'
39
+ MONITOR = 'monitor'
40
+
41
+
42
+ class UserStatus (enum .Enum ):
43
+ """
44
+ The detailed status of users to represent the signup process and account lifecycles.
45
+ """
46
+ ACTIVE = 'active'
47
+ INACTIVE = 'inactive'
48
+ DELETED = 'deleted'
49
+ BEFORE_VERIFICATION = 'before-verification'
50
+
51
+
27
52
class User (BaseFunction ):
28
53
"""
29
54
Provides interactions with users.
@@ -186,8 +211,12 @@ async def detail_by_uuid(
186
211
async def create (
187
212
cls ,
188
213
domain_name : str ,
189
- email : str , password : str , username : str = None , full_name : str = None ,
190
- role : str = 'user' , status : bool = True ,
214
+ email : str ,
215
+ password : str ,
216
+ username : str = None ,
217
+ full_name : str = None ,
218
+ role : UserRole | str = UserRole .USER ,
219
+ status : UserStatus | str = UserStatus .ACTIVE ,
191
220
need_password_change : bool = False ,
192
221
description : str = '' ,
193
222
group_ids : Iterable [str ] = None ,
@@ -213,8 +242,8 @@ async def create(
213
242
'password' : password ,
214
243
'username' : username ,
215
244
'full_name' : full_name ,
216
- 'role' : role ,
217
- 'status' : status ,
245
+ 'role' : role . value if isinstance ( role , UserRole ) else role ,
246
+ 'status' : status . value if isinstance ( status , UserStatus ) else status ,
218
247
'need_password_change' : need_password_change ,
219
248
'description' : description ,
220
249
'domain_name' : domain_name ,
@@ -232,7 +261,8 @@ async def update(
232
261
password : str = None , username : str = None ,
233
262
full_name : str = None ,
234
263
domain_name : str = None ,
235
- role : str = None , status : bool = None ,
264
+ role : UserRole | str = UserRole .USER ,
265
+ status : UserStatus | str = UserStatus .ACTIVE ,
236
266
need_password_change : bool = None ,
237
267
description : str = None ,
238
268
group_ids : Iterable [str ] = None ,
@@ -256,8 +286,8 @@ async def update(
256
286
'username' : username ,
257
287
'full_name' : full_name ,
258
288
'domain_name' : domain_name ,
259
- 'role' : role ,
260
- 'status' : status ,
289
+ 'role' : role . value if isinstance ( role , UserRole ) else role ,
290
+ 'status' : status . value if isinstance ( status , UserStatus ) else status ,
261
291
'need_password_change' : need_password_change ,
262
292
'description' : description ,
263
293
'group_ids' : group_ids ,
0 commit comments