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

18 statements  

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

1"""Module for the JSON:API representation of a training schedule.""" 

2 

3from kwai_core.json_api import Meta, Relationship, RelationshipList, ResourceMeta 

4from pydantic import BaseModel, Field 

5 

6from kwai_api.schemas.resources import ( 

7 CoachResourceIdentifier, 

8 TeamResourceIdentifier, 

9 TrainingScheduleResourceIdentifier, 

10) 

11 

12 

13class CoachAttributes(BaseModel): 

14 """Attributes for a coach linked to a training schedule.""" 

15 

16 name: str 

17 

18 

19class CoachResource(CoachResourceIdentifier): 

20 """A JSON:API resource for a coach linked to a training schedule.""" 

21 

22 attributes: CoachAttributes 

23 

24 

25class TeamAttributes(BaseModel): 

26 """Attributes for a team JSON:API resource.""" 

27 

28 name: str 

29 

30 

31class TeamResource(TeamResourceIdentifier): 

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

33 

34 attributes: TeamAttributes 

35 

36 

37class TrainingScheduleAttributes(BaseModel): 

38 """Attributes for a training schedule JSON:API resource.""" 

39 

40 name: str 

41 description: str 

42 weekday: int 

43 start_time: str 

44 end_time: str 

45 timezone: str 

46 active: bool 

47 location: str 

48 remark: str | None = None 

49 

50 

51class TrainingScheduleRelationships(BaseModel): 

52 """Relationships for a training schedule JSON:API resource.""" 

53 

54 team: Relationship[TeamResourceIdentifier] 

55 coaches: RelationshipList[CoachResourceIdentifier] 

56 

57 

58class TrainingScheduleResource(TrainingScheduleResourceIdentifier): 

59 """A JSON:API resource for a training schedule.""" 

60 

61 meta: ResourceMeta | None = None 

62 attributes: TrainingScheduleAttributes 

63 relationships: TrainingScheduleRelationships 

64 

65 

66class TrainingScheduleDocument(BaseModel): 

67 """A JSON:API document for one training schedule.""" 

68 

69 data: TrainingScheduleResource 

70 included: set[TeamResource | CoachResource] = Field(default_factory=set) 

71 

72 

73class TrainingSchedulesDocument(BaseModel): 

74 """A JSON:API document for multiple training schedules.""" 

75 

76 meta: Meta = Field(default_factory=Meta) 

77 data: list[TrainingScheduleResource] = Field(default_factory=list) 

78 included: set[TeamResource | CoachResource] = Field(default_factory=set)