Skip to content
Snippets Groups Projects
Commit 1e0130de authored by Alexander Pace's avatar Alexander Pace
Browse files

catch query KeyError and return an informative message to the user

parent 9781df83
No related branches found
No related tags found
1 merge request!158catch query KeyError and return an informative message to the user
Pipeline #545659 passed
......@@ -6,6 +6,7 @@ from django.http import HttpResponseBadRequest
from rest_framework import filters, exceptions
from search.forms import se_gpstime_parseerror
from search.query.labels import filter_for_labels
from search.query.superevents import parseSupereventQuery
......@@ -40,7 +41,8 @@ class SupereventSearchFilter(filters.SearchFilter):
qs = filter_for_labels(qs, query).distinct()
except ParseException as e:
raise exceptions.ParseError('Invalid query')
except KeyError as e:
raise exceptions.ParseError(se_gpstime_parseerror(e))
return qs
......
......@@ -21,6 +21,18 @@ logger = logging.getLogger(__name__)
htmlEntityStar = "★"
errorMarker = '<span style="color:red;">'+htmlEntityStar+'</span>'
# Helpful status messages:
created_vs_t0 = 'Invalid query. Hint: date queries on the created: field take the form YYYY-MM-DD .. ' \
'YYYY-MM-DD. Date queries with gpstime are supported using the t_0: field'
# Helper function to capture superevent created vs t_0 gpstime queries
# and return it to the user:
def se_gpstime_parseerror(err):
if "ParseResults" in str(err) and 'miltime' in str(err):
return created_vs_t0
else:
return err
class MainSearchForm(forms.Form):
QUERY_TYPE_EVENT = 'E'
......@@ -85,6 +97,8 @@ class MainSearchForm(forms.Form):
err = "Error: invalid query. (" + escape(e.pstr[:e.loc]) + \
errorMarker + escape(e.pstr[e.loc:]) + ")"
raise forms.ValidationError({'query': mark_safe(err)})
except KeyError as e:
raise forms.ValidationError(se_gpstime_parseerror(e))
except Exception as e:
# What could this be and how can we handle it better? XXX
logger.error('{t}: {e}'.format(t=str(type(e)), e=str(e)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment