Coverage for src/kwai/api/v1/auth/schemas/user_account.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2024-01-01 00:00 +0000

1"""Schemas for a user account resource.""" 

2 

3from typing import Self 

4 

5from pydantic import BaseModel 

6 

7from kwai.api.v1.auth.schemas.resources import UserAccountResourceIdentifier 

8from kwai.core.json_api import Document, ResourceData 

9from kwai.modules.identity.users.user_account import UserAccountEntity 

10 

11 

12class UserAccountAttributes(BaseModel): 

13 """Attributes of a user account JSON:API resource.""" 

14 

15 email: str 

16 last_login: str | None 

17 last_unsuccessful_login: str | None 

18 revoked: bool 

19 admin: bool 

20 first_name: str 

21 last_name: str 

22 remark: str 

23 

24 

25class UserAccountResource( 

26 UserAccountResourceIdentifier, ResourceData[UserAccountAttributes, None] 

27): 

28 """A JSON:API resource for a user account.""" 

29 

30 

31class UserAccountDocument(Document[UserAccountResource, None]): 

32 """A JSON:API document for a user account.""" 

33 

34 @classmethod 

35 def create(cls, user_account: UserAccountEntity) -> Self: 

36 """Create a document for a user account.""" 

37 return cls( 

38 data=UserAccountResource( 

39 id=str(user_account.user.uuid), 

40 attributes=UserAccountAttributes( 

41 email=str(user_account.user.email), 

42 last_login=None 

43 if user_account.last_login.empty 

44 else str(user_account.last_login), 

45 last_unsuccessful_login=None 

46 if user_account.last_unsuccessful_login.empty 

47 else str(user_account.last_unsuccessful_login), 

48 revoked=user_account.revoked, 

49 admin=user_account.admin, 

50 first_name=user_account.user.name.first_name, 

51 last_name=user_account.user.name.last_name, 

52 remark=user_account.user.remark, 

53 ), 

54 ) 

55 )