api_gateway.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from typing import Optional
  2. import inject
  3. from clean_python import Id
  4. from clean_python import Json
  5. from .. import SyncGateway
  6. from .api_provider import SyncApiProvider
  7. __all__ = ["SyncApiGateway"]
  8. class SyncApiGateway(SyncGateway):
  9. path: str
  10. def __init__(self, provider_override: Optional[SyncApiProvider] = None):
  11. self.provider_override = provider_override
  12. def __init_subclass__(cls, path: str) -> None:
  13. assert not path.startswith("/")
  14. assert "{id}" in path
  15. cls.path = path
  16. super().__init_subclass__()
  17. @property
  18. def provider(self) -> SyncApiProvider:
  19. return self.provider_override or inject.instance(SyncApiProvider)
  20. def get(self, id: Id) -> Optional[Json]:
  21. return self.provider.request("GET", self.path.format(id=id))
  22. def add(self, item: Json) -> Json:
  23. result = self.provider.request("POST", self.path.format(id=""), json=item)
  24. assert result is not None
  25. return result
  26. def remove(self, id: Id) -> bool:
  27. return self.provider.request("DELETE", self.path.format(id=id)) is not None