1+ from __future__ import annotations
2+
3+ import enum
14import textwrap
25from typing import AsyncIterator , Iterable , Sequence , Union
36import uuid
1013
1114__all__ = (
1215 'User' ,
16+ 'UserStatus' ,
17+ 'UserRole' ,
1318)
1419
1520_default_list_fields = (
2429)
2530
2631
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+
2752class User (BaseFunction ):
2853 """
2954 Provides interactions with users.
@@ -186,8 +211,12 @@ async def detail_by_uuid(
186211 async def create (
187212 cls ,
188213 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 ,
191220 need_password_change : bool = False ,
192221 description : str = '' ,
193222 group_ids : Iterable [str ] = None ,
@@ -213,8 +242,8 @@ async def create(
213242 'password' : password ,
214243 'username' : username ,
215244 '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 ,
218247 'need_password_change' : need_password_change ,
219248 'description' : description ,
220249 'domain_name' : domain_name ,
@@ -232,7 +261,8 @@ async def update(
232261 password : str = None , username : str = None ,
233262 full_name : str = None ,
234263 domain_name : str = None ,
235- role : str = None , status : bool = None ,
264+ role : UserRole | str = UserRole .USER ,
265+ status : UserStatus | str = UserStatus .ACTIVE ,
236266 need_password_change : bool = None ,
237267 description : str = None ,
238268 group_ids : Iterable [str ] = None ,
@@ -256,8 +286,8 @@ async def update(
256286 'username' : username ,
257287 'full_name' : full_name ,
258288 '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 ,
261291 'need_password_change' : need_password_change ,
262292 'description' : description ,
263293 'group_ids' : group_ids ,
0 commit comments