Coverage for apps/kwai-api/src/kwai_api/v1/trainings/training_sessions/jsonapi/presenters.py: 77%
13 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"""Presenters for transforming training sessions in JSON:API documents."""
3from typing import Self
5from kwai_bc_training.trainings.training import TrainingSession
6from kwai_core.domain.presenter import AsyncPresenter, IterableResult
7from kwai_core.json_api import JsonApiPresenter, Meta, Relationship
9from kwai_api.schemas.resources import (
10 CoachResourceIdentifier,
11 TrainingResourceIdentifier,
12)
13from kwai_api.v1.trainings.training_sessions.jsonapi.schemas import (
14 TrainingSessionAttributes,
15 TrainingSessionRelationships,
16 TrainingSessionResource,
17 TrainingSessionsDocument,
18)
21class TrainingSessionsPresenter(
22 JsonApiPresenter[TrainingSessionsDocument],
23 AsyncPresenter[IterableResult[TrainingSession]],
24):
25 """A presenter for transforming an iterator with training sessions into a JSON:API document."""
27 async def present(self, use_case_result: IterableResult[TrainingSession]) -> Self:
28 self._document = TrainingSessionsDocument(
29 meta=Meta(
30 count=use_case_result.count,
31 offset=use_case_result.offset,
32 limit=use_case_result.limit,
33 ),
34 )
35 async for training_session in use_case_result:
36 resource = TrainingSessionResource(
37 id=f"{training_session.training_id}/{training_session.coach_uuid}",
38 attributes=TrainingSessionAttributes(
39 start_date=str(training_session.period.start_date),
40 end_date=str(training_session.period.end_date),
41 hours=training_session.hours,
42 minutes=training_session.minutes,
43 head=training_session.head,
44 ),
45 relationships=TrainingSessionRelationships(
46 training=Relationship(
47 data=TrainingResourceIdentifier(
48 id=str(training_session.training_id)
49 )
50 ),
51 coach=Relationship(
52 data=CoachResourceIdentifier(
53 id=str(training_session.coach_uuid)
54 )
55 ),
56 ),
57 )
58 self._document.data.append(resource)
59 return self