models.py
111 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
|
r6 | from itertools import chain | |
|
r0 | from django.db import models | |
|
r6 | from polymorphic import PolymorphicModel | |
|
r0 | ||
|
r21 | CONF_TYPES = ( | |
|
r16 | (0, 'Active'), | |
|
r21 | (1, 'Historical'), | |
|
r16 | ) | |
DEV_STATES = ( | |||
(0, 'No connected'), | |||
(1, 'Connected'), | |||
(2, 'Configured'), | |||
(3, 'Running'), | |||
|
r2 | ) | |
|
r13 | DEV_TYPES = ( | |
('', 'Select a device type'), | |||
('rc', 'Radar Controller'), | |||
('dds', 'Direct Digital Synthesizer'), | |||
|
r22 | ('jars', 'Jicamarca Radar Acquisition System'), | |
|
r13 | ('usrp', 'Universal Software Radio Peripheral'), | |
('cgs', 'Clock Generator System'), | |||
('abs', 'Automatic Beam Switching'), | |||
) | |||
|
r2 | ||
|
r13 | # Create your models here. | |
|
r2 | class DeviceType(models.Model): | |
|
r13 | name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc') | |
description = models.TextField(blank=True, null=True) | |||
# info = models.TextField(blank=True, null=True) | |||
# status = models.PositiveSmallIntegerField(default=1, choices=STATES) | |||
|
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) | |||
|
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) | |
|
r13 | ||
# serial_number = models.CharField(max_length=40, default='') | |||
# mac_address = models.CharField(max_length = 20, null=True, blank=True) | |||
|
r16 | ||
|
r2 | ||
class Meta: | |||
|
r13 | db_table = 'db_devices' | |
|
r2 | ||
def __unicode__(self): | |||
|
r22 | return u'%s | %s' % (self.name, self.ip_address) | |
|
r13 | ||
class Campaign(models.Model): | |||
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) | |||
template = models.BooleanField(default=False) | |||
class Meta: | |||
db_table = 'db_campaigns' | |||
def __unicode__(self): | |||
|
r22 | return u'%s' % (self.name) | |
|
r2 | ||
class Experiment(models.Model): | |||
|
r13 | campaign = models.ForeignKey(Campaign) | |
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): | |||
|
r22 | return u'[%s]: %s' % (self.campaign.name, self.name) | |
|
r6 | ||
class Configuration(PolymorphicModel): | |||
|
r2 | ||
|
r6 | experiment = models.ForeignKey(Experiment) | |
|
r2 | device = models.ForeignKey(Device) | |
|
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, | |
self.experiment.name, | |||
self.device.name) | |||
|
r23 | def get_absolute_url(self): | |
from django.core.urlresolvers import reverse | |||
return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)]) | |||
|
r2 |