models.py
179 lines
| 5.4 KiB
| text/x-python
|
PythonLexer
|
r0 | from django.db import models | |
|
r6 | from polymorphic import PolymorphicModel | |
|
r0 | ||
|
r32 | from django.core.urlresolvers import reverse | |
|
r41 | CONF_STATES = ( | |
|
r47 | (0, 'Disconnected'), | |
(1, 'Connected'), | |||
(1, 'Running'), | |||
) | |||
|
r41 | ||
|
r21 | CONF_TYPES = ( | |
|
r47 | (0, 'Active'), | |
(1, 'Historical'), | |||
) | |||
|
r16 | ||
DEV_STATES = ( | |||
|
r47 | (0, 'No connected'), | |
(1, 'Connected'), | |||
(2, 'Configured'), | |||
(3, 'Running'), | |||
) | |||
|
r2 | ||
|
r13 | DEV_TYPES = ( | |
|
r47 | ('', 'Select a device type'), | |
('rc', 'Radar Controller'), | |||
('dds', 'Direct Digital Synthesizer'), | |||
('jars', 'Jicamarca Radar Acquisition System'), | |||
('usrp', 'Universal Software Radio Peripheral'), | |||
('cgs', 'Clock Generator System'), | |||
('abs', 'Automatic Beam Switching'), | |||
) | |||
DEV_PORTS = { | |||
'rc' : 2000, | |||
'dds' : 2000, | |||
'jars' : 2000, | |||
'usrp' : 2000, | |||
'cgs' : 8080, | |||
'abs' : 8080 | |||
} | |||
|
r2 | ||
|
r49 | RADAR_STATES = ( | |
(0, 'No connected'), | |||
(1, 'Connnected'), | |||
(2, 'Configured'), | |||
(3, 'Running'), | |||
(4, 'Scheduled'), | |||
) | |||
|
r13 | # Create your models here. | |
|
r41 | ||
|
r2 | class DeviceType(models.Model): | |
|
r13 | name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc') | |
description = models.TextField(blank=True, null=True) | |||
|
r2 | ||
class Meta: | |||
|
r13 | db_table = 'db_device_types' | |
|
r2 | ||
def __unicode__(self): | |||
|
r22 | return u'%s' % self.get_name_display() | |
|
r2 | ||
class Device(models.Model): | |||
device_type = models.ForeignKey(DeviceType) | |||
|
r41 | # location = models.ForeignKey(Location) | |
|
r9 | name = models.CharField(max_length=40, default='') | |
|
r6 | ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0') | |
|
r13 | port_address = models.PositiveSmallIntegerField(default=2000) | |
|
r9 | description = models.TextField(blank=True, null=True) | |
|
r16 | status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES) | |
|
r2 | ||
class Meta: | |||
|
r13 | db_table = 'db_devices' | |
|
r2 | ||
def __unicode__(self): | |||
|
r22 | return u'%s | %s' % (self.name, self.ip_address) | |
|
r47 | ||
def get_status(self): | |||
return self.status | |||
|
r13 | ||
class Campaign(models.Model): | |||
|
r47 | template = models.BooleanField(default=False) | |
|
r13 | name = models.CharField(max_length=40, unique=True) | |
start_date = models.DateTimeField(blank=True, null=True) | |||
end_date = models.DateTimeField(blank=True, null=True) | |||
tags = models.CharField(max_length=40) | |||
description = models.TextField(blank=True, null=True) | |||
class Meta: | |||
db_table = 'db_campaigns' | |||
def __unicode__(self): | |||
|
r22 | return u'%s' % (self.name) | |
|
r2 | ||
|
r49 | class Radar(models.Model): | |
|
r48 | ||
name = models.CharField(max_length = 30) | |||
campaign = models.ForeignKey(Campaign) | |||
|
r49 | status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES) | |
|
r48 | ||
class Meta: | |||
|
r49 | db_table = 'db_radar' | |
|
r48 | ||
def __unicode__(self): | |||
return u'%s' % self.name | |||
|
r49 | ||
|
r2 | class Experiment(models.Model): | |
|
r47 | template = models.BooleanField(default=False) | |
|
r49 | radar = models.ForeignKey(Radar) | |
|
r13 | name = models.CharField(max_length=40, default='') | |
start_time = models.TimeField(default='00:00:00') | |||
end_time = models.TimeField(default='23:59:59') | |||
|
r2 | ||
class Meta: | |||
|
r13 | db_table = 'db_experiments' | |
|
r2 | ||
def __unicode__(self): | |||
|
r49 | return u'[%s]: %s' % (self.radar.name, self.name) | |
|
r6 | ||
class Configuration(PolymorphicModel): | |||
|
r2 | ||
|
r47 | template = models.BooleanField(default=False) | |
name = models.CharField(verbose_name="Configuration Name", max_length=40, default='') | |||
|
r6 | experiment = models.ForeignKey(Experiment) | |
|
r2 | device = models.ForeignKey(Device) | |
|
r41 | ||
|
r21 | type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES) | |
|
r16 | ||
|
r22 | created_date = models.DateTimeField(auto_now_add=True) | |
programmed_date = models.DateTimeField(auto_now=True) | |||
parameters = models.TextField(default='{}') | |||
|
r2 | class Meta: | |
|
r13 | db_table = 'db_configurations' | |
|
r2 | ||
def __unicode__(self): | |||
|
r18 | return u'[%s - %s]: %s' % (self.experiment.campaign.name, | |
|
r47 | self.experiment.name, | |
self.device.name) | |||
|
r32 | ||
|
r47 | def get_absolute_url(self): | |
|
r23 | return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |
|
r30 | ||
def get_absolute_url_edit(self): | |||
return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |||
def get_absolute_url_import(self): | |||
return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |||
def get_absolute_url_export(self): | |||
return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |||
def get_absolute_url_write(self): | |||
return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |||
def get_absolute_url_read(self): | |||
|
r49 | return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |
class Location(models.Model): | |||
name = models.CharField(max_length = 30) | |||
description = models.TextField(blank=True, null=True) | |||
class Meta: | |||
db_table = 'db_location' | |||
def __unicode__(self): | |||
return u'%s' % self.name |