Skip to content
Snippets Groups Projects
Commit 2deadc33 authored by Branson Stephens's avatar Branson Stephens
Browse files

deleted everything related to slots, made migration

parent b9b99bdc
No related branches found
No related tags found
No related merge requests found
from models import Event, EventLog, User, Group
from models import Label, Labelling, Slot, Tag
from models import Label, Labelling, Tag
from django.contrib import admin
class EventAdmin(admin.ModelAdmin):
......@@ -30,9 +30,6 @@ class LabellingAdmin(admin.ModelAdmin):
list_display = [ 'event', 'label', 'creator' ]
search_fields = [ 'event__id', 'label__name', 'creator__name' ]
class SlotAdmin(admin.ModelAdmin):
list_display = [ 'event', 'name', 'value' ]
class TagAdmin(admin.ModelAdmin):
list_display = [ 'name', 'displayName' ]
filter_vertical = [ 'eventlogs' ]
......@@ -43,5 +40,4 @@ admin.site.register(User, UserAdmin)
admin.site.register(Group)
admin.site.register(Label, LabelAdmin)
admin.site.register(Labelling, LabellingAdmin)
admin.site.register(Slot, SlotAdmin)
admin.site.register(Tag, TagAdmin)
......@@ -8,7 +8,7 @@ from django.conf import settings
import json
from gracedb.models import Event, Group, EventLog, Slot, Tag
from gracedb.models import Event, Group, EventLog, Tag
from gracedb.views import create_label
from translator import handle_uploaded_data
......@@ -117,11 +117,6 @@ def eventToDict(event, columns=None, request=None):
"self" : reverse("event-detail", args=[graceid], request=request),
"tags" : reverse("eventtag-list", args=[graceid], request=request),
}
# XXX Jam the slots in here? Could just have a list of slot names instead of
# all these links. But the links might be useful??
rv['slots'] = {}
for slot in Slot.objects.filter(event=event).order_by('name'):
rv['slots'][slot.name] = reverse("slot", args=[graceid, slot.name], request=request)
return rv
......@@ -854,10 +849,6 @@ class GracedbRoot(APIView):
labels = labels.replace("G1200", "{graceid}")
labels = labels.replace("thelabel", "{label}")
slot = reverse("slot", args=["G1200", "slotname"], request=request)
slot = slot.replace("G1200", "{graceid}")
slot = slot.replace("slotname", "{slotname}")
taglist = reverse("eventlogtag-list", args=["G1200", "0"], request=request)
taglist = taglist.replace("G1200", "{graceid}")
taglist = taglist.replace("0", "{n}")
......@@ -875,7 +866,6 @@ class GracedbRoot(APIView):
"event-label-template" : labels,
"files-template" : files,
"filemeta-template" : filemeta,
"slot-template" : slot,
"tag-template" : tag,
"taglist-template" : taglist,
}
......@@ -1104,120 +1094,3 @@ class FileMeta(APIView):
permission_classes = (IsAuthenticated,)
pass
#==================================================================
# Slots
class EventSlot(APIView):
"""A slot associated with an event.
"""
# Get the value of a slot. This will be a filename.
def get(self, request, graceid, slotname):
try:
event = Event.getByGraceid(graceid)
except Event.DoesNotExist:
# XXX Real error message.
return Response("Event does not exist.",
status=status.HTTP_404_NOT_FOUND)
if not slotname:
return Response(dict([(s.name, s.value)
for s in Slot.objects.filter(event=event)]))
try:
slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
except:
# Okay, no slot yet. Probably want an error message.
# Try looking for files that contain the slot name.
return Response("No slot. Search based on slotname not implemented yet.",
status=status.HTTP_404_NOT_FOUND)
filename = slot.value
rv = {}
rv['value'] = filename
return Response(rv)
# Create a slot. The slot's value will be a filename.
# This file is assumed to have already been uploaded.
def put(self, request, graceid, slotname):
try:
event = Event.getByGraceid(graceid)
except Event.DoesNotExist:
# XXX Real error message.
return Response("Event does not exist.",
status=status.HTTP_404_NOT_FOUND)
filename = request.DATA.get('filename')
# Interestingly, the None object seems to be converted to a string
# when encoded in the HTTP request body. Hence the 'None' string
# below. If somebody intentionally named a file 'None', then
# they deserve to get this error message.
if filename=='' or filename=='None' or filename==None:
return Response("Please submit a filename or upload a file.",
status=status.HTTP_400_BAD_REQUEST)
# UGLY hack to deal with /private vs /general dirs
general = False
tmpFilename = filename
if filename.startswith("general/"):
tmpFilename = filename[len("general/"):]
general = True
filepath = os.path.join(event.datadir(general), tmpFilename)
# Check for existence of the file.
if not os.path.exists(filepath):
return Response("No slot created because file does not exist",
status=status.HTTP_404_NOT_FOUND)
# Check for existence of the slot. If it exists, simply update the
# existing slot.
try:
slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
slot.value = filename
slot.save()
# Create a log entry to document the slot update.
msg = "Updated slot %s with file " % slotname
logentry = EventLog(event=event,
issuer=request.ligouser,
filename=tmpFilename,
comment=msg)
logentry.save()
except:
# Create the slot.
slot = Slot(event=event,name=slotname,value=filename)
slot.save()
# Create a log entry to document the slot creation.
msg = "Created slot %s with file " % slotname
logentry = EventLog(event=event,
issuer=request.ligouser,
filename=tmpFilename,
comment=msg)
logentry.save()
return Response("Slot created or updated.",status=status.HTTP_201_CREATED)
# Delete a slot.
def delete(self, request, graceid, slotname):
try:
event = Event.getByGraceid(graceid)
except Event.DoesNotExist:
# XXX Real error message.
return Response("Event does not exist.",
status=status.HTTP_404_NOT_FOUND)
# Gotta find the poor devil before we can delete him.
try:
slot = Slot.objects.filter(event=event).filter(name=slotname)[0]
except:
# Okay, no slot yet. Probably want an error message.
# Try looking for files that contain the slot name.
return Response("No such slot.",
status=status.HTTP_404_NOT_FOUND)
slot.delete()
# Create a log entry to document the slot destruction.
msg = "Deleted slot %s " % slotname
logentry = EventLog(event=event,
issuer=request.ligouser,
comment=msg)
logentry.save()
return Response("Slot deleted.",status=status.HTTP_200_OK)
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Removing unique constraint on 'Slot', fields ['event', 'name']
db.delete_unique('gracedb_slot', ['event_id', 'name'])
# Deleting model 'Slot'
db.delete_table('gracedb_slot')
def backwards(self, orm):
# Adding model 'Slot'
db.create_table('gracedb_slot', (
('value', self.gf('django.db.models.fields.CharField')(max_length=100)),
('event', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['gracedb.Event'])),
('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal('gracedb', ['Slot'])
# Adding unique constraint on 'Slot', fields ['event', 'name']
db.create_unique('gracedb_slot', ['event_id', 'name'])
models = {
'gracedb.approval': {
'Meta': {'object_name': 'Approval'},
'approvedEvent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
'approver': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
'approvingCollaboration': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
'gracedb.coincinspiralevent': {
'Meta': {'ordering': "['-id']", 'object_name': 'CoincInspiralEvent', '_ormbases': ['gracedb.Event']},
'combined_far': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'end_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'end_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'event_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['gracedb.Event']", 'unique': 'True', 'primary_key': 'True'}),
'false_alarm_rate': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'ifos': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
'mass': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'mchirp': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'minimum_duration': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'snr': ('django.db.models.fields.FloatField', [], {'null': 'True'})
},
'gracedb.event': {
'Meta': {'ordering': "['-id']", 'object_name': 'Event'},
'analysisType': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'far': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'gpstime': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'instruments': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
'labels': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.Label']", 'through': "orm['gracedb.Labelling']", 'symmetrical': 'False'}),
'likelihood': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'nevents': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'submitter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
'uid': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'})
},
'gracedb.eventlog': {
'Meta': {'ordering': "['-created']", 'object_name': 'EventLog'},
'comment': ('django.db.models.fields.TextField', [], {}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
'filename': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'issuer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"})
},
'gracedb.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'managers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.User']", 'symmetrical': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
'gracedb.label': {
'Meta': {'object_name': 'Label'},
'defaultColor': ('django.db.models.fields.CharField', [], {'default': "'black'", 'max_length': '20'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '20'})
},
'gracedb.labelling': {
'Meta': {'object_name': 'Labelling'},
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.User']"}),
'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Event']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'label': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['gracedb.Label']"})
},
'gracedb.multiburstevent': {
'Meta': {'ordering': "['-id']", 'object_name': 'MultiBurstEvent', '_ormbases': ['gracedb.Event']},
'amplitude': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'bandwidth': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'central_freq': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'confidence': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'duration': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'event_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['gracedb.Event']", 'unique': 'True', 'primary_key': 'True'}),
'false_alarm_rate': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'ifos': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20'}),
'ligo_angle': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'ligo_angle_sig': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'ligo_axis_dec': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'ligo_axis_ra': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'peak_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'peak_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'snr': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
'start_time': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'start_time_ns': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'})
},
'gracedb.tag': {
'Meta': {'object_name': 'Tag'},
'displayName': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
'eventlogs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['gracedb.EventLog']", 'symmetrical': 'False'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'gracedb.user': {
'Meta': {'ordering': "['name']", 'object_name': 'User'},
'dn': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'principal': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'unixid': ('django.db.models.fields.CharField', [], {'max_length': '25'})
}
}
complete_apps = ['gracedb']
\ No newline at end of file
......@@ -271,7 +271,7 @@ class MultiBurstEvent(Event):
## Tags (user-defined log message attributes)
class Tag(models.Model):
"""Slot Model"""
"""Tag Model"""
# XXX Does the tag need to have a submitter column?
# No, because creating a tag will generate a log message.
# For the same reason, a timstamp is not necessary.
......@@ -291,23 +291,4 @@ class Tag(models.Model):
# # set of log messages in the event with the set of log
# # messages in the tag.
# eventlist = [log.event for log in self.eventlogs.all()]
# return list(set(eventlist))
## XXX Get rid of the slots. Probably.
class Slot(models.Model):
"""Slot Model"""
# Does the slot need to have a submitter column?
class Meta:
unique_together = (('event', 'name'))
event = models.ForeignKey(Event)
name = models.CharField(max_length=100)
value = models.CharField(max_length=100)
# In case the slot value is not a filename, this will just return None.
def fileurl(self):
if self.value:
return reverse('file', args=[self.event.graceid(), self.value])
else:
return None
from django import template
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe
from ..models import Slot, EventLog
register = template.Library()
@register.filter("slot")
def slot(event,name=None):
if event is None:
return None
try:
if name:
return Slot.objects.filter(event=event).filter(name__exact=name)[0]
else:
return Slot.objects.filter(event=event)
except:
# Either there is no such slot or something went wrong.
# In either case, we want the template to just ignore it.
return None
......@@ -9,7 +9,6 @@ from gracedb.api import TagList
# from gracedb.api import TagDetail
from gracedb.api import EventTagList, EventTagDetail
from gracedb.api import EventLogTagList, EventLogTagDetail
from gracedb.api import EventSlot
from gracedb.api import Files, FileMeta
from gracedb.api import EventNeighbors, EventLabel
......@@ -59,11 +58,6 @@ urlpatterns = patterns('gracedb.api',
url (r'^events/(?P<graceid>\w[\d]+)/labels/(?P<label>.+)?$',
EventLabel.as_view(), name="labels"),
# Event Slots
# events/{graceid}/slot/[{slotname}]
url (r'^events/(?P<graceid>[GEHT]\d+)/slot/(?P<slotname>.+)?$',
EventSlot.as_view(), name="slot"),
# Event Neighbors
# events/{graceid}/neighbors/[?delta=(N|(N,N))]
url (r'^events/(?P<graceid>\w[\d]+)/neighbors/$',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment