| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | # -*- coding: utf-8 -*-# (c) Nelen & Schuurmansfrom abc import abstractmethod, abstractpropertyfrom typing import Generic, List, Optional, TypeVarfrom .exceptions import BadRequest, DoesNotExistfrom .gateway import Filterfrom .manage import Managefrom .pagination import PageOptionsfrom .root_entity import RootEntityfrom .value_object import ValueObjectE = TypeVar("E", bound=RootEntity)  # ExternalT = TypeVar("T", bound=ValueObject)  # Internal# don't subclass Gateway; Gateway makes Json objectsclass InternalGateway(Generic[E, T]):    @abstractproperty    def manage(self) -> Manage[E]:        raise NotImplementedError()    @abstractmethod    def _map(self, obj: E) -> T:        raise NotImplementedError()    async def get(self, id: int) -> Optional[T]:        try:            result = await self.manage.retrieve(id)        except DoesNotExist:            return None        else:            return self._map(result)    async def filter(        self, filters: List[Filter], params: Optional[PageOptions] = None    ) -> List[T]:        page = await self.manage.filter(filters, params)        return [self._map(x) for x in page.items]    async def add(self, item: T) -> T:        try:            created = await self.manage.create(item.dict())        except BadRequest as e:            raise ValueError(e)        return self._map(created)    async def remove(self, id) -> bool:        return await self.manage.destroy(id)    async def count(self, filters: List[Filter]) -> int:        return await self.manage.count(filters)    async def exists(self, filters: List[Filter]) -> bool:        return await self.manage.exists(filters)
 |