diff --git a/gracedb/superevents/api/views.py b/gracedb/superevents/api/views.py index 77854a941f69e0aaf9e69d706f89ea49ab0155fc..c284d448edfdb547eac37e782039afe5b38c8c5e 100644 --- a/gracedb/superevents/api/views.py +++ b/gracedb/superevents/api/views.py @@ -127,11 +127,20 @@ class SupereventEventViewSet(mixins.ListModelMixin, return obj + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + try: + self.perform_destroy(instance) + except Superevent.PreferredEventRemovalError as e: + return Response(e.__str__(), status=status.HTTP_400_BAD_REQUEST) + + return Response(status=status.HTTP_204_NO_CONTENT) + def perform_destroy(self, instance): - remove_event_from_superevent(instance.superevent, instance, - self.request.user, add_superevent_log=True, - add_event_log=True, issue_superevent_alert=True, - issue_event_alert=True) + remove_event_from_superevent(instance.superevent, instance, + self.request.user, add_superevent_log=True, + add_event_log=True, issue_superevent_alert=True, + issue_event_alert=True) class SupereventLabelViewSet(GetParentSupereventMixin, @@ -151,10 +160,18 @@ class SupereventLabelViewSet(GetParentSupereventMixin, def destroy(self, request, *args, **kwargs): instance = self.get_object() - remove_label_from_superevent(instance, request.user, - add_log_message=True, issue_alert=True) + try: + self.perform_destroy(instance) + except Exception as e: + return Response(e.__str__(), + status=status.HTTP_500_INTERNAL_SERVER_ERROR) + return Response(status=status.HTTP_204_NO_CONTENT) + def perform_destroy(self, instance): + remove_label_from_superevent(instance, self.request.user, + add_log_message=True, issue_alert=True) + class SupereventLogViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, @@ -199,6 +216,16 @@ class SupereventLogTagViewSet(GetParentSupereventMixin, parent_log = self.get_parent_log() return parent_log.tags.all() + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + try: + self.perform_destroy(instance) + except Exception as e: + return Response(e.__str__(), + status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + return Response(status=status.HTTP_204_NO_CONTENT) + def perform_destroy(self, instance): parent_log = self.get_parent_log() remove_tag_from_log(parent_log, instance, self.request.user,