|
@@ -4,6 +4,7 @@ import six
|
|
|
|
|
|
from datetime import timedelta
|
|
|
from django.utils import timezone
|
|
|
+from rest_framework.exceptions import ParseError
|
|
|
from rest_framework.response import Response
|
|
|
from functools import partial
|
|
|
|
|
@@ -11,7 +12,7 @@ from functools import partial
|
|
|
from sentry import eventstore
|
|
|
from sentry.api.base import DocSection, EnvironmentMixin
|
|
|
from sentry.api.bases import GroupEndpoint
|
|
|
-from sentry.api.event_search import get_filter
|
|
|
+from sentry.api.event_search import get_filter, InvalidSearchQuery
|
|
|
from sentry.api.exceptions import ResourceDoesNotExist
|
|
|
from sentry.api.helpers.environments import get_environments
|
|
|
from sentry.api.helpers.events import get_direct_hit_response
|
|
@@ -67,12 +68,12 @@ class GroupEventsEndpoint(GroupEndpoint, EnvironmentMixin):
|
|
|
try:
|
|
|
start, end = get_date_range_from_params(request.GET, optional=True)
|
|
|
except InvalidParams as e:
|
|
|
- return Response({"detail": six.text_type(e)}, status=400)
|
|
|
+ raise ParseError(detail=six.text_type(e))
|
|
|
|
|
|
try:
|
|
|
return self._get_events_snuba(request, group, environments, query, tags, start, end)
|
|
|
except GroupEventsError as exc:
|
|
|
- return Response({"detail": six.text_type(exc)}, status=400)
|
|
|
+ raise ParseError(detail=six.text_type(exc))
|
|
|
|
|
|
def _get_events_snuba(self, request, group, environments, query, tags, start, end):
|
|
|
default_end = timezone.now()
|
|
@@ -91,11 +92,14 @@ class GroupEventsEndpoint(GroupEndpoint, EnvironmentMixin):
|
|
|
params["environment"] = [env.name for env in environments]
|
|
|
|
|
|
full = request.GET.get("full", False)
|
|
|
- snuba_filter = get_filter(request.GET.get("query", None), params)
|
|
|
+ try:
|
|
|
+ snuba_filter = get_filter(request.GET.get("query", None), params)
|
|
|
+ except InvalidSearchQuery as e:
|
|
|
+ raise ParseError(detail=six.text_type(e))
|
|
|
+
|
|
|
snuba_filter.conditions.append(["event.type", "!=", "transaction"])
|
|
|
|
|
|
data_fn = partial(eventstore.get_events, referrer="api.group-events", filter=snuba_filter)
|
|
|
-
|
|
|
serializer = EventSerializer() if full else SimpleEventSerializer()
|
|
|
return self.paginate(
|
|
|
request=request,
|