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

1"""Presenters for transforming training sessions in JSON:API documents.""" 

2 

3from typing import Self 

4 

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 

8 

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) 

19 

20 

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.""" 

26 

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