diff --git a/pyproject.toml b/pyproject.toml index 1f8b3f1..7c67e01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "sanic-rest" -version = "1.1.0" +version = "1.1.1" description = "Sanic Rest Framework with Google Cloud Datastore" authors = ["Joao Daher "] repository = "https://github.com/flamingo-run/sanic-rest" diff --git a/sanic_rest/views.py b/sanic_rest/views.py index 05e1726..b287f51 100644 --- a/sanic_rest/views.py +++ b/sanic_rest/views.py @@ -128,9 +128,17 @@ async def perform_options(self) -> PayloadType: class DetailView(ViewBase, abc.ABC): + def _parse_pk(self, pk: str): + pk_field_name = self.model.Meta.pk_field + pk_field_type = self.model.Meta.fields[self.model.Meta.pk_field] + try: + return pk_field_type(pk) + except ValueError: + raise exceptions.ValidationError(f"{pk_field_name} field must be {pk_field_type.__name__}") + async def get(self, request: Request, pk: str) -> HTTPResponse: try: - obj = self.model.documents.get(id=pk) + obj = self.perform_get(pk=self._parse_pk(pk=pk), query_filters={}) except DoesNotExist as e: raise exceptions.NotFoundError() from e @@ -157,7 +165,7 @@ async def patch(self, request: Request, pk: str) -> HTTPResponse: else: payload = request.json self.validate(data=payload, partial=True) - obj = await self.perform_update(pk=pk, data=payload, files=request.files) + obj = await self.perform_update(pk=self._parse_pk(pk=pk), data=payload, files=request.files) data = obj.serialize() return json(data, 200)