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

26 statements  

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

1"""Module that defines the schemas for the teams API.""" 

2 

3from typing import Annotated 

4 

5from kwai_core.json_api import ( 

6 Meta, 

7 Relationship, 

8 RelationshipList, 

9 ResourceMeta, 

10) 

11from pydantic import BaseModel, Field 

12 

13from kwai_api.schemas.resources import TeamResourceIdentifier 

14from kwai_api.v1.schemas import ( 

15 CountryResource, 

16 CountryResourceIdentifier, 

17) 

18from kwai_api.v1.teams.resources import TeamMemberResourceIdentifier 

19 

20 

21class TeamMemberAttributes(BaseModel): 

22 """Attributes for a team member.""" 

23 

24 active: bool 

25 first_name: str 

26 last_name: str 

27 license_number: str 

28 license_end_date: str 

29 gender: int 

30 birthdate: str 

31 active_in_club: bool 

32 

33 

34class TeamMemberRelationships(BaseModel): 

35 """Relationships for a team member JSON:API resource.""" 

36 

37 nationality: Relationship[CountryResourceIdentifier] 

38 team: Relationship[TeamResourceIdentifier] 

39 

40 

41class TeamMemberResource(TeamMemberResourceIdentifier): 

42 """A JSON:API resource for a team member.""" 

43 

44 meta: ResourceMeta | None = None 

45 attributes: TeamMemberAttributes 

46 relationships: TeamMemberRelationships 

47 

48 

49TeamMemberInclude = Annotated[CountryResource, Field(discriminator="type")] 

50 

51 

52class TeamMemberDocument(BaseModel): 

53 """A JSON:API document for one team member.""" 

54 

55 data: TeamMemberResource 

56 included: set[TeamMemberInclude] = Field(default_factory=set) 

57 

58 

59class TeamMembersDocument(BaseModel): 

60 """A JSON:API document for multiple team members.""" 

61 

62 meta: Meta 

63 data: list[TeamMemberResource] = Field(default_factory=list) 

64 included: set[TeamMemberInclude] = Field(default_factory=set) 

65 

66 

67class TeamAttributes(BaseModel): 

68 """Attributes for the team JSON:API resource.""" 

69 

70 name: str 

71 active: bool 

72 remark: str 

73 

74 

75class TeamRelationships(BaseModel): 

76 """Relationships for a team JSON:API resource.""" 

77 

78 team_members: RelationshipList[TeamMemberResourceIdentifier] 

79 

80 

81class TeamResource(TeamResourceIdentifier): 

82 """A JSON:API resource for a team.""" 

83 

84 meta: ResourceMeta | None = None 

85 attributes: TeamAttributes 

86 relationships: TeamRelationships 

87 

88 

89TeamInclude = Annotated[ 

90 TeamMemberResource | CountryResource, Field(discriminator="type") 

91] 

92 

93 

94class TeamDocument(BaseModel): 

95 """A JSON:API document for one team.""" 

96 

97 data: TeamResource 

98 included: set[TeamInclude] = Field(default_factory=set) 

99 

100 

101class TeamsDocument(BaseModel): 

102 """A JSON:API document for multiple teams.""" 

103 

104 meta: Meta 

105 data: list[TeamResource] = Field(default_factory=list) 

106 included: set[TeamInclude] = Field(default_factory=set)