66from freenit .decorators import description
77from freenit .models .pagination import Page , paginate
88from freenit .models .role import Role , RoleOptional
9+ from freenit .models .safe import RoleSafe , UserSafe
910from freenit .models .user import User
1011from freenit .permissions import role_perms
1112
@@ -20,49 +21,49 @@ async def get(
2021 page : int = Header (default = 1 ),
2122 perpage : int = Header (default = 10 ),
2223 _ : User = Depends (role_perms ),
23- ) -> Page [Role ]:
24- return await paginate (
25- Role .objects .select_related ("users" ). exclude_fields ( "users__password" ) ,
24+ ) -> Page [RoleSafe ]:
25+ ret = await paginate (
26+ Role .objects .select_related ("users" ),
2627 page ,
2728 perpage ,
2829 )
30+ return ret
2931
3032 @staticmethod
31- async def post (role : Role , _ : User = Depends (role_perms )) -> Role :
33+ async def post (role : Role , _ : User = Depends (role_perms )) -> RoleSafe :
3234 await role .save ()
35+ await role .load_all ()
3336 return role
3437
3538
3639@route ("/roles/{id}" , tags = tags )
3740class RoleDetailAPI :
3841 @staticmethod
39- async def get (id , _ : User = Depends (role_perms )) -> Role :
42+ async def get (id , _ : User = Depends (role_perms )) -> RoleSafe :
4043 try :
41- role = (
42- await Role .objects .select_related ("users" )
43- .exclude_fields ("users__password" )
44- .get (pk = id )
45- )
44+ role = await Role .objects .select_related ("users" ).get (pk = id )
4645 except ormar .exceptions .NoMatch :
4746 raise HTTPException (status_code = 404 , detail = "No such role" )
47+ await role .load_all ()
4848 return role
4949
5050 @staticmethod
51- async def patch (id , role_data : RoleOptional , _ : User = Depends (role_perms )) -> Role :
51+ async def patch (id , role_data : RoleOptional , _ : User = Depends (role_perms )) -> RoleSafe :
5252 if Role .dbtype () == "sql" :
5353 try :
5454 role = await Role .objects .get (pk = id )
5555 except ormar .exceptions .NoMatch :
5656 raise HTTPException (status_code = 404 , detail = "No such role" )
5757 await role .patch (role_data )
58+ await role .load_all ()
5859 return role
5960 raise HTTPException (
6061 status_code = 409 ,
6162 detail = f"Role type { Role .dbtype ()} doesn't support PATCH method" ,
6263 )
6364
6465 @staticmethod
65- async def delete (id , _ : User = Depends (role_perms )) -> Role :
66+ async def delete (id , _ : User = Depends (role_perms )) -> RoleSafe :
6667 try :
6768 role = await Role .objects .get (pk = id )
6869 except ormar .exceptions .NoMatch :
@@ -75,13 +76,9 @@ async def delete(id, _: User = Depends(role_perms)) -> Role:
7576class RoleUserAPI :
7677 @staticmethod
7778 @description ("Assign user to role" )
78- async def post (role_id , user_id , _ : User = Depends (role_perms )) -> User :
79+ async def post (role_id , user_id , _ : User = Depends (role_perms )) -> UserSafe :
7980 try :
80- user = (
81- await User .objects .select_related ("roles" )
82- .exclude_fields ("password" )
83- .get (pk = user_id )
84- )
81+ user = await User .objects .select_related ("roles" ).get (pk = user_id )
8582 except ormar .exceptions .NoMatch :
8683 raise HTTPException (status_code = 404 , detail = "No such user" )
8784 for role in user .roles :
@@ -96,13 +93,9 @@ async def post(role_id, user_id, _: User = Depends(role_perms)) -> User:
9693
9794 @staticmethod
9895 @description ("Deassign user to role" )
99- async def delete (role_id , user_id , _ : User = Depends (role_perms )) -> User :
96+ async def delete (role_id , user_id , _ : User = Depends (role_perms )) -> UserSafe :
10097 try :
101- user = (
102- await User .objects .select_related ("roles" )
103- .exclude_fields ("password" )
104- .get (pk = user_id )
105- )
98+ user = await User .objects .select_related ("roles" ).get (pk = user_id )
10699 except ormar .exceptions .NoMatch :
107100 raise HTTPException (status_code = 404 , detail = "No such user" )
108101 try :
0 commit comments