##// END OF EJS Templates
A "Campaign" has many "Locations", A "Location" has many Experiments....
Fiorella Quino -
r48:292bafbb7b12
parent child
Show More
@@ -1,160 +1,161
1 from django.db import models
1 from django.db import models
2 from polymorphic import PolymorphicModel
2 from polymorphic import PolymorphicModel
3
3
4 from django.core.urlresolvers import reverse
4 from django.core.urlresolvers import reverse
5
5
6 CONF_STATES = (
6 CONF_STATES = (
7 (0, 'Disconnected'),
7 (0, 'Disconnected'),
8 (1, 'Connected'),
8 (1, 'Connected'),
9 (1, 'Running'),
9 (1, 'Running'),
10 )
10 )
11
11
12 CONF_TYPES = (
12 CONF_TYPES = (
13 (0, 'Active'),
13 (0, 'Active'),
14 (1, 'Historical'),
14 (1, 'Historical'),
15 )
15 )
16
16
17 DEV_STATES = (
17 DEV_STATES = (
18 (0, 'No connected'),
18 (0, 'No connected'),
19 (1, 'Connected'),
19 (1, 'Connected'),
20 (2, 'Configured'),
20 (2, 'Configured'),
21 (3, 'Running'),
21 (3, 'Running'),
22 )
22 )
23
23
24 DEV_TYPES = (
24 DEV_TYPES = (
25 ('', 'Select a device type'),
25 ('', 'Select a device type'),
26 ('rc', 'Radar Controller'),
26 ('rc', 'Radar Controller'),
27 ('dds', 'Direct Digital Synthesizer'),
27 ('dds', 'Direct Digital Synthesizer'),
28 ('jars', 'Jicamarca Radar Acquisition System'),
28 ('jars', 'Jicamarca Radar Acquisition System'),
29 ('usrp', 'Universal Software Radio Peripheral'),
29 ('usrp', 'Universal Software Radio Peripheral'),
30 ('cgs', 'Clock Generator System'),
30 ('cgs', 'Clock Generator System'),
31 ('abs', 'Automatic Beam Switching'),
31 ('abs', 'Automatic Beam Switching'),
32 )
32 )
33
33
34 DEV_PORTS = {
34 DEV_PORTS = {
35 'rc' : 2000,
35 'rc' : 2000,
36 'dds' : 2000,
36 'dds' : 2000,
37 'jars' : 2000,
37 'jars' : 2000,
38 'usrp' : 2000,
38 'usrp' : 2000,
39 'cgs' : 8080,
39 'cgs' : 8080,
40 'abs' : 8080
40 'abs' : 8080
41 }
41 }
42
42
43 # Create your models here.
43 # Create your models here.
44
44
45 class Location(models.Model):
46
47 name = models.CharField(max_length = 30)
48 description = models.TextField(blank=True, null=True)
49
50 class Meta:
51 db_table = 'db_location'
52
53 def __unicode__(self):
54 return u'%s' % self.name
55
56 class DeviceType(models.Model):
45 class DeviceType(models.Model):
57
46
58 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
47 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
59 description = models.TextField(blank=True, null=True)
48 description = models.TextField(blank=True, null=True)
60
49
61 class Meta:
50 class Meta:
62 db_table = 'db_device_types'
51 db_table = 'db_device_types'
63
52
64 def __unicode__(self):
53 def __unicode__(self):
65 return u'%s' % self.get_name_display()
54 return u'%s' % self.get_name_display()
66
55
67 class Device(models.Model):
56 class Device(models.Model):
68
57
69 device_type = models.ForeignKey(DeviceType)
58 device_type = models.ForeignKey(DeviceType)
70 # location = models.ForeignKey(Location)
59 # location = models.ForeignKey(Location)
71
60
72 name = models.CharField(max_length=40, default='')
61 name = models.CharField(max_length=40, default='')
73 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
62 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
74 port_address = models.PositiveSmallIntegerField(default=2000)
63 port_address = models.PositiveSmallIntegerField(default=2000)
75 description = models.TextField(blank=True, null=True)
64 description = models.TextField(blank=True, null=True)
76 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
65 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
77
66
78 class Meta:
67 class Meta:
79 db_table = 'db_devices'
68 db_table = 'db_devices'
80
69
81 def __unicode__(self):
70 def __unicode__(self):
82 return u'%s | %s' % (self.name, self.ip_address)
71 return u'%s | %s' % (self.name, self.ip_address)
83
72
84 def get_status(self):
73 def get_status(self):
85
74
86 return self.status
75 return self.status
87
76
88
77
89 class Campaign(models.Model):
78 class Campaign(models.Model):
90
79
91 template = models.BooleanField(default=False)
80 template = models.BooleanField(default=False)
92
81
93 name = models.CharField(max_length=40, unique=True)
82 name = models.CharField(max_length=40, unique=True)
94 start_date = models.DateTimeField(blank=True, null=True)
83 start_date = models.DateTimeField(blank=True, null=True)
95 end_date = models.DateTimeField(blank=True, null=True)
84 end_date = models.DateTimeField(blank=True, null=True)
96 tags = models.CharField(max_length=40)
85 tags = models.CharField(max_length=40)
97 description = models.TextField(blank=True, null=True)
86 description = models.TextField(blank=True, null=True)
98
87
99 class Meta:
88 class Meta:
100 db_table = 'db_campaigns'
89 db_table = 'db_campaigns'
101
90
102 def __unicode__(self):
91 def __unicode__(self):
103 return u'%s' % (self.name)
92 return u'%s' % (self.name)
104
93
94 class Location(models.Model):
95
96 name = models.CharField(max_length = 30)
97 description = models.TextField(blank=True, null=True)
98 campaign = models.ForeignKey(Campaign)
99
100 class Meta:
101 db_table = 'db_location'
102
103 def __unicode__(self):
104 return u'%s' % self.name
105
105 class Experiment(models.Model):
106 class Experiment(models.Model):
106
107
107 template = models.BooleanField(default=False)
108 template = models.BooleanField(default=False)
108
109
109 campaign = models.ForeignKey(Campaign)
110 location = models.ForeignKey(Location)
110 name = models.CharField(max_length=40, default='')
111 name = models.CharField(max_length=40, default='')
111 start_time = models.TimeField(default='00:00:00')
112 start_time = models.TimeField(default='00:00:00')
112 end_time = models.TimeField(default='23:59:59')
113 end_time = models.TimeField(default='23:59:59')
113
114
114 class Meta:
115 class Meta:
115 db_table = 'db_experiments'
116 db_table = 'db_experiments'
116
117
117 def __unicode__(self):
118 def __unicode__(self):
118 return u'[%s]: %s' % (self.campaign.name, self.name)
119 return u'[%s]: %s' % (self.campaign.name, self.name)
119
120
120 class Configuration(PolymorphicModel):
121 class Configuration(PolymorphicModel):
121
122
122 template = models.BooleanField(default=False)
123 template = models.BooleanField(default=False)
123
124
124 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
125 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
125
126
126 experiment = models.ForeignKey(Experiment)
127 experiment = models.ForeignKey(Experiment)
127 device = models.ForeignKey(Device)
128 device = models.ForeignKey(Device)
128
129
129 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
130 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
130
131
131 created_date = models.DateTimeField(auto_now_add=True)
132 created_date = models.DateTimeField(auto_now_add=True)
132 programmed_date = models.DateTimeField(auto_now=True)
133 programmed_date = models.DateTimeField(auto_now=True)
133
134
134 parameters = models.TextField(default='{}')
135 parameters = models.TextField(default='{}')
135
136
136 class Meta:
137 class Meta:
137 db_table = 'db_configurations'
138 db_table = 'db_configurations'
138
139
139 def __unicode__(self):
140 def __unicode__(self):
140 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
141 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
141 self.experiment.name,
142 self.experiment.name,
142 self.device.name)
143 self.device.name)
143
144
144 def get_absolute_url(self):
145 def get_absolute_url(self):
145 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
146 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
146
147
147 def get_absolute_url_edit(self):
148 def get_absolute_url_edit(self):
148 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
149 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
149
150
150 def get_absolute_url_import(self):
151 def get_absolute_url_import(self):
151 return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)])
152 return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)])
152
153
153 def get_absolute_url_export(self):
154 def get_absolute_url_export(self):
154 return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)])
155 return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)])
155
156
156 def get_absolute_url_write(self):
157 def get_absolute_url_write(self):
157 return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)])
158 return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)])
158
159
159 def get_absolute_url_read(self):
160 def get_absolute_url_read(self):
160 return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)]) No newline at end of file
161 return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)])
General Comments 0
You need to be logged in to leave comments. Login now