From e05ee49e958a0809bb5cb0b525d71deb94ddc046 Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Sun, 1 Jul 2018 09:29:55 -0500
Subject: [PATCH] Adding serialized object to label alerts

Adding serialized label object to label creation and removal
alerts.  This may not be permanent, but some users want this
feature since the object contains a 'self' link which
they use to tell alerts from different servers apart.
---
 gracedb/alerts/old_alert.py        |  5 +++--
 gracedb/alerts/superevent_utils.py |  4 ++--
 gracedb/events/view_logic.py       | 17 +++++++++++++----
 gracedb/events/view_utils.py       | 10 +++++-----
 4 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/gracedb/alerts/old_alert.py b/gracedb/alerts/old_alert.py
index c08c7fbd1..74c7fee68 100644
--- a/gracedb/alerts/old_alert.py
+++ b/gracedb/alerts/old_alert.py
@@ -147,9 +147,10 @@ def issueAlertForUpdate(event, description, doxmpp, filename="", serialized_obje
     # XXX No emails or phone calls for this.  Argh.
 
 # The only kind of serialized object relevant for a Label is an event.
-def issueAlertForLabel(event, label, doxmpp, serialized_event=None, event_url=None):
+# False - why not just send the labelling object?
+def issueAlertForLabel(event, label, doxmpp, serialized_object=None, event_url=None):
     if doxmpp:
-        issueXMPPAlert(event, "", "label", label, serialized_event)
+        issueXMPPAlert(event, "", "label", label, serialized_object)
     # Email
     profileRecips = []
     phoneRecips = []
diff --git a/gracedb/alerts/superevent_utils.py b/gracedb/alerts/superevent_utils.py
index da8b9daf3..3050afcde 100644
--- a/gracedb/alerts/superevent_utils.py
+++ b/gracedb/alerts/superevent_utils.py
@@ -99,7 +99,7 @@ def issue_alert_for_superevent_label_creation(labelling, request=None):
     # Send alerts
     # NOTE: current alerts don't include an object (change this?)
     issue_alerts(labelling.superevent, alert_type="label", url=url,
-        description=description, serialized_object=None)
+        description=description, serialized_object=serialized_object)
 
 
 def issue_alert_for_superevent_label_removal(labelling, request=None):
@@ -112,7 +112,7 @@ def issue_alert_for_superevent_label_removal(labelling, request=None):
 
     # Send alerts
     issue_alerts(labelling.superevent, alert_type="update", url=url,
-        description=description, serialized_object=None)
+        description=description, serialized_object=serialized_object)
 
 
 def issue_alert_for_superevent_voevent(voevent, request=None):
diff --git a/gracedb/events/view_logic.py b/gracedb/events/view_logic.py
index 9e496d29f..dab48bc6e 100644
--- a/gracedb/events/view_logic.py
+++ b/gracedb/events/view_logic.py
@@ -12,7 +12,8 @@ from .models import EMBBEventLog, EMGroup
 from .models import EMObservation, EMFootprint
 from .translator import handle_uploaded_data
 from .view_utils import _saveUploadedFile
-from .view_utils import eventToDict, eventLogToDict, emObservationToDict
+from .view_utils import eventToDict, eventLogToDict, emObservationToDict, \
+    labelToDict
 from .permission_utils import assign_default_event_perms
 
 from alerts.old_alert import issueAlert, issueAlertForLabel, issueAlertForUpdate, \
@@ -214,8 +215,12 @@ def create_label(event, request, labelName, doAlert=True, doXMPP=True):
             logger.exception('Problem saving log message (%s)' % str(e))
             d['error'] = str(e)
 
+        # Serialize the labelling object
+        serialized_label = labelToDict(labelling)
+
         try:
-            issueAlertForLabel(event, label, doXMPP, event_url=event_url)
+            issueAlertForLabel(event, label, doXMPP, event_url=event_url,
+                serialized_object=serialized_label)
         except Exception as e:
             logger.exception('Problem issuing alert (%s)' % str(e))
             d['warning'] = "Problem issuing alert (%s)" % str(e)
@@ -258,11 +263,15 @@ def delete_label(event, request, labelName, doXMPP=True):
             logger.exception('Problem saving log message (%s)' % str(e))
             d['error'] = str(e)
 
+        # Serialize deleted labelling object
+        serialized_label = labelToDict(this_label)
+
         # send an XMPP alert, no email or phone alerts
         try:
             if doXMPP:
-                issueXMPPAlert(event, "", alert_type="label",
-                    description="Label {0} removed".format(label.name))
+                issueXMPPAlert(event, "", alert_type="update",
+                    description="Label {0} removed".format(label.name),
+                    serialized_object=serialized_label)
         except Exception as e:
             logger.exception('Problem issuing alert (%s)' % str(e))
             d['warning'] = "Problem issuing alert (%s)" % str(e)
diff --git a/gracedb/events/view_utils.py b/gracedb/events/view_utils.py
index 0ec4b92c4..4e2b9a5f1 100644
--- a/gracedb/events/view_utils.py
+++ b/gracedb/events/view_utils.py
@@ -416,14 +416,14 @@ def eventLogToDict(log, request=None):
            }
 
 
-def labelToDict(label, request=None):
+def labelToDict(labelling, request=None):
     return { 
-            "name" : label.label.name,
-            "creator" : label.creator.username,
-            "created" : label.created.strftime(
+            "name" : labelling.label.name,
+            "creator" : labelling.creator.username,
+            "created" : labelling.created.strftime(
                       settings.GRACE_STRFTIME_FORMAT),
             "self" : reverse("labels",
-                args=[label.event.graceid(), label.label.name],
+                args=[labelling.event.graceid(), labelling.label.name],
                 request=request),
            }
 
-- 
GitLab