Skip to content
Snippets Groups Projects

Python3

Merged Tanner Prestegard requested to merge python3 into master
1 file
+ 6
5
Compare changes
  • Side-by-side
  • Inline
+ 98
42
@@ -4,6 +4,8 @@ import numbers
from django.db import models, IntegrityError
from django.urls import reverse
from django.core.exceptions import ValidationError
from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from model_utils.managers import InheritanceManager
@@ -33,7 +35,11 @@ from django.conf import settings
import pytz
import calendar
from cStringIO import StringIO
try:
from StringIO import StringIO
except ImportError: # python >= 3
from io import StringIO
from hashlib import sha1
import shutil
@@ -50,25 +56,16 @@ SERVER_TZ = pytz.timezone(settings.TIME_ZONE)
#
schema_version = "1.1"
#class User(models.Model):
#name = models.CharField(max_length=100)
#email = models.EmailField()
#principal = models.CharField(max_length=100)
#dn = models.CharField(max_length=100)
#unixid = models.CharField(max_length=25)
#class Meta:
#ordering = ["name"]
#def __unicode__(self):
#return self.name
@python_2_unicode_compatible
class Group(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
def __str__(self):
return six.text_type(self.name)
@python_2_unicode_compatible
class Pipeline(models.Model):
PIPELINE_TYPE_EXTERNAL = 'E'
PIPELINE_TYPE_OTHER = 'O'
@@ -97,8 +94,8 @@ class Pipeline(models.Model):
('manage_pipeline', 'Can enable or disable pipeline'),
)
def __unicode__(self):
return self.name
def __str__(self):
return six.text_type(self.name)
class PipelineLog(models.Model):
@@ -115,16 +112,20 @@ class PipelineLog(models.Model):
choices=PIPELINE_LOG_ACTION_CHOICES)
@python_2_unicode_compatible
class Search(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
# XXX Need any additional fields? Like a PI email? Or perhaps even fk?
def __unicode__(self):
return self.name
def __str__(self):
return six.text_type(self.name)
# Label color will be used in CSS, see
# https://www.w3schools.com/colors/colors_names.asp for
# allowed color choices
@python_2_unicode_compatible
class Label(models.Model):
name = models.CharField(max_length=20, unique=True)
# XXX really, does this belong here? probably not.
@@ -137,8 +138,8 @@ class Label(models.Model):
# signoffs, for examples.
protected = models.BooleanField(default=False)
def __unicode__(self):
return self.name
def __str__(self):
return six.text_type(self.name)
class ProtectedLabelError(Exception):
# To be raised when an attempt is made to apply or remove a
@@ -153,6 +154,7 @@ class Label(models.Model):
pass
@python_2_unicode_compatible
class Event(models.Model):
objects = InheritanceManager() # Queries can return subclasses, if available.
@@ -242,7 +244,8 @@ class Event(models.Model):
@property
def datadir(self):
# Create a file-like object which is the SHA-1 hexdigest of the Event's primary key
hdf = StringIO(sha1(str(self.id)).hexdigest())
hid = sha1(str(self.id).encode()).hexdigest()
hdf = StringIO(hid)
# Build up the nodes of the directory structure
nodes = [hdf.read(i) for i in settings.GRACEDB_DIR_DIGITS]
@@ -336,8 +339,8 @@ class Event(models.Model):
return e
raise cls.DoesNotExist("Event matching query does not exist")
def __unicode__(self):
return self.graceid
def __str__(self):
return six.text_type(self.graceid)
# Return a list of distinct tags associated with the log messages of this
# event.
@@ -482,6 +485,7 @@ class EventLog(CleanSaveModel, LogBase, AutoIncrementModel):
return None
@python_2_unicode_compatible
class EMGroup(models.Model):
name = models.CharField(max_length=50, unique=True)
@@ -492,8 +496,8 @@ class EMGroup(models.Model):
# purposes.
#liasons = models.ManyToManyField(UserModel)
def __unicode__(self):
return self.name
def __str__(self):
return six.text_type(self.name)
class EMObservationBase(models.Model):
@@ -561,6 +565,7 @@ class EMObservationBase(models.Model):
self.decWidth = decmax-decmin
@python_2_unicode_compatible
class EMObservation(EMObservationBase, AutoIncrementModel):
"""EMObservation class for events"""
AUTO_FIELD = 'N'
@@ -570,9 +575,14 @@ class EMObservation(EMObservationBase, AutoIncrementModel):
class Meta(EMObservationBase.Meta):
unique_together = (('event', 'N'),)
def __unicode__(self):
return "{event_id} | {group} | {N}".format(
event_id=self.event.graceid, group=self.group.name, N=self.N)
def __str__(self):
return six.text_type(
"{event_id} | {group} | {N}".format(
event_id=self.event.graceid,
group=self.group.name,
N=self.N
)
)
def calculateCoveringRegion(self):
footprints = self.emfootprint_set.all()
@@ -620,6 +630,7 @@ class EMFootprint(EMFootprintBase, AutoIncrementModel):
unique_together = (('observation', 'N'),)
@python_2_unicode_compatible
class Labelling(m2mThroughBase):
"""
Model which provides the "through" relationship between Events and Labels.
@@ -627,9 +638,13 @@ class Labelling(m2mThroughBase):
event = models.ForeignKey(Event)
label = models.ForeignKey(Label)
def __unicode__(self):
return "{graceid} | {label}".format(graceid=self.event.graceid,
label=self.label.name)
def __str__(self):
return six.text_type(
"{graceid} | {label}".format(
graceid=self.event.graceid,
label=self.label.name
)
)
## Analysis Specific Attributes.
@@ -828,8 +843,8 @@ class SingleInspiral(models.Model):
return cls._field_names
except AttributeError: pass
model_field_names = set([ x.name for x in cls._meta.get_fields(include_parents=False) ])
ligolw_field_names = set(
glue.ligolw.lsctables.SnglInspiralTable.validcolumns.keys())
ligolw_field_names = set(list(
glue.ligolw.lsctables.SnglInspiralTable.validcolumns))
cls._field_names = model_field_names.intersection(ligolw_field_names)
return cls._field_names
@@ -905,6 +920,7 @@ class SimInspiralEvent(Event):
return cls._field_names
# Tags (user-defined log message attributes)
@python_2_unicode_compatible
class Tag(CleanSaveModel):
"""
Model for tags attached to EventLogs.
@@ -926,8 +942,10 @@ class Tag(CleanSaveModel):
])
displayName = models.CharField(max_length=200, null=True, blank=True)
def __unicode__(self):
return self.displayName if self.displayName else self.name
def __str__(self):
return six.text_type(
self.displayName if self.displayName else self.name
)
class VOEventBase(CleanSaveModel):
@@ -990,10 +1008,34 @@ class VOEventBase(CleanSaveModel):
validators=[models.fields.validators.MinValueValidator(0.0),
models.fields.validators.MaxValueValidator(1.0)])
# Additional RAVEN Fields
raven_coinc = models.BooleanField(null=False, default=False, blank=True)
ext_gcn = models.CharField(max_length=20, default="", blank=True,
editable=False)
ext_pipeline = models.CharField(max_length=20, default="", blank=True,
editable=False)
ext_search = models.CharField(max_length=20, default="", blank=True,
editable=False)
time_coinc_far = models.FloatField(null=True, default=None, blank=True,
validators=[models.fields.validators.MinValueValidator(0.0)])
space_coinc_far = models.FloatField(null=True, default=None, blank=True,
validators=[models.fields.validators.MinValueValidator(0.0)])
combined_skymap_filename = models.CharField(max_length=100, null=True,
default=None, blank=True)
delta_t = models.FloatField(null=True, default=None, blank=True,
validators=[models.fields.validators.MinValueValidator(-1000),
models.fields.validators.MaxValueValidator(1000)])
ivorn = models.CharField(max_length=300, default="", blank=True,
editable=False)
def fileurl(self):
# Override this method on derived classes
return NotImplemented
class VOEventBuilderException(Exception):
pass
class VOEvent(VOEventBase, AutoIncrementModel):
"""VOEvent class for events"""
@@ -1104,7 +1146,7 @@ class SignoffBase(models.Model):
return 'ADV' + self.opposite_status
@python_2_unicode_compatible
class Signoff(SignoffBase):
"""Class for Event signoffs"""
@@ -1113,9 +1155,15 @@ class Signoff(SignoffBase):
class Meta:
unique_together = ('event', 'instrument')
def __unicode__(self):
return "%s | %s | %s" % (self.event.graceid, self.instrument,
self.status)
def __str__(self):
return six.text_type(
"{gid} | {instrument} | {status}".format(
self.event.graceid,
self.instrument,
self.status
)
)
EMSPECTRUM = (
('em.gamma', 'Gamma rays part of the spectrum'),
@@ -1170,8 +1218,10 @@ EMSPECTRUM = (
('em.radio.20-100MHz', 'Radio between 20 and 100 MHz'),
)
# TP (2 Apr 2018): pretty sure this class is deprecated - most recent
# production use is T137114 = April 2015.
@python_2_unicode_compatible
class EMBBEventLog(AutoIncrementModel):
"""EMBB EventLog: A multi-purpose annotation for EM followup.
@@ -1182,8 +1232,14 @@ class EMBBEventLog(AutoIncrementModel):
ordering = ['-created', '-N']
unique_together = ("event","N")
def __unicode__(self):
return "%s-%s-%d" % (self.event.graceid, self.group.name, self.N)
def __str__(self):
return six.text_type(
"{gid}-{name}-{N}".format(
self.event.graceid,
self.group.name,
self.N
)
)
# A counter for Eels associated with a given event. This is
# important for addressibility.
Loading