1
- from typing import Any , Dict , Optional , Union
1
+ from typing import Any , Dict , Union
2
2
3
3
from motor .core import AgnosticDatabase
4
4
11
11
12
12
# ODM, Schema, Schema
13
13
class CRUDUser (CRUDBase [User , UserCreate , UserUpdate ]):
14
- async def get_by_email (self , db : AgnosticDatabase , * , email : str ) -> Optional [ User ]:
14
+ async def get_by_email (self , db : AgnosticDatabase , * , email : str ) -> User | None : # noqa
15
15
return await self .engine .find_one (User , User .email == email )
16
16
17
- async def create (self , db : AgnosticDatabase , * , obj_in : UserCreate ) -> User :
17
+ async def create (self , db : AgnosticDatabase , * , obj_in : UserCreate ) -> User : # noqa
18
18
# TODO: Figure out what happens when you have a unique key like 'email'
19
19
user = {
20
20
** obj_in .model_dump (),
21
21
"email" : obj_in .email ,
22
- "hashed_password" : get_password_hash (obj_in .password ) if obj_in .password is not None else None ,
22
+ "hashed_password" : get_password_hash (obj_in .password ) if obj_in .password is not None else None , # noqa
23
23
"full_name" : obj_in .full_name ,
24
24
"is_superuser" : obj_in .is_superuser ,
25
25
}
26
26
27
27
return await self .engine .save (User (** user ))
28
28
29
- async def update (self , db : AgnosticDatabase , * , db_obj : User , obj_in : Union [UserUpdate , Dict [str , Any ]]) -> User :
29
+ async def update (self , db : AgnosticDatabase , * , db_obj : User , obj_in : Union [UserUpdate , Dict [str , Any ]]) -> User : # noqa
30
30
if isinstance (obj_in , dict ):
31
31
update_data = obj_in
32
32
else :
@@ -39,39 +39,39 @@ async def update(self, db: AgnosticDatabase, *, db_obj: User, obj_in: Union[User
39
39
update_data ["email_validated" ] = False
40
40
return await super ().update (db , db_obj = db_obj , obj_in = update_data )
41
41
42
- async def authenticate (self , db : AgnosticDatabase , * , email : str , password : str ) -> Optional [ User ]:
42
+ async def authenticate (self , db : AgnosticDatabase , * , email : str , password : str ) -> User | None : # noqa
43
43
user = await self .get_by_email (db , email = email )
44
44
if not user :
45
45
return None
46
- if not verify_password (plain_password = password , hashed_password = user .hashed_password ):
46
+ if not verify_password (plain_password = password , hashed_password = user .hashed_password ): # noqa
47
47
return None
48
48
return user
49
49
50
- async def validate_email (self , db : AgnosticDatabase , * , db_obj : User ) -> User :
50
+ async def validate_email (self , db : AgnosticDatabase , * , db_obj : User ) -> User : # noqa
51
51
obj_in = UserUpdate (** UserInDB .model_validate (db_obj ).model_dump ())
52
52
obj_in .email_validated = True
53
53
return await self .update (db = db , db_obj = db_obj , obj_in = obj_in )
54
54
55
- async def activate_totp (self , db : AgnosticDatabase , * , db_obj : User , totp_in : NewTOTP ) -> User :
55
+ async def activate_totp (self , db : AgnosticDatabase , * , db_obj : User , totp_in : NewTOTP ) -> User : # noqa
56
56
obj_in = UserUpdate (** UserInDB .model_validate (db_obj ).model_dump ())
57
57
obj_in = obj_in .model_dump (exclude_unset = True )
58
58
obj_in ["totp_secret" ] = totp_in .secret
59
59
return await self .update (db = db , db_obj = db_obj , obj_in = obj_in )
60
60
61
- async def deactivate_totp (self , db : AgnosticDatabase , * , db_obj : User ) -> User :
61
+ async def deactivate_totp (self , db : AgnosticDatabase , * , db_obj : User ) -> User : # noqa
62
62
obj_in = UserUpdate (** UserInDB .model_validate (db_obj ).model_dump ())
63
63
obj_in = obj_in .model_dump (exclude_unset = True )
64
64
obj_in ["totp_secret" ] = None
65
65
obj_in ["totp_counter" ] = None
66
66
return await self .update (db = db , db_obj = db_obj , obj_in = obj_in )
67
67
68
- async def update_totp_counter (self , db : AgnosticDatabase , * , db_obj : User , new_counter : int ) -> User :
68
+ async def update_totp_counter (self , db : AgnosticDatabase , * , db_obj : User , new_counter : int ) -> User : # noqa
69
69
obj_in = UserUpdate (** UserInDB .model_validate (db_obj ).model_dump ())
70
70
obj_in = obj_in .model_dump (exclude_unset = True )
71
71
obj_in ["totp_counter" ] = new_counter
72
72
return await self .update (db = db , db_obj = db_obj , obj_in = obj_in )
73
73
74
- async def toggle_user_state (self , db : AgnosticDatabase , * , obj_in : Union [UserUpdate , Dict [str , Any ]]) -> User :
74
+ async def toggle_user_state (self , db : AgnosticDatabase , * , obj_in : Union [UserUpdate , Dict [str , Any ]]) -> User : # noqa
75
75
db_obj = await self .get_by_email (db , email = obj_in .email )
76
76
if not db_obj :
77
77
return None
0 commit comments