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

23 statements  

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

1"""Schemas for training(s).""" 

2 

3from typing import Annotated, Set 

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 ( 

14 TeamResourceIdentifier, 

15 TrainingResourceIdentifier, 

16 TrainingScheduleResourceIdentifier, 

17) 

18from kwai_api.v1.trainings.coaches.schemas import ( 

19 CoachResource, 

20 TrainingCoachResource, 

21 TrainingCoachResourceIdentifier, 

22) 

23from kwai_api.v1.trainings.teams.schemas import TeamResource 

24 

25 

26class TrainingScheduleAttributes(BaseModel): 

27 """Schema for training schedule attributes linked to a training.""" 

28 

29 name: str 

30 

31 

32class TrainingScheduleResource(TrainingScheduleResourceIdentifier): 

33 """Schema for a training schedule resource linked to a training.""" 

34 

35 attributes: TrainingScheduleAttributes 

36 

37 

38class TrainingScheduleDocument(BaseModel): 

39 """Document for a training schedule linked to a training.""" 

40 

41 data: TrainingScheduleResource 

42 included: set = Field(default_factory=set) 

43 

44 

45class TrainingText(BaseModel): 

46 """Schema for the content of a training.""" 

47 

48 locale: str 

49 format: str 

50 title: str 

51 summary: str 

52 content: str | None 

53 original_summary: str | None 

54 original_content: str | None 

55 

56 

57class TrainingEvent(BaseModel): 

58 """Schema for the event information of a training.""" 

59 

60 start_date: str 

61 end_date: str 

62 location: str 

63 cancelled: bool 

64 active: bool 

65 

66 

67class TrainingAttributes(BaseModel): 

68 """Attributes for training JSON:API resource.""" 

69 

70 texts: list[TrainingText] 

71 event: TrainingEvent 

72 remark: str 

73 

74 

75class TrainingRelationships(BaseModel): 

76 """Relationships of a training JSON:API resource.""" 

77 

78 coaches: RelationshipList[TrainingCoachResourceIdentifier] 

79 teams: RelationshipList[TeamResourceIdentifier] 

80 schedule: Relationship[TrainingScheduleResourceIdentifier] 

81 

82 

83class TrainingResource(TrainingResourceIdentifier): 

84 """A JSON:API resource for a training.""" 

85 

86 meta: ResourceMeta | None = None 

87 attributes: TrainingAttributes 

88 relationships: TrainingRelationships 

89 

90 

91TrainingInclude = Annotated[ 

92 TeamResource | TrainingScheduleResource | CoachResource | TrainingCoachResource, 

93 Field(discriminator="type"), 

94] 

95 

96 

97class TrainingDocument(BaseModel): 

98 """A JSON:API document for one training resource.""" 

99 

100 data: TrainingResource 

101 included: Set[TrainingInclude] = Field(default_factory=set) 

102 

103 

104class TrainingsDocument(BaseModel): 

105 """A JSON:API document for one or more training resources.""" 

106 

107 meta: Meta = Field(default_factory=Meta) 

108 data: list[TrainingResource] = Field(default_factory=list) 

109 included: Set[TrainingInclude] = Field(default_factory=set)