diff --git a/gracedb/api.py b/gracedb/api.py index 04495148f4d7425ce1c956da95cf4995435aac7e..bb9e71605874b63e60432e2c263a92a9325d0aed 100644 --- a/gracedb/api.py +++ b/gracedb/api.py @@ -16,7 +16,7 @@ from gracedb.models import Event, Group, Search, Pipeline, EventLog, Tag from gracedb.models import EMGroup, EMBBEventLog, EMSPECTRUM #from gracedb.models import EMObservation, EMFootprint from gracedb.models import VOEvent -from view_logic import create_label, get_performance_info +from view_logic import create_label, get_performance_info, delete_label from view_logic import _createEventFromForm from view_logic import create_eel from view_logic import create_emobservation @@ -739,7 +739,15 @@ class EventLabel(APIView): return Response(rv, status=status.HTTP_201_CREATED) def delete(self, request, graceid, label): - return Response("Not Implemented", status=status.HTTP_501_NOT_IMPLEMENTED) + #return Response("Not Implemented", status=status.HTTP_501_NOT_IMPLEMENTED) + try: + event = Event.getByGraceid(graceid) + rv = delete_label(event, request, label) + except ValueError, e: + return Response(e.message, + status=status.HTTP_400_BAD_REQUEST) + + return Response(rv, status=status.HTTP_201_CREATED) #================================================================== # EventLog diff --git a/gracedb/view_logic.py b/gracedb/view_logic.py index 863e8eb2a8196e834df34953629674b6bfc8d320..cbe86ca3cfe5be7697245b968d321c821c84b39c 100644 --- a/gracedb/view_logic.py +++ b/gracedb/view_logic.py @@ -188,6 +188,43 @@ def create_label(event, request, labelName, doAlert=True, doXMPP=True): # XXX Strange return value. Just warnings. Can really be ignored, I think. return json.dumps(d) +def delete_label(event, request, labelName): + # This function deletes a label. It starts out a lot like the create + # label function. First get user and event info: + creator = request.user + event_url = request.build_absolute_uri(reverse('view', args=[event.graceid()])) + d = {} + + # First,throw out an error if the label doesn't exist in the list of available + # labels. + try: + label = Label.objects.filter(name=labelName)[0] + except IndexError: + raise ValueError("No such Label '%s'" % labelName) + + # Next, check if the label is in the list of labels for the event. Throw out an + # error if it isn't. There might be a more elegant way of doing this. + if label not in event.labels.all(): + d['warning'] = "No label '%s' associated with event %s" % (labelName, event.graceid()) + raise ValueError( "No label '%s' associated with event %s" % (labelName, event.graceid())) + else: + this_label = Labelling.objects.get( + event = event, + label = label, + ) + this_label.delete() + message = "Deleted label: %s" % label.name + log = EventLog(event=event, issuer=creator, comment=message) + try: + log.save() + except Exception as e: + # XXX This looks a bit odd to me. (<-- retained this message) + logger.exception('Problem saving log message') + d['error'] = str(e) + + # Return the json for some reason. I don't do any alert stuff in here. + return json.dumps(d) + def _createLog(request, graceid, comment, uploadedFile=None): response = HttpResponse(mimetype='application/json') rdict = {} diff --git a/gracedb/view_utils.py b/gracedb/view_utils.py index 9c06004b3ba51264479d8b0020592e0fef30e455..796133e81e99ac5b7b44b30cf8c75b3ecc4ae04e 100644 --- a/gracedb/view_utils.py +++ b/gracedb/view_utils.py @@ -302,6 +302,14 @@ def eventToDict(event, columns=None, request=None): si_set = event.singleinspiral_set.all() if si_set.count(): rv['extra_attributes']['SingleInspiral'] = [ singleInspiralToDict(si) for si in si_set ] + elif request and request.user and is_external(request.user): + # Expose SingleInspiral times only for external users. + ext_keys = ['ifo','end_time','end_time_ns'] + si_set = event.singleinspiral_set.all() + if si_set.count(): + SingleInspiral_list = [ singleInspiralToDict(si) for si in si_set ] + for i, si in enumerate(SingleInspiral_list): + rv['extra_attributes']['SingleInspiral'] = { k: si[k] for k in ext_keys } rv['links'] = { "neighbors" : reverse("neighbors", args=[graceid], request=request), diff --git a/gracedb/views.py b/gracedb/views.py index 066ddcfd6b08f65f175da34ade9d49847db537be..9cc4f029f6fb662250f71d5d091ce12b65c46c96 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -22,7 +22,7 @@ from view_logic import get_performance_info from view_logic import get_lvem_perm_status from view_logic import create_eel from view_logic import create_emobservation -from view_logic import create_label +from view_logic import create_label, delete_label from view_utils import assembleLigoLw, get_file from view_utils import flexigridResponse, jqgridResponse from view_utils import get_recent_events_string