Source code for mode.proxy

"""Proxy to service.

Works like a service, but delegates to underlying service object.
"""
import abc
from typing import Any, ContextManager, Optional
from .services import ServiceBase
from .types import ServiceT
from .utils.typing import AsyncContextManager
from .utils.types.trees import NodeT

__all__ = ['ServiceProxy']


[docs]class ServiceProxy(ServiceBase): """A service proxy delegates ServiceT methods to a composite service. Example: >>> class MyServiceProxy(ServiceProxy): ... ... @cached_property ... def _service(self) -> ServiceT: ... return ActualService() Notes: This is used by Faust, and probably useful elsewhere! The Faust App is created at module-level, and it uses service proxy to ensure the event loop is not also created just by importing a module. """ @property @abc.abstractmethod def _service(self) -> ServiceT: # pragma: no cover ...
[docs] def add_dependency(self, service: ServiceT) -> ServiceT: return self._service.add_dependency(service)
[docs] async def add_runtime_dependency(self, service: ServiceT) -> ServiceT: return await self._service.add_runtime_dependency(service)
[docs] async def add_async_context(self, context: AsyncContextManager) -> Any: return await self._service.add_async_context(context)
[docs] def add_context(self, context: ContextManager) -> Any: return self._service.add_context(context)
[docs] async def start(self) -> None: await self._service.start()
[docs] async def maybe_start(self) -> None: await self._service.maybe_start()
[docs] async def crash(self, reason: BaseException) -> None: await self._service.crash(reason)
def _crash(self, reason: BaseException) -> None: self._service._crash(reason)
[docs] async def stop(self) -> None: await self._service.stop()
[docs] def service_reset(self) -> None: self._service.service_reset()
[docs] async def restart(self) -> None: await self._service.restart()
[docs] async def wait_until_stopped(self) -> None: await self._service.wait_until_stopped()
[docs] def set_shutdown(self) -> None: self._service.set_shutdown()
@property def started(self) -> bool: return self._service.started @property def crashed(self) -> bool: return self._service.crashed @property def should_stop(self) -> bool: return self._service.should_stop @property def state(self) -> str: return self._service.state @property def label(self) -> str: return type(self).__name__ @property def shortlabel(self) -> str: return type(self).__name__ @property def beacon(self) -> NodeT: return self._service.beacon @beacon.setter def beacon(self, beacon: NodeT) -> None: self._service.beacon = beacon @property def crash_reason(self) -> Optional[BaseException]: return self._service.crash_reason @crash_reason.setter def crash_reason(self, reason: Optional[BaseException]) -> None: self._service.crash_reason = reason