From e4a8b0995732804002ffdf0e3324e16ed1e43956 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Wed, 6 Mar 2019 09:39:46 -0600 Subject: [PATCH] Add state change checking to update alerts Add capability for passing kwargs to AlertIssuer classes' issue_alerts() method. We take advantage of this in the update alerts for checking for FAR changes and NSCAND state changes. --- gracedb/alerts/issuers/base.py | 4 ++-- gracedb/alerts/issuers/events.py | 8 ++++---- gracedb/alerts/issuers/superevents.py | 8 ++++---- gracedb/api/v1/events/views.py | 7 ++++++- gracedb/superevents/utils.py | 11 ++++++++++- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gracedb/alerts/issuers/base.py b/gracedb/alerts/issuers/base.py index 125d5b3a9..740eac0d1 100644 --- a/gracedb/alerts/issuers/base.py +++ b/gracedb/alerts/issuers/base.py @@ -5,7 +5,7 @@ class AlertIssuer(object): serializer_class = None alert_types = None - def __init__(self, obj, alert_type, *args, **kwargs): + def __init__(self, obj, alert_type): # Check alert type if alert_type not in self.alert_types: raise ValueError('alert_type should be in {0}'.format( @@ -18,7 +18,7 @@ class AlertIssuer(object): def serialize_obj(self): return self.serializer_class(self.obj).data - def issue_alerts(self): + def issue_alerts(self, **kwargs): # Should be overridden in derived classes return NotImplemented diff --git a/gracedb/alerts/issuers/events.py b/gracedb/alerts/issuers/events.py index 87e5610df..d3caf1b1a 100644 --- a/gracedb/alerts/issuers/events.py +++ b/gracedb/alerts/issuers/events.py @@ -38,9 +38,9 @@ class AlertIssuerWithParentEvent(AlertIssuerWithParentObject): # Make sure we have the event "subclass" return self.obj.event.get_subclass_or_self() - def issue_alerts(self): + def issue_alerts(self, **kwargs): issue_alerts(self.get_parent_obj(), self.alert_type, - self.serialize_obj(), self.serialize_parent()) + self.serialize_obj(), self.serialize_parent(), **kwargs) class EventAlertIssuer(AlertIssuerWithParentEvent): @@ -66,10 +66,10 @@ class EventLabelAlertIssuer(AlertIssuerWithParentEvent): serializer_class = staticmethod(labelToDict) alert_types = ['label_added', 'label_removed'] - def issue_alerts(self): + def issue_alerts(self, **kwargs): issue_alerts(self.get_parent_obj(), self.alert_type, self.serialize_obj(), self.serialize_parent(), - label=self.obj.label) + label=self.obj.label, **kwargs) class EventVOEventAlertIssuer(AlertIssuerWithParentEvent): diff --git a/gracedb/alerts/issuers/superevents.py b/gracedb/alerts/issuers/superevents.py index 861390be1..4055e30d5 100644 --- a/gracedb/alerts/issuers/superevents.py +++ b/gracedb/alerts/issuers/superevents.py @@ -20,9 +20,9 @@ class AlertIssuerWithParentSuperevent(AlertIssuerWithParentObject): self.obj.__class__.__name__)) return self.obj.superevent - def issue_alerts(self): + def issue_alerts(self, **kwargs): issue_alerts(self.get_parent_obj(), self.alert_type, - self.serialize_obj(), self.serialize_parent()) + self.serialize_obj(), self.serialize_parent(), **kwargs) class SupereventAlertIssuer(AlertIssuerWithParentSuperevent): @@ -43,10 +43,10 @@ class SupereventLabelAlertIssuer(AlertIssuerWithParentSuperevent): serializer_class = SupereventLabelSerializer alert_types = ['label_added', 'label_removed'] - def issue_alerts(self): + def issue_alerts(self, **kwargs): issue_alerts(self.get_parent_obj(), self.alert_type, self.serialize_obj(), self.serialize_parent(), - label=self.obj.label) + label=self.obj.label, **kwargs) class SupereventVOEventAlertIssuer(AlertIssuerWithParentSuperevent): diff --git a/gracedb/api/v1/events/views.py b/gracedb/api/v1/events/views.py index 178ef7f09..e21c174ef 100644 --- a/gracedb/api/v1/events/views.py +++ b/gracedb/api/v1/events/views.py @@ -576,6 +576,10 @@ class EventDetail(InheritPermissionsAPIView): except Exception, e: return Response(str(e)) + # Compile far and nscand for alerts + old_far = event.far + old_nscand = event.is_ns_candidate() + # messages = [] # if event.group.name != request.data['group']: # messages += [ @@ -619,7 +623,8 @@ class EventDetail(InheritPermissionsAPIView): event.save() # Issue alert - EventAlertIssuer(event, alert_type='update').issue_alerts() + EventAlertIssuer(event, alert_type='update').issue_alerts( + old_far=old_far, old_nscand=old_nscand) return Response(status=status.HTTP_202_ACCEPTED) diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py index b7aeec51b..8ef17da3b 100644 --- a/gracedb/superevents/utils.py +++ b/gracedb/superevents/utils.py @@ -142,6 +142,7 @@ def update_superevent(superevent, updater, add_log_message=True, # Write a log message # 'if' statement to handle patch requests which don't change entire object + superevent_alert_kwargs = {} if add_log_message: updates = ["{name}: {old} -> {new}".format(name=k, old=old_params[k], new=new_params[k]) for k in new_params.keys() @@ -177,9 +178,17 @@ def update_superevent(superevent, updater, add_log_message=True, EventAlertIssuer(new_params['preferred_event'], alert_type='selected_as_preferred').issue_alerts() + # If preferred event has changed, compile kwargs for superevent + # alert + superevent_alert_kwargs['old_far'] = \ + old_params['preferred_event'].far + superevent_alert_kwargs['old_nscand'] = \ + old_params['preferred_event'].is_ns_candidate() + # Superevent alerts if issue_alert: - SupereventAlertIssuer(superevent, alert_type='update').issue_alerts() + SupereventAlertIssuer(superevent, alert_type='update').issue_alerts( + **superevent_alert_kwargs) return superevent -- GitLab