Coverage for apps/kwai-api/src/kwai_api/v1/portal/trainings/schemas.py: 100%
28 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 the portal trainings API."""
3from typing import Annotated, Set, TypeAlias
5from kwai_core.json_api import Meta, Relationship, RelationshipList, ResourceMeta
6from pydantic import BaseModel, Field
8from kwai_api.schemas.resources import (
9 TeamResourceIdentifier,
10 TrainingResourceIdentifier,
11 TrainingScheduleResourceIdentifier,
12)
15class TeamAttributes(BaseModel):
16 """Attributes for a team JSON:API resource."""
18 name: str
21class TeamResource(TeamResourceIdentifier):
22 """A JSON:API resource for a team."""
24 attributes: TeamAttributes
27class TeamDocument(BaseModel):
28 """A JSON:API document for one training team."""
30 data: TeamResource
33class TeamsDocument(BaseModel):
34 """A JSON:API document for multiple training teams."""
36 meta: Meta
37 data: list[TeamResource] = Field(default_factory=list)
40class TrainingScheduleAttributes(BaseModel):
41 """Schema for training schedule attributes linked to a training."""
43 name: str
46class TrainingScheduleResource(TrainingScheduleResourceIdentifier):
47 """Schema for a training schedule resource linked to a training."""
49 attributes: TrainingScheduleAttributes
52class TrainingScheduleDocument(BaseModel):
53 """Document for a training schedule linked to a training."""
55 data: TrainingScheduleResource
56 included: set = Field(default_factory=set)
59class TrainingText(BaseModel):
60 """Schema for the content of a training."""
62 title: str
63 summary: str
64 content: str | None
67class TrainingEvent(BaseModel):
68 """Schema for the event information of a training."""
70 start_date: str
71 end_date: str
72 location: str
73 cancelled: bool
76class TrainingAttributes(BaseModel):
77 """Attributes for training JSON:API resource."""
79 texts: list[TrainingText]
80 event: TrainingEvent
81 remark: str
84TeamsRelationship: TypeAlias = RelationshipList[TeamResourceIdentifier]
85TrainingScheduleRelationship: TypeAlias = Relationship[
86 TrainingScheduleResourceIdentifier
87]
90class TrainingRelationships(BaseModel):
91 """Relationships of a training JSON:API resource."""
93 teams: TeamsRelationship
94 schedule: TrainingScheduleRelationship
97class TrainingResource(TrainingResourceIdentifier):
98 """A JSON:API resource for a training."""
100 meta: ResourceMeta | None = None
101 attributes: TrainingAttributes
102 relationships: TrainingRelationships
105TrainingInclude = Annotated[
106 TeamResource | TrainingScheduleResource,
107 Field(discriminator="type"),
108]
111class TrainingDocument(BaseModel):
112 """A JSON:API document for one training resource."""
114 data: TrainingResource
115 included: Set[TrainingInclude] = Field(default_factory=set)
118class TrainingsDocument(BaseModel):
119 """A JSON:API document for one or more training resources."""
121 meta: Meta = Field(default_factory=Meta)
122 data: list[TrainingResource] = Field(default_factory=list)
123 included: Set[TrainingInclude] = Field(default_factory=set)