Skip to content

Commit

Permalink
Fix retrieving objects with wrong PK data type
Browse files Browse the repository at this point in the history
  • Loading branch information
joaodaher committed Mar 8, 2021
1 parent 7ce51e9 commit 9d16764
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>"]
repository = "https://github.com/flamingo-run/sanic-rest"
Expand Down
12 changes: 10 additions & 2 deletions sanic_rest/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
Expand Down

0 comments on commit 9d16764

Please sign in to comment.