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

17 statements  

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

1"""Module for presenters of the /api/v1/trainings endpoint.""" 

2 

3from typing import Self 

4 

5from kwai_bc_training.teams.team import TeamEntity 

6from kwai_bc_training.trainings.training import TrainingEntity 

7from kwai_core.domain.presenter import Presenter 

8from kwai_core.json_api import JsonApiPresenter, Meta 

9 

10from kwai_api.v1.trainings.teams.schemas import ( 

11 TeamAttributes, 

12 TeamDocument, 

13 TeamResource, 

14 TeamsDocument, 

15) 

16 

17 

18class JsonApiTrainingTeamPresenter( 

19 JsonApiPresenter[TeamDocument], Presenter[TeamEntity] 

20): 

21 """A presenter that transforms a team from a training into a JSON:API document.""" 

22 

23 def present(self, team: TeamEntity) -> Self: 

24 self._document = TeamDocument( 

25 data=TeamResource( 

26 id=str(team.id), attributes=TeamAttributes(name=team.name) 

27 ) 

28 ) 

29 return self 

30 

31 

32class JsonApiTrainingTeamsPresenter( 

33 JsonApiPresenter[TeamsDocument], Presenter[TrainingEntity] 

34): 

35 """A presenter that transforms the teams of a training into a JSON:API document.""" 

36 

37 def present(self, training: TrainingEntity) -> Self: 

38 self._document = TeamsDocument(meta=Meta(count=len(training.teams))) 

39 

40 for team in training.teams: 

41 team_document = JsonApiTrainingTeamPresenter().present(team).get_document() 

42 self._document.data.append(team_document.data) 

43 

44 return self