400 on invalid host filter query instead of 500

This commit is contained in:
Chris Meyers 2017-04-12 15:49:33 -04:00
parent 1a2cbaf5e1
commit bd1f8b088f
2 changed files with 13 additions and 7 deletions

View File

@ -1710,6 +1710,13 @@ class HostList(ListCreateAPIView):
qs = qs.filter(filter_q)
return qs
def list(self, *args, **kwargs):
try:
queryset = self.get_queryset()
except Exception as e:
return Response(dict(error=_(unicode(e))), status=status.HTTP_400_BAD_REQUEST)
return Response(dict(results=self.serializer_class(queryset, many=True).data))
class HostDetail(RetrieveUpdateDestroyAPIView):

View File

@ -488,13 +488,8 @@ class DynamicFilterField(models.TextField):
* handle keys with " via: a.\"b.c="yeah"
* handle key with __ in it
* add not support
* transform [] into contains via: a.b.c[].d[].e.f[]="blah"
* handle optional value quoted: a.b.c=""
'''
filter_string_raw = filter_string
filter_string = unicode(filter_string)
atom = CharsNotIn(unicode_spaces_other)
@ -511,7 +506,11 @@ class DynamicFilterField(models.TextField):
("or", 2, opAssoc.LEFT, cls.BoolOr),
])
res = boolExpr.parseString('(' + filter_string + ')')
try:
res = boolExpr.parseString('(' + filter_string + ')')
except:
raise RuntimeError(u"Invalid query %s" % filter_string_raw)
if len(res) > 0:
return res[0].result