Coverage for apps/kwai-api/src/kwai_api/v1/club/schemas/upload.py: 100%

20 statements  

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

1"""Module for defining the JSON:API resource for an upload.""" 

2 

3from typing import Annotated, Literal 

4 

5from kwai_core.json_api import RelationshipList, ResourceIdentifier, ResourceMeta 

6from pydantic import BaseModel, Field 

7 

8from kwai_api.v1.club.schemas.contact import ContactResource 

9from kwai_api.v1.club.schemas.member import ( 

10 MemberResource, 

11) 

12from kwai_api.v1.club.schemas.person import PersonResource 

13from kwai_api.v1.club.schemas.resources import MemberResourceIdentifier 

14from kwai_api.v1.schemas import CountryResource 

15 

16 

17class UploadedMemberMeta(ResourceMeta): 

18 """Extra meta data for an uploaded member.""" 

19 

20 row: int 

21 new: bool 

22 

23 

24class UploadedMemberResource(MemberResource): 

25 """Member resource with the extra meta data.""" 

26 

27 meta: UploadedMemberMeta 

28 

29 

30class MemberUploadError(BaseModel): 

31 """Model for an error occurred during uploading.""" 

32 

33 row: int 

34 message: str 

35 

36 

37class MemberUploadAttributes(BaseModel): 

38 """Attributes for a file upload of members.""" 

39 

40 filename: str 

41 preview: bool 

42 remark: str 

43 errors: list[MemberUploadError] = Field(default_factory=list) 

44 

45 

46class MemberUploadResourceIdentifier(ResourceIdentifier): 

47 """Resource identifier for a file upload of members.""" 

48 

49 type: Literal["member_uploads"] = "member_uploads" 

50 

51 

52class MemberUploadRelationships(BaseModel): 

53 """Relationships for a resource with file upload of members.""" 

54 

55 members: RelationshipList[MemberResourceIdentifier] 

56 

57 

58class MemberUploadResource(MemberUploadResourceIdentifier): 

59 """Resource for a file upload with members.""" 

60 

61 attributes: MemberUploadAttributes 

62 relationships: MemberUploadRelationships 

63 

64 

65MemberUploadInclude = Annotated[ 

66 UploadedMemberResource | PersonResource | ContactResource | CountryResource, 

67 Field(discriminator="type"), 

68] 

69 

70 

71class MemberUploadDocument(BaseModel): 

72 """A JSON:API document for a file upload of members.""" 

73 

74 data: MemberUploadResource 

75 included: set[MemberUploadInclude] = Field(default_factory=set)