From dbd271f32d0d610f66db40283415ba9fcf515631 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Thu, 11 Jul 2019 08:56:30 -0500 Subject: [PATCH] api: remove non-existent label from event = 404 Trying to remove a label that was not associated with an event gave a 400 HTTP response. Fixed to be 404. It was already correct for superevents. --- gracedb/api/v1/events/views.py | 8 +++++--- gracedb/events/view_logic.py | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gracedb/api/v1/events/views.py b/gracedb/api/v1/events/views.py index f8ff46a5b..86d2c4b7c 100644 --- a/gracedb/api/v1/events/views.py +++ b/gracedb/api/v1/events/views.py @@ -40,7 +40,7 @@ from core.vfile import VersionedFile from events.buildVOEvent import buildVOEvent, VOEventBuilderException from events.forms import CreateEventForm from events.models import Event, Group, Search, Pipeline, EventLog, Tag, \ - Label, EMGroup, EMBBEventLog, EMSPECTRUM, VOEvent + Label, Labelling, EMGroup, EMBBEventLog, EMSPECTRUM, VOEvent from events.permission_utils import user_has_perm, filter_events_for_user, \ is_external, check_external_file_access from events.translator import handle_uploaded_data @@ -730,11 +730,13 @@ class EventLabel(InheritPermissionsAPIView): @event_and_auth_required def delete(self, request, event, label): + try: rv = delete_label(event, request, label) + except Labelling.DoesNotExist as e: + return Response(e.message, status=status.HTTP_404_NOT_FOUND) except (ValueError, Label.ProtectedLabelError) as e: - return Response(e.message, - status=status.HTTP_400_BAD_REQUEST) + return Response(e.message, status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/gracedb/events/view_logic.py b/gracedb/events/view_logic.py index 14c168c79..8987f65a5 100644 --- a/gracedb/events/view_logic.py +++ b/gracedb/events/view_logic.py @@ -240,9 +240,9 @@ def delete_label(event, request, labelName, can_remove_protected=False, # Next, check if the label is in the list of labels for the event. Throw out an # error if it isn't. There might be a more elegant way of doing this. - if label not in event.labels.all(): - d['warning'] = "No label '%s' associated with event %s" % (labelName, event.graceid) - raise ValueError("No label '%s' associated with event %s" % (labelName, event.graceid)) + if not event.labelling_set.filter(label__name=labelName).exists(): + d['warning'] = "No label '%s' associated with event %s" % (labelName, event.graceid) + raise Labelling.DoesNotExist("No label '%s' associated with event %s" % (labelName, event.graceid)) else: this_label = Labelling.objects.get( event = event, -- GitLab