Nicely fix search query being always a string
This commit is contained in:
parent
bcf59de383
commit
048a03801b
|
@ -0,0 +1,12 @@
|
||||||
|
from teal.query import NestedQueryFlaskParser
|
||||||
|
from webargs.flaskparser import FlaskParser
|
||||||
|
|
||||||
|
|
||||||
|
class SearchQueryParser(NestedQueryFlaskParser):
|
||||||
|
|
||||||
|
def parse_querystring(self, req, name, field):
|
||||||
|
if name == 'search':
|
||||||
|
v = FlaskParser.parse_querystring(self, req, name, field)
|
||||||
|
else:
|
||||||
|
v = super().parse_querystring(req, name, field)
|
||||||
|
return v
|
|
@ -11,6 +11,7 @@ from teal.resource import View
|
||||||
|
|
||||||
from ereuse_devicehub import auth
|
from ereuse_devicehub import auth
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
|
from ereuse_devicehub.query import SearchQueryParser
|
||||||
from ereuse_devicehub.resources import search
|
from ereuse_devicehub.resources import search
|
||||||
from ereuse_devicehub.resources.device.models import Device, Manufacturer
|
from ereuse_devicehub.resources.device.models import Device, Manufacturer
|
||||||
from ereuse_devicehub.resources.device.search import DeviceSearch
|
from ereuse_devicehub.resources.device.search import DeviceSearch
|
||||||
|
@ -63,8 +64,10 @@ class Sorting(query.Sort):
|
||||||
|
|
||||||
|
|
||||||
class DeviceView(View):
|
class DeviceView(View):
|
||||||
|
QUERY_PARSER = SearchQueryParser()
|
||||||
|
|
||||||
class FindArgs(marshmallow.Schema):
|
class FindArgs(marshmallow.Schema):
|
||||||
search = f.Raw()
|
search = f.Str()
|
||||||
filter = f.Nested(Filters, missing=[])
|
filter = f.Nested(Filters, missing=[])
|
||||||
sort = f.Nested(Sorting, missing=[Device.id.asc()])
|
sort = f.Nested(Sorting, missing=[Device.id.asc()])
|
||||||
page = f.Integer(validate=v.Range(min=1), missing=1)
|
page = f.Integer(validate=v.Range(min=1), missing=1)
|
||||||
|
@ -90,11 +93,6 @@ class DeviceView(View):
|
||||||
args = self.QUERY_PARSER.parse(self.find_args,
|
args = self.QUERY_PARSER.parse(self.find_args,
|
||||||
request,
|
request,
|
||||||
locations=('querystring',))
|
locations=('querystring',))
|
||||||
# todo not-nice way of de-parsing what webargs parser
|
|
||||||
# does when sees that an argument is like an int, etc
|
|
||||||
# when solving this, change too the Query.search to Str
|
|
||||||
if args.get('search', False):
|
|
||||||
args['search'] = str(args['search'])
|
|
||||||
response = self.find(args)
|
response = self.find(args)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
Reference in New Issue