Coverage for apps/kwai-api/src/kwai_api/v1/portal/applications/presenters.py: 100%
16 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"""Module for defining presenters for api/v1/portal/applications."""
3from typing import Self
5from kwai_bc_portal.domain.application import ApplicationEntity
6from kwai_core.domain.presenter import AsyncPresenter, IterableResult, Presenter
7from kwai_core.json_api import JsonApiPresenter, Meta, ResourceMeta
9from kwai_api.v1.portal.applications.schemas import (
10 ApplicationAttributes,
11 ApplicationDocument,
12 ApplicationResource,
13 ApplicationsDocument,
14)
17class JsonApiApplicationPresenter(
18 JsonApiPresenter[ApplicationDocument], Presenter[ApplicationEntity]
19):
20 """A presenter that transforms an application entity into a JSON:API document."""
22 def present(self, application: ApplicationEntity) -> Self:
23 self._document = ApplicationDocument(
24 data=ApplicationResource(
25 id=str(application.id),
26 meta=ResourceMeta(
27 created_at=str(application.traceable_time.created_at),
28 updated_at=str(application.traceable_time.created_at),
29 ),
30 attributes=ApplicationAttributes(
31 name=application.name,
32 title=application.title,
33 short_description=application.short_description,
34 description=application.description,
35 remark=application.remark,
36 news=application.can_contain_news,
37 events=application.can_contain_events,
38 pages=application.can_contain_pages,
39 weight=application.weight,
40 ),
41 )
42 )
43 return self
46class JsonApiApplicationsPresenter(
47 JsonApiPresenter[ApplicationsDocument],
48 AsyncPresenter[IterableResult[ApplicationEntity]],
49):
50 """A presenter that transforms an iterable list of applications into a JSON:API document."""
52 async def present(self, result: IterableResult[ApplicationEntity]) -> Self:
53 self._document = ApplicationsDocument(
54 meta=Meta(count=result.count, offset=result.offset, limit=result.limit)
55 )
56 async for application in result.iterator:
57 application_document = (
58 JsonApiApplicationPresenter().present(application).get_document()
59 )
60 self._document.data.append(application_document.data)
61 return self