##// END OF EJS Templates
Export Campaign. parms_to_dict() (mmain.models)...
Fiorella Quino -
r103:d7a9dc407c1e
parent child
Show More
@@ -1,450 +1,453
1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 from datetime import datetime
2 from datetime import datetime
3
3
4 from django.db import models
4 from django.db import models
5 from polymorphic import PolymorphicModel
5 from polymorphic import PolymorphicModel
6
6
7 from django.core.urlresolvers import reverse
7 from django.core.urlresolvers import reverse
8
8
9 CONF_STATES = (
9 CONF_STATES = (
10 (0, 'Disconnected'),
10 (0, 'Disconnected'),
11 (1, 'Connected'),
11 (1, 'Connected'),
12 (2, 'Running'),
12 (2, 'Running'),
13 )
13 )
14
14
15 EXP_STATES = (
15 EXP_STATES = (
16 (0,'Error'), #RED
16 (0,'Error'), #RED
17 (1,'Configurated'), #BLUE
17 (1,'Configurated'), #BLUE
18 (2,'Running'), #GREEN
18 (2,'Running'), #GREEN
19 (3,'Waiting'), #YELLOW
19 (3,'Waiting'), #YELLOW
20 (4,'Not Configured'), #WHITE
20 (4,'Not Configured'), #WHITE
21 )
21 )
22
22
23 CONF_TYPES = (
23 CONF_TYPES = (
24 (0, 'Active'),
24 (0, 'Active'),
25 (1, 'Historical'),
25 (1, 'Historical'),
26 )
26 )
27
27
28 DEV_STATES = (
28 DEV_STATES = (
29 (0, 'No connected'),
29 (0, 'No connected'),
30 (1, 'Connected'),
30 (1, 'Connected'),
31 (2, 'Configured'),
31 (2, 'Configured'),
32 (3, 'Running'),
32 (3, 'Running'),
33 )
33 )
34
34
35 DEV_TYPES = (
35 DEV_TYPES = (
36 ('', 'Select a device type'),
36 ('', 'Select a device type'),
37 ('rc', 'Radar Controller'),
37 ('rc', 'Radar Controller'),
38 ('dds', 'Direct Digital Synthesizer'),
38 ('dds', 'Direct Digital Synthesizer'),
39 ('jars', 'Jicamarca Radar Acquisition System'),
39 ('jars', 'Jicamarca Radar Acquisition System'),
40 ('usrp', 'Universal Software Radio Peripheral'),
40 ('usrp', 'Universal Software Radio Peripheral'),
41 ('cgs', 'Clock Generator System'),
41 ('cgs', 'Clock Generator System'),
42 ('abs', 'Automatic Beam Switching'),
42 ('abs', 'Automatic Beam Switching'),
43 )
43 )
44
44
45 DEV_PORTS = {
45 DEV_PORTS = {
46 'rc' : 2000,
46 'rc' : 2000,
47 'dds' : 2000,
47 'dds' : 2000,
48 'jars' : 2000,
48 'jars' : 2000,
49 'usrp' : 2000,
49 'usrp' : 2000,
50 'cgs' : 8080,
50 'cgs' : 8080,
51 'abs' : 8080
51 'abs' : 8080
52 }
52 }
53
53
54 RADAR_STATES = (
54 RADAR_STATES = (
55 (0, 'No connected'),
55 (0, 'No connected'),
56 (1, 'Connected'),
56 (1, 'Connected'),
57 (2, 'Configured'),
57 (2, 'Configured'),
58 (3, 'Running'),
58 (3, 'Running'),
59 (4, 'Scheduled'),
59 (4, 'Scheduled'),
60 )
60 )
61 # Create your models here.
61 # Create your models here.
62
62
63 class Location(models.Model):
63 class Location(models.Model):
64
64
65 name = models.CharField(max_length = 30)
65 name = models.CharField(max_length = 30)
66 description = models.TextField(blank=True, null=True)
66 description = models.TextField(blank=True, null=True)
67
67
68 class Meta:
68 class Meta:
69 db_table = 'db_location'
69 db_table = 'db_location'
70
70
71 def __unicode__(self):
71 def __unicode__(self):
72 return u'%s' % self.name
72 return u'%s' % self.name
73
73
74 def get_absolute_url(self):
74 def get_absolute_url(self):
75 return reverse('url_device', args=[str(self.id)])
75 return reverse('url_device', args=[str(self.id)])
76
76
77
77
78 class DeviceType(models.Model):
78 class DeviceType(models.Model):
79
79
80 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
80 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
81 description = models.TextField(blank=True, null=True)
81 description = models.TextField(blank=True, null=True)
82
82
83 class Meta:
83 class Meta:
84 db_table = 'db_device_types'
84 db_table = 'db_device_types'
85
85
86 def __unicode__(self):
86 def __unicode__(self):
87 return u'%s' % self.get_name_display()
87 return u'%s' % self.get_name_display()
88
88
89 class Device(models.Model):
89 class Device(models.Model):
90
90
91 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
91 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
92 location = models.ForeignKey(Location, on_delete=models.CASCADE)
92 location = models.ForeignKey(Location, on_delete=models.CASCADE)
93
93
94 name = models.CharField(max_length=40, default='')
94 name = models.CharField(max_length=40, default='')
95 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
95 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
96 port_address = models.PositiveSmallIntegerField(default=2000)
96 port_address = models.PositiveSmallIntegerField(default=2000)
97 description = models.TextField(blank=True, null=True)
97 description = models.TextField(blank=True, null=True)
98 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
98 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
99
99
100 class Meta:
100 class Meta:
101 db_table = 'db_devices'
101 db_table = 'db_devices'
102
102
103 def __unicode__(self):
103 def __unicode__(self):
104 return u'%s | %s' % (self.name, self.ip_address)
104 return u'%s | %s' % (self.name, self.ip_address)
105
105
106 def get_status(self):
106 def get_status(self):
107 return self.status
107 return self.status
108
108
109 def get_absolute_url(self):
109 def get_absolute_url(self):
110 return reverse('url_device', args=[str(self.id)])
110 return reverse('url_device', args=[str(self.id)])
111
111
112
112
113 class Campaign(models.Model):
113 class Campaign(models.Model):
114
114
115 template = models.BooleanField(default=False)
115 template = models.BooleanField(default=False)
116 name = models.CharField(max_length=60, unique=True)
116 name = models.CharField(max_length=60, unique=True)
117 start_date = models.DateTimeField(blank=True, null=True)
117 start_date = models.DateTimeField(blank=True, null=True)
118 end_date = models.DateTimeField(blank=True, null=True)
118 end_date = models.DateTimeField(blank=True, null=True)
119 tags = models.CharField(max_length=40)
119 tags = models.CharField(max_length=40)
120 description = models.TextField(blank=True, null=True)
120 description = models.TextField(blank=True, null=True)
121 experiments = models.ManyToManyField('Experiment', blank=True)
121 experiments = models.ManyToManyField('Experiment', blank=True)
122
122
123 class Meta:
123 class Meta:
124 db_table = 'db_campaigns'
124 db_table = 'db_campaigns'
125 ordering = ('name',)
125 ordering = ('name',)
126
126
127 def __unicode__(self):
127 def __unicode__(self):
128 return u'%s' % (self.name)
128 return u'%s' % (self.name)
129
129
130 def get_absolute_url(self):
130 def get_absolute_url(self):
131 return reverse('url_campaign', args=[str(self.id)])
131 return reverse('url_campaign', args=[str(self.id)])
132
132
133 def parms_to_dict(self):
133 def parms_to_dict(self):
134
134
135 import json
135 import json
136 from collections import OrderedDict
136
137
137 parameters = {}
138 parameters = {}
138 exp_parameters = {}
139 exp_parameters = {}
139 experiments = Experiment.objects.filter(campaign = self)
140 experiments = Experiment.objects.filter(campaign = self)
140
141
141 i=1
142 i=1
142 for experiment in experiments:
143 for experiment in experiments:
143 exp_parameters['experiment-'+str(i)] = json.loads(experiment.parms_to_dict())
144 exp_parameters['experiment-'+str(i)] = json.loads(experiment.parms_to_dict())
144 i += 1
145 i += 1
145
146
146 parameters['campaign'] = self.__unicode__()
147
147 parameters['start_date'] = self.start_date.strftime("%Y-%m-%d")
148 parameters['end_date'] = self.end_date.strftime("%Y-%m-%d")
149 parameters['experimets'] =exp_parameters
148 parameters['experimets'] =exp_parameters
150 parameters = json.dumps(parameters, indent=2)
149 parameters['end_date'] = self.end_date.strftime("%Y-%m-%d")
150 parameters['start_date'] = self.start_date.strftime("%Y-%m-%d")
151 parameters['campaign'] = self.__unicode__()
152
153 parameters = json.dumps(parameters, indent=2, sort_keys=False)
151
154
152 return parameters
155 return parameters
153
156
154 def get_absolute_url_export(self):
157 def get_absolute_url_export(self):
155 return reverse('url_export_campaign', args=[str(self.id)])
158 return reverse('url_export_campaign', args=[str(self.id)])
156
159
157
160
158
161
159 class RunningExperiment(models.Model):
162 class RunningExperiment(models.Model):
160 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
163 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
161 running_experiment = models.ManyToManyField('Experiment', blank = True)
164 running_experiment = models.ManyToManyField('Experiment', blank = True)
162 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
165 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
163
166
164
167
165 class Experiment(models.Model):
168 class Experiment(models.Model):
166
169
167 template = models.BooleanField(default=False)
170 template = models.BooleanField(default=False)
168 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
171 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
169 name = models.CharField(max_length=40, default='', unique=True)
172 name = models.CharField(max_length=40, default='', unique=True)
170 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
173 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
171 start_time = models.TimeField(default='00:00:00')
174 start_time = models.TimeField(default='00:00:00')
172 end_time = models.TimeField(default='23:59:59')
175 end_time = models.TimeField(default='23:59:59')
173 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
176 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
174
177
175 class Meta:
178 class Meta:
176 db_table = 'db_experiments'
179 db_table = 'db_experiments'
177 ordering = ('template', 'name')
180 ordering = ('template', 'name')
178
181
179 def __unicode__(self):
182 def __unicode__(self):
180 if self.template:
183 if self.template:
181 return u'%s (template)' % (self.name)
184 return u'%s (template)' % (self.name)
182 else:
185 else:
183 return u'%s' % (self.name)
186 return u'%s' % (self.name)
184
187
185 @property
188 @property
186 def radar(self):
189 def radar(self):
187 return self.location
190 return self.location
188
191
189 def clone(self, **kwargs):
192 def clone(self, **kwargs):
190
193
191 confs = Configuration.objects.filter(experiment=self, type=0)
194 confs = Configuration.objects.filter(experiment=self, type=0)
192 self.pk = None
195 self.pk = None
193 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
196 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
194 for attr, value in kwargs.items():
197 for attr, value in kwargs.items():
195 setattr(self, attr, value)
198 setattr(self, attr, value)
196
199
197 self.save()
200 self.save()
198
201
199 for conf in confs:
202 for conf in confs:
200 conf.clone(experiment=self, template=False)
203 conf.clone(experiment=self, template=False)
201
204
202 return self
205 return self
203
206
204 def get_status(self):
207 def get_status(self):
205 configurations = Configuration.objects.filter(experiment=self)
208 configurations = Configuration.objects.filter(experiment=self)
206 exp_status=[]
209 exp_status=[]
207 for conf in configurations:
210 for conf in configurations:
208 print conf.status_device()
211 print conf.status_device()
209 exp_status.append(conf.status_device())
212 exp_status.append(conf.status_device())
210
213
211 if not exp_status: #No Configuration
214 if not exp_status: #No Configuration
212 self.status = 4
215 self.status = 4
213 self.save()
216 self.save()
214 return
217 return
215
218
216 total = 1
219 total = 1
217 for e_s in exp_status:
220 for e_s in exp_status:
218 total = total*e_s
221 total = total*e_s
219
222
220 if total == 0: #Error
223 if total == 0: #Error
221 status = 0
224 status = 0
222 elif total == (3**len(exp_status)): #Running
225 elif total == (3**len(exp_status)): #Running
223 status = 2
226 status = 2
224 else:
227 else:
225 status = 1 #Configurated
228 status = 1 #Configurated
226
229
227 self.status = status
230 self.status = status
228 self.save()
231 self.save()
229
232
230 def status_color(self):
233 def status_color(self):
231 color = 'danger'
234 color = 'danger'
232 if self.status == 0:
235 if self.status == 0:
233 color = "danger"
236 color = "danger"
234 elif self.status == 1:
237 elif self.status == 1:
235 color = "info"
238 color = "info"
236 elif self.status == 2:
239 elif self.status == 2:
237 color = "success"
240 color = "success"
238 elif self.status == 3:
241 elif self.status == 3:
239 color = "warning"
242 color = "warning"
240 else:
243 else:
241 color = "muted"
244 color = "muted"
242
245
243 return color
246 return color
244
247
245 def get_absolute_url(self):
248 def get_absolute_url(self):
246 return reverse('url_experiment', args=[str(self.id)])
249 return reverse('url_experiment', args=[str(self.id)])
247
250
248 def parms_to_dict(self):
251 def parms_to_dict(self):
249
252
250 import json
253 import json
251
254
252 configurations = Configuration.objects.filter(experiment=self)
255 configurations = Configuration.objects.filter(experiment=self)
253 conf_parameters = {}
256 conf_parameters = {}
254 parameters={}
257 parameters={}
255
258
256 for configuration in configurations:
259 for configuration in configurations:
257 if 'cgs' in configuration.device.device_type.name:
260 if 'cgs' in configuration.device.device_type.name:
258 conf_parameters['cgs'] = configuration.parms_to_dict()
261 conf_parameters['cgs'] = configuration.parms_to_dict()
259 if 'dds' in configuration.device.device_type.name:
262 if 'dds' in configuration.device.device_type.name:
260 conf_parameters['dds'] = configuration.parms_to_dict()
263 conf_parameters['dds'] = configuration.parms_to_dict()
261 if 'rc' in configuration.device.device_type.name:
264 if 'rc' in configuration.device.device_type.name:
262 conf_parameters['rc'] = configuration.parms_to_dict()
265 conf_parameters['rc'] = configuration.parms_to_dict()
263 if 'jars' in configuration.device.device_type.name:
266 if 'jars' in configuration.device.device_type.name:
264 conf_parameters['jars'] = configuration.parms_to_dict()
267 conf_parameters['jars'] = configuration.parms_to_dict()
265 if 'usrp' in configuration.device.device_type.name:
268 if 'usrp' in configuration.device.device_type.name:
266 conf_parameters['usrp'] = configuration.parms_to_dict()
269 conf_parameters['usrp'] = configuration.parms_to_dict()
267 if 'abs' in configuration.device.device_type.name:
270 if 'abs' in configuration.device.device_type.name:
268 conf_parameters['abs'] = configuration.parms_to_dict()
271 conf_parameters['abs'] = configuration.parms_to_dict()
269
272
270 parameters['configurations'] = conf_parameters
273 parameters['configurations'] = conf_parameters
271 parameters['end_time'] = self.end_time.strftime("%Y-%m-%d")
274 parameters['end_time'] = self.end_time.strftime("%Y-%m-%d")
272 parameters['start_time'] = self.start_time.strftime("%Y-%m-%d")
275 parameters['start_time'] = self.start_time.strftime("%Y-%m-%d")
273 parameters['radar'] = self.radar.name
276 parameters['radar'] = self.radar.name
274 parameters['experiment'] = self.name
277 parameters['experiment'] = self.name
275 parameters = json.dumps(parameters, indent=2)
278 parameters = json.dumps(parameters, indent=2)
276 #parameters = json.dumps(parameters)
279 #parameters = json.dumps(parameters)
277
280
278 return parameters
281 return parameters
279
282
280 def get_absolute_url_export(self):
283 def get_absolute_url_export(self):
281 return reverse('url_export_experiment', args=[str(self.id)])
284 return reverse('url_export_experiment', args=[str(self.id)])
282
285
283
286
284 class Configuration(PolymorphicModel):
287 class Configuration(PolymorphicModel):
285
288
286 template = models.BooleanField(default=False)
289 template = models.BooleanField(default=False)
287
290
288 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
291 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
289
292
290 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
293 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
291 device = models.ForeignKey(Device, on_delete=models.CASCADE)
294 device = models.ForeignKey(Device, on_delete=models.CASCADE)
292
295
293 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
296 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
294
297
295 created_date = models.DateTimeField(auto_now_add=True)
298 created_date = models.DateTimeField(auto_now_add=True)
296 programmed_date = models.DateTimeField(auto_now=True)
299 programmed_date = models.DateTimeField(auto_now=True)
297
300
298 parameters = models.TextField(default='{}')
301 parameters = models.TextField(default='{}')
299
302
300 message = ""
303 message = ""
301
304
302 class Meta:
305 class Meta:
303 db_table = 'db_configurations'
306 db_table = 'db_configurations'
304
307
305 def __unicode__(self):
308 def __unicode__(self):
306
309
307 if self.experiment:
310 if self.experiment:
308 return u'[%s, %s]: %s' % (self.experiment.name,
311 return u'[%s, %s]: %s' % (self.experiment.name,
309 self.device.name,
312 self.device.name,
310 self.name)
313 self.name)
311 else:
314 else:
312 return u'%s' % self.device.name
315 return u'%s' % self.device.name
313
316
314 def clone(self, **kwargs):
317 def clone(self, **kwargs):
315
318
316 self.pk = None
319 self.pk = None
317 self.id = None
320 self.id = None
318 for attr, value in kwargs.items():
321 for attr, value in kwargs.items():
319 setattr(self, attr, value)
322 setattr(self, attr, value)
320
323
321 self.save()
324 self.save()
322
325
323 return self
326 return self
324
327
325 def parms_to_dict(self):
328 def parms_to_dict(self):
326
329
327 parameters = {}
330 parameters = {}
328
331
329 for key in self.__dict__.keys():
332 for key in self.__dict__.keys():
330 parameters[key] = getattr(self, key)
333 parameters[key] = getattr(self, key)
331
334
332 return parameters
335 return parameters
333
336
334 def parms_to_text(self):
337 def parms_to_text(self):
335
338
336 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
339 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
337
340
338 return ''
341 return ''
339
342
340 def parms_to_binary(self):
343 def parms_to_binary(self):
341
344
342 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
345 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
343
346
344 return ''
347 return ''
345
348
346 def dict_to_parms(self, parameters):
349 def dict_to_parms(self, parameters):
347
350
348 if type(parameters) != type({}):
351 if type(parameters) != type({}):
349 return
352 return
350
353
351 for key in parameters.keys():
354 for key in parameters.keys():
352 setattr(self, key, parameters[key])
355 setattr(self, key, parameters[key])
353
356
354 def export_to_file(self, format="json"):
357 def export_to_file(self, format="json"):
355
358
356 import json
359 import json
357
360
358 content_type = ''
361 content_type = ''
359
362
360 if format == 'text':
363 if format == 'text':
361 content_type = 'text/plain'
364 content_type = 'text/plain'
362 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
365 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
363 content = self.parms_to_text()
366 content = self.parms_to_text()
364
367
365 if format == 'binary':
368 if format == 'binary':
366 content_type = 'application/octet-stream'
369 content_type = 'application/octet-stream'
367 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
370 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
368 content = self.parms_to_binary()
371 content = self.parms_to_binary()
369
372
370 if not content_type:
373 if not content_type:
371 content_type = 'application/json'
374 content_type = 'application/json'
372 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
375 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
373 content = json.dumps(self.parms_to_dict(), indent=2)
376 content = json.dumps(self.parms_to_dict(), indent=2)
374
377
375 fields = {'content_type':content_type,
378 fields = {'content_type':content_type,
376 'filename':filename,
379 'filename':filename,
377 'content':content
380 'content':content
378 }
381 }
379
382
380 return fields
383 return fields
381
384
382 def import_from_file(self, fp):
385 def import_from_file(self, fp):
383
386
384 import os, json
387 import os, json
385
388
386 parms = {}
389 parms = {}
387
390
388 path, ext = os.path.splitext(fp.name)
391 path, ext = os.path.splitext(fp.name)
389
392
390 if ext == '.json':
393 if ext == '.json':
391 parms = json.load(fp)
394 parms = json.load(fp)
392
395
393 return parms
396 return parms
394
397
395 def status_device(self):
398 def status_device(self):
396
399
397 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
400 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
398
401
399 return None
402 return None
400
403
401 def stop_device(self):
404 def stop_device(self):
402
405
403 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
406 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
404
407
405 return None
408 return None
406
409
407 def start_device(self):
410 def start_device(self):
408
411
409 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
412 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
410
413
411 return None
414 return None
412
415
413 def write_device(self, parms):
416 def write_device(self, parms):
414
417
415 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
418 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
416
419
417 return None
420 return None
418
421
419 def read_device(self):
422 def read_device(self):
420
423
421 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
424 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
422
425
423 return None
426 return None
424
427
425 def get_absolute_url(self):
428 def get_absolute_url(self):
426 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
429 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
427
430
428 def get_absolute_url_edit(self):
431 def get_absolute_url_edit(self):
429 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
432 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
430
433
431 def get_absolute_url_import(self):
434 def get_absolute_url_import(self):
432 return reverse('url_import_dev_conf', args=[str(self.id)])
435 return reverse('url_import_dev_conf', args=[str(self.id)])
433
436
434 def get_absolute_url_export(self):
437 def get_absolute_url_export(self):
435 return reverse('url_export_dev_conf', args=[str(self.id)])
438 return reverse('url_export_dev_conf', args=[str(self.id)])
436
439
437 def get_absolute_url_write(self):
440 def get_absolute_url_write(self):
438 return reverse('url_write_dev_conf', args=[str(self.id)])
441 return reverse('url_write_dev_conf', args=[str(self.id)])
439
442
440 def get_absolute_url_read(self):
443 def get_absolute_url_read(self):
441 return reverse('url_read_dev_conf', args=[str(self.id)])
444 return reverse('url_read_dev_conf', args=[str(self.id)])
442
445
443 def get_absolute_url_start(self):
446 def get_absolute_url_start(self):
444 return reverse('url_start_dev_conf', args=[str(self.id)])
447 return reverse('url_start_dev_conf', args=[str(self.id)])
445
448
446 def get_absolute_url_stop(self):
449 def get_absolute_url_stop(self):
447 return reverse('url_stop_dev_conf', args=[str(self.id)])
450 return reverse('url_stop_dev_conf', args=[str(self.id)])
448
451
449 def get_absolute_url_status(self):
452 def get_absolute_url_status(self):
450 return reverse('url_status_dev_conf', args=[str(self.id)]) No newline at end of file
453 return reverse('url_status_dev_conf', args=[str(self.id)])
General Comments 0
You need to be logged in to leave comments. Login now