diff --git a/gracedb/superevents/models.py b/gracedb/superevents/models.py index 2b6098a95b04d018d794f97ef5a5fee36b03212e..a3477ca245f7f90318ab332779662717f357d8ac 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 36152d4a1bbe51dd89611bceade7df3ff84dbe5b..16777701f69413be317acff809c551a55020cda0 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