From 11a0b0a071f6f3791010fda788d417634b743ed2 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Thu, 7 Jun 2018 15:39:36 -0500 Subject: [PATCH] Bugfix for removing an event from a superevent Prevent users from removing a superevent's preferred event. They will have to update the superevent to set a new preferred event instead, then remove the event. --- gracedb/superevents/models.py | 3 +++ gracedb/superevents/utils.py | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gracedb/superevents/models.py b/gracedb/superevents/models.py index 2b6098a95..a3477ca24 100644 --- a/gracedb/superevents/models.py +++ b/gracedb/superevents/models.py @@ -307,6 +307,9 @@ class Superevent(CleanSaveModel, ModelToDictMixin, AutoIncrementModel): def __unicode__(self): return self.superevent_id + class PreferredEventRemovalError(Exception): + # To be raised when an attempt is made to remove the preferred event. + pass class Log(CleanSaveModel, LogBase, AutoIncrementModel): """ diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py index 36152d4a1..16777701f 100644 --- a/gracedb/superevents/utils.py +++ b/gracedb/superevents/utils.py @@ -281,16 +281,18 @@ def add_event_to_superevent(superevent, event, user, add_event_log=True, def remove_event_from_superevent(superevent, event, user, add_event_log=True, add_superevent_log=True, issue_event_alert=True, issue_superevent_alert=True): + """ + This function should be within a try-except block to catch exceptions and + convert them to the appropriate response. + """ + # Throw error if this is the preferred event + if event == superevent.preferred_event: + raise Superevent.PreferredEventRemovalError("Can't remove a " + "superevent's preferred event without setting a new one.") # Remove event from superevent superevent.events.remove(event) - # Handle case where the event is also the preferred event for the - # superevent - if (hasattr(event, 'superevent_preferred_for') and - event.superevent_preferred_for == superevent): - superevent.preferred_event = None - # Create superevent log message to record event removal? if add_superevent_log: # Record event removal in superevent logs -- GitLab