api_gateway.py 1.1 KB

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