##// END OF EJS Templates
Export Campaign. parms_to_dict() (mmain.models)...
Fiorella Quino -
r102:dc4b6d89bb97
parent child
Show More
@@ -1,443 +1,450
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
136
137 parameters = {}
137 parameters = {}
138 #experiments = Experiment.objects.filter(campaign = self)
138 exp_parameters = {}
139
139 experiments = Experiment.objects.filter(campaign = self)
140
140
141 parameters['campaign'] = self.name
141 i=1
142 for experiment in experiments:
143 exp_parameters['experiment-'+str(i)] = json.loads(experiment.parms_to_dict())
144 i += 1
145
146 parameters['campaign'] = self.__unicode__()
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
150 parameters = json.dumps(parameters, indent=2)
142
151
143 #parameters = json.dumps(parameters, indent=2)
144 parameters = json.dumps(parameters)
145 return parameters
152 return parameters
146
153
147 def get_absolute_url_export(self):
154 def get_absolute_url_export(self):
148 return reverse('url_export_campaign', args=[str(self.id)])
155 return reverse('url_export_campaign', args=[str(self.id)])
149
156
150
157
151
158
152 class RunningExperiment(models.Model):
159 class RunningExperiment(models.Model):
153 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
160 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
154 running_experiment = models.ManyToManyField('Experiment', blank = True)
161 running_experiment = models.ManyToManyField('Experiment', blank = True)
155 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
162 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
156
163
157
164
158 class Experiment(models.Model):
165 class Experiment(models.Model):
159
166
160 template = models.BooleanField(default=False)
167 template = models.BooleanField(default=False)
161 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
168 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
162 name = models.CharField(max_length=40, default='', unique=True)
169 name = models.CharField(max_length=40, default='', unique=True)
163 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
170 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
164 start_time = models.TimeField(default='00:00:00')
171 start_time = models.TimeField(default='00:00:00')
165 end_time = models.TimeField(default='23:59:59')
172 end_time = models.TimeField(default='23:59:59')
166 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
173 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
167
174
168 class Meta:
175 class Meta:
169 db_table = 'db_experiments'
176 db_table = 'db_experiments'
170 ordering = ('template', 'name')
177 ordering = ('template', 'name')
171
178
172 def __unicode__(self):
179 def __unicode__(self):
173 if self.template:
180 if self.template:
174 return u'%s (template)' % (self.name)
181 return u'%s (template)' % (self.name)
175 else:
182 else:
176 return u'%s' % (self.name)
183 return u'%s' % (self.name)
177
184
178 @property
185 @property
179 def radar(self):
186 def radar(self):
180 return self.location
187 return self.location
181
188
182 def clone(self, **kwargs):
189 def clone(self, **kwargs):
183
190
184 confs = Configuration.objects.filter(experiment=self, type=0)
191 confs = Configuration.objects.filter(experiment=self, type=0)
185 self.pk = None
192 self.pk = None
186 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
193 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
187 for attr, value in kwargs.items():
194 for attr, value in kwargs.items():
188 setattr(self, attr, value)
195 setattr(self, attr, value)
189
196
190 self.save()
197 self.save()
191
198
192 for conf in confs:
199 for conf in confs:
193 conf.clone(experiment=self, template=False)
200 conf.clone(experiment=self, template=False)
194
201
195 return self
202 return self
196
203
197 def get_status(self):
204 def get_status(self):
198 configurations = Configuration.objects.filter(experiment=self)
205 configurations = Configuration.objects.filter(experiment=self)
199 exp_status=[]
206 exp_status=[]
200 for conf in configurations:
207 for conf in configurations:
201 print conf.status_device()
208 print conf.status_device()
202 exp_status.append(conf.status_device())
209 exp_status.append(conf.status_device())
203
210
204 if not exp_status: #No Configuration
211 if not exp_status: #No Configuration
205 self.status = 4
212 self.status = 4
206 self.save()
213 self.save()
207 return
214 return
208
215
209 total = 1
216 total = 1
210 for e_s in exp_status:
217 for e_s in exp_status:
211 total = total*e_s
218 total = total*e_s
212
219
213 if total == 0: #Error
220 if total == 0: #Error
214 status = 0
221 status = 0
215 elif total == (3**len(exp_status)): #Running
222 elif total == (3**len(exp_status)): #Running
216 status = 2
223 status = 2
217 else:
224 else:
218 status = 1 #Configurated
225 status = 1 #Configurated
219
226
220 self.status = status
227 self.status = status
221 self.save()
228 self.save()
222
229
223 def status_color(self):
230 def status_color(self):
224 color = 'danger'
231 color = 'danger'
225 if self.status == 0:
232 if self.status == 0:
226 color = "danger"
233 color = "danger"
227 elif self.status == 1:
234 elif self.status == 1:
228 color = "info"
235 color = "info"
229 elif self.status == 2:
236 elif self.status == 2:
230 color = "success"
237 color = "success"
231 elif self.status == 3:
238 elif self.status == 3:
232 color = "warning"
239 color = "warning"
233 else:
240 else:
234 color = "muted"
241 color = "muted"
235
242
236 return color
243 return color
237
244
238 def get_absolute_url(self):
245 def get_absolute_url(self):
239 return reverse('url_experiment', args=[str(self.id)])
246 return reverse('url_experiment', args=[str(self.id)])
240
247
241 def parms_to_dict(self):
248 def parms_to_dict(self):
242
249
243 import json
250 import json
244
251
245 configurations = Configuration.objects.filter(experiment=self)
252 configurations = Configuration.objects.filter(experiment=self)
246 conf_parameters = {}
253 conf_parameters = {}
247 parameters={}
254 parameters={}
248
255
249 for configuration in configurations:
256 for configuration in configurations:
250 if 'cgs' in configuration.device.device_type.name:
257 if 'cgs' in configuration.device.device_type.name:
251 conf_parameters['cgs'] = configuration.parms_to_dict()
258 conf_parameters['cgs'] = configuration.parms_to_dict()
252 if 'dds' in configuration.device.device_type.name:
259 if 'dds' in configuration.device.device_type.name:
253 conf_parameters['dds'] = configuration.parms_to_dict()
260 conf_parameters['dds'] = configuration.parms_to_dict()
254 if 'rc' in configuration.device.device_type.name:
261 if 'rc' in configuration.device.device_type.name:
255 conf_parameters['rc'] = configuration.parms_to_dict()
262 conf_parameters['rc'] = configuration.parms_to_dict()
256 if 'jars' in configuration.device.device_type.name:
263 if 'jars' in configuration.device.device_type.name:
257 conf_parameters['jars'] = configuration.parms_to_dict()
264 conf_parameters['jars'] = configuration.parms_to_dict()
258 if 'usrp' in configuration.device.device_type.name:
265 if 'usrp' in configuration.device.device_type.name:
259 conf_parameters['usrp'] = configuration.parms_to_dict()
266 conf_parameters['usrp'] = configuration.parms_to_dict()
260 if 'abs' in configuration.device.device_type.name:
267 if 'abs' in configuration.device.device_type.name:
261 conf_parameters['abs'] = configuration.parms_to_dict()
268 conf_parameters['abs'] = configuration.parms_to_dict()
262
269
263 parameters['configurations'] = conf_parameters
270 parameters['configurations'] = conf_parameters
264 parameters['end_time'] = self.end_time.strftime("%Y-%m-%d")
271 parameters['end_time'] = self.end_time.strftime("%Y-%m-%d")
265 parameters['start_time'] = self.start_time.strftime("%Y-%m-%d")
272 parameters['start_time'] = self.start_time.strftime("%Y-%m-%d")
266 parameters['radar'] = self.radar.name
273 parameters['radar'] = self.radar.name
267 parameters['experiment'] = self.name
274 parameters['experiment'] = self.name
268 parameters = json.dumps(parameters, indent=2)
275 parameters = json.dumps(parameters, indent=2)
269 #parameters = json.dumps(parameters)
276 #parameters = json.dumps(parameters)
270
277
271 return parameters
278 return parameters
272
279
273 def get_absolute_url_export(self):
280 def get_absolute_url_export(self):
274 return reverse('url_export_experiment', args=[str(self.id)])
281 return reverse('url_export_experiment', args=[str(self.id)])
275
282
276
283
277 class Configuration(PolymorphicModel):
284 class Configuration(PolymorphicModel):
278
285
279 template = models.BooleanField(default=False)
286 template = models.BooleanField(default=False)
280
287
281 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
288 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
282
289
283 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
290 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
284 device = models.ForeignKey(Device, on_delete=models.CASCADE)
291 device = models.ForeignKey(Device, on_delete=models.CASCADE)
285
292
286 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
293 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
287
294
288 created_date = models.DateTimeField(auto_now_add=True)
295 created_date = models.DateTimeField(auto_now_add=True)
289 programmed_date = models.DateTimeField(auto_now=True)
296 programmed_date = models.DateTimeField(auto_now=True)
290
297
291 parameters = models.TextField(default='{}')
298 parameters = models.TextField(default='{}')
292
299
293 message = ""
300 message = ""
294
301
295 class Meta:
302 class Meta:
296 db_table = 'db_configurations'
303 db_table = 'db_configurations'
297
304
298 def __unicode__(self):
305 def __unicode__(self):
299
306
300 if self.experiment:
307 if self.experiment:
301 return u'[%s, %s]: %s' % (self.experiment.name,
308 return u'[%s, %s]: %s' % (self.experiment.name,
302 self.device.name,
309 self.device.name,
303 self.name)
310 self.name)
304 else:
311 else:
305 return u'%s' % self.device.name
312 return u'%s' % self.device.name
306
313
307 def clone(self, **kwargs):
314 def clone(self, **kwargs):
308
315
309 self.pk = None
316 self.pk = None
310 self.id = None
317 self.id = None
311 for attr, value in kwargs.items():
318 for attr, value in kwargs.items():
312 setattr(self, attr, value)
319 setattr(self, attr, value)
313
320
314 self.save()
321 self.save()
315
322
316 return self
323 return self
317
324
318 def parms_to_dict(self):
325 def parms_to_dict(self):
319
326
320 parameters = {}
327 parameters = {}
321
328
322 for key in self.__dict__.keys():
329 for key in self.__dict__.keys():
323 parameters[key] = getattr(self, key)
330 parameters[key] = getattr(self, key)
324
331
325 return parameters
332 return parameters
326
333
327 def parms_to_text(self):
334 def parms_to_text(self):
328
335
329 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
336 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
330
337
331 return ''
338 return ''
332
339
333 def parms_to_binary(self):
340 def parms_to_binary(self):
334
341
335 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
342 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
336
343
337 return ''
344 return ''
338
345
339 def dict_to_parms(self, parameters):
346 def dict_to_parms(self, parameters):
340
347
341 if type(parameters) != type({}):
348 if type(parameters) != type({}):
342 return
349 return
343
350
344 for key in parameters.keys():
351 for key in parameters.keys():
345 setattr(self, key, parameters[key])
352 setattr(self, key, parameters[key])
346
353
347 def export_to_file(self, format="json"):
354 def export_to_file(self, format="json"):
348
355
349 import json
356 import json
350
357
351 content_type = ''
358 content_type = ''
352
359
353 if format == 'text':
360 if format == 'text':
354 content_type = 'text/plain'
361 content_type = 'text/plain'
355 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
362 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
356 content = self.parms_to_text()
363 content = self.parms_to_text()
357
364
358 if format == 'binary':
365 if format == 'binary':
359 content_type = 'application/octet-stream'
366 content_type = 'application/octet-stream'
360 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
367 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
361 content = self.parms_to_binary()
368 content = self.parms_to_binary()
362
369
363 if not content_type:
370 if not content_type:
364 content_type = 'application/json'
371 content_type = 'application/json'
365 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
372 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
366 content = json.dumps(self.parms_to_dict(), indent=2)
373 content = json.dumps(self.parms_to_dict(), indent=2)
367
374
368 fields = {'content_type':content_type,
375 fields = {'content_type':content_type,
369 'filename':filename,
376 'filename':filename,
370 'content':content
377 'content':content
371 }
378 }
372
379
373 return fields
380 return fields
374
381
375 def import_from_file(self, fp):
382 def import_from_file(self, fp):
376
383
377 import os, json
384 import os, json
378
385
379 parms = {}
386 parms = {}
380
387
381 path, ext = os.path.splitext(fp.name)
388 path, ext = os.path.splitext(fp.name)
382
389
383 if ext == '.json':
390 if ext == '.json':
384 parms = json.load(fp)
391 parms = json.load(fp)
385
392
386 return parms
393 return parms
387
394
388 def status_device(self):
395 def status_device(self):
389
396
390 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
397 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
391
398
392 return None
399 return None
393
400
394 def stop_device(self):
401 def stop_device(self):
395
402
396 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
403 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
397
404
398 return None
405 return None
399
406
400 def start_device(self):
407 def start_device(self):
401
408
402 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
409 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
403
410
404 return None
411 return None
405
412
406 def write_device(self, parms):
413 def write_device(self, parms):
407
414
408 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
415 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
409
416
410 return None
417 return None
411
418
412 def read_device(self):
419 def read_device(self):
413
420
414 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
421 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
415
422
416 return None
423 return None
417
424
418 def get_absolute_url(self):
425 def get_absolute_url(self):
419 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
426 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
420
427
421 def get_absolute_url_edit(self):
428 def get_absolute_url_edit(self):
422 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
429 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
423
430
424 def get_absolute_url_import(self):
431 def get_absolute_url_import(self):
425 return reverse('url_import_dev_conf', args=[str(self.id)])
432 return reverse('url_import_dev_conf', args=[str(self.id)])
426
433
427 def get_absolute_url_export(self):
434 def get_absolute_url_export(self):
428 return reverse('url_export_dev_conf', args=[str(self.id)])
435 return reverse('url_export_dev_conf', args=[str(self.id)])
429
436
430 def get_absolute_url_write(self):
437 def get_absolute_url_write(self):
431 return reverse('url_write_dev_conf', args=[str(self.id)])
438 return reverse('url_write_dev_conf', args=[str(self.id)])
432
439
433 def get_absolute_url_read(self):
440 def get_absolute_url_read(self):
434 return reverse('url_read_dev_conf', args=[str(self.id)])
441 return reverse('url_read_dev_conf', args=[str(self.id)])
435
442
436 def get_absolute_url_start(self):
443 def get_absolute_url_start(self):
437 return reverse('url_start_dev_conf', args=[str(self.id)])
444 return reverse('url_start_dev_conf', args=[str(self.id)])
438
445
439 def get_absolute_url_stop(self):
446 def get_absolute_url_stop(self):
440 return reverse('url_stop_dev_conf', args=[str(self.id)])
447 return reverse('url_stop_dev_conf', args=[str(self.id)])
441
448
442 def get_absolute_url_status(self):
449 def get_absolute_url_status(self):
443 return reverse('url_status_dev_conf', args=[str(self.id)]) No newline at end of file
450 return reverse('url_status_dev_conf', args=[str(self.id)])
General Comments 0
You need to be logged in to leave comments. Login now