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
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Schemas for training(s)."""
3from typing import Annotated, Set
5from kwai_core.json_api import (
6 Meta,
7 Relationship,
8 RelationshipList,
9 ResourceMeta,
10)
11from pydantic import BaseModel, Field
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
26class TrainingScheduleAttributes(BaseModel):
27 """Schema for training schedule attributes linked to a training."""
29 name: str
32class TrainingScheduleResource(TrainingScheduleResourceIdentifier):
33 """Schema for a training schedule resource linked to a training."""
35 attributes: TrainingScheduleAttributes
38class TrainingScheduleDocument(BaseModel):
39 """Document for a training schedule linked to a training."""
41 data: TrainingScheduleResource
42 included: set = Field(default_factory=set)
45class TrainingText(BaseModel):
46 """Schema for the content of a training."""
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
57class TrainingEvent(BaseModel):
58 """Schema for the event information of a training."""
60 start_date: str
61 end_date: str
62 location: str
63 cancelled: bool
64 active: bool
67class TrainingAttributes(BaseModel):
68 """Attributes for training JSON:API resource."""
70 texts: list[TrainingText]
71 event: TrainingEvent
72 remark: str
75class TrainingRelationships(BaseModel):
76 """Relationships of a training JSON:API resource."""
78 coaches: RelationshipList[TrainingCoachResourceIdentifier]
79 teams: RelationshipList[TeamResourceIdentifier]
80 schedule: Relationship[TrainingScheduleResourceIdentifier]
83class TrainingResource(TrainingResourceIdentifier):
84 """A JSON:API resource for a training."""
86 meta: ResourceMeta | None = None
87 attributes: TrainingAttributes
88 relationships: TrainingRelationships
91TrainingInclude = Annotated[
92 TeamResource | TrainingScheduleResource | CoachResource | TrainingCoachResource,
93 Field(discriminator="type"),
94]
97class TrainingDocument(BaseModel):
98 """A JSON:API document for one training resource."""
100 data: TrainingResource
101 included: Set[TrainingInclude] = Field(default_factory=set)
104class TrainingsDocument(BaseModel):
105 """A JSON:API document for one or more training resources."""
107 meta: Meta = Field(default_factory=Meta)
108 data: list[TrainingResource] = Field(default_factory=list)
109 included: Set[TrainingInclude] = Field(default_factory=set)