Coverage for apps/kwai-api/src/kwai_api/v1/portal/coaches/presenters.py: 64%

11 statements  

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

1"""Module that defines presenters for creating JSON:API resources for one or more coaches.""" 

2 

3from typing import Self 

4 

5from kwai_bc_club.domain.club_coach import ClubCoachEntity 

6from kwai_core.domain.presenter import AsyncPresenter, IterableResult 

7from kwai_core.json_api import JsonApiPresenter, Meta 

8 

9from kwai_api.v1.portal.coaches.schemas import ( 

10 CoachAttributes, 

11 CoachesDocument, 

12 CoachResource, 

13) 

14 

15 

16class JsonApiCoachesPresenter( 

17 JsonApiPresenter[CoachesDocument], AsyncPresenter[IterableResult[ClubCoachEntity]] 

18): 

19 """A presenter that transforms an iterable of coaches into a JSON:API document.""" 

20 

21 async def present(self, result: IterableResult[ClubCoachEntity]) -> Self: 

22 self._document = CoachesDocument( 

23 meta=Meta(count=result.count, offset=result.offset, limit=result.limit) 

24 ) 

25 async for coach in result.iterator: 

26 self._document.data.append( 

27 CoachResource( 

28 id=str(coach.id), 

29 attributes=CoachAttributes( 

30 name=str(coach.name), 

31 description=coach.description, 

32 diploma=coach.diploma, 

33 ), 

34 ) 

35 ) 

36 return self