##// END OF EJS Templates
main updated...
Fiorella Quino -
r162:100e11c0e8bf
parent child
Show More
@@ -62,7 +62,7 RADAR_STATES = (
62 (4, 'Scheduled'),
62 (4, 'Scheduled'),
63 )
63 )
64 # Create your models here.
64 # Create your models here.
65
65
66 class Location(models.Model):
66 class Location(models.Model):
67
67
68 name = models.CharField(max_length = 30)
68 name = models.CharField(max_length = 30)
@@ -70,7 +70,7 class Location(models.Model):
70
70
71 class Meta:
71 class Meta:
72 db_table = 'db_location'
72 db_table = 'db_location'
73
73
74 def __unicode__(self):
74 def __unicode__(self):
75 return u'%s' % self.name
75 return u'%s' % self.name
76
76
@@ -85,15 +85,15 class DeviceType(models.Model):
85
85
86 class Meta:
86 class Meta:
87 db_table = 'db_device_types'
87 db_table = 'db_device_types'
88
88
89 def __unicode__(self):
89 def __unicode__(self):
90 return u'%s' % self.get_name_display()
90 return u'%s' % self.get_name_display()
91
91
92 class Device(models.Model):
92 class Device(models.Model):
93
93
94 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
94 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
95 location = models.ForeignKey(Location, on_delete=models.CASCADE)
95 location = models.ForeignKey(Location, on_delete=models.CASCADE)
96
96
97 name = models.CharField(max_length=40, default='')
97 name = models.CharField(max_length=40, default='')
98 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
98 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
99 port_address = models.PositiveSmallIntegerField(default=2000)
99 port_address = models.PositiveSmallIntegerField(default=2000)
@@ -102,14 +102,14 class Device(models.Model):
102
102
103 class Meta:
103 class Meta:
104 db_table = 'db_devices'
104 db_table = 'db_devices'
105
105
106 def __unicode__(self):
106 def __unicode__(self):
107 return u'[{}]: {}'.format(self.device_type.name.upper(),
107 return u'[{}]: {}'.format(self.device_type.name.upper(),
108 self.name)
108 self.name)
109
109
110 def get_status(self):
110 def get_status(self):
111 return self.status
111 return self.status
112
112
113 @property
113 @property
114 def status_color(self):
114 def status_color(self):
115 color = 'muted'
115 color = 'muted'
@@ -121,16 +121,16 class Device(models.Model):
121 color = "info"
121 color = "info"
122 elif self.status == 3:
122 elif self.status == 3:
123 color = "success"
123 color = "success"
124
124
125 return color
125 return color
126
126
127 def get_absolute_url(self):
127 def get_absolute_url(self):
128 return reverse('url_device', args=[str(self.id)])
128 return reverse('url_device', args=[str(self.id)])
129
129
130
130
131 class Campaign(models.Model):
131 class Campaign(models.Model):
132
132
133 template = models.BooleanField(default=False)
133 template = models.BooleanField(default=False)
134 name = models.CharField(max_length=60, unique=True)
134 name = models.CharField(max_length=60, unique=True)
135 start_date = models.DateTimeField(blank=True, null=True)
135 start_date = models.DateTimeField(blank=True, null=True)
136 end_date = models.DateTimeField(blank=True, null=True)
136 end_date = models.DateTimeField(blank=True, null=True)
@@ -141,64 +141,64 class Campaign(models.Model):
141 class Meta:
141 class Meta:
142 db_table = 'db_campaigns'
142 db_table = 'db_campaigns'
143 ordering = ('name',)
143 ordering = ('name',)
144
144
145 def __unicode__(self):
145 def __unicode__(self):
146 if self.template:
146 if self.template:
147 return u'{} (template)'.format(self.name)
147 return u'{} (template)'.format(self.name)
148 else:
148 else:
149 return u'{}'.format(self.name)
149 return u'{}'.format(self.name)
150
150
151
151
152 def parms_to_dict(self):
152 def parms_to_dict(self):
153
153
154 import json
154 import json
155
155
156 parameters = {}
156 parameters = {}
157 exp_parameters = {}
157 exp_parameters = {}
158 experiments = Experiment.objects.filter(campaign = self)
158 experiments = Experiment.objects.filter(campaign = self)
159
159
160 i=1
160 i=1
161 for experiment in experiments:
161 for experiment in experiments:
162 exp_parameters['experiment-'+str(i)] = json.loads(experiment.parms_to_dict())
162 exp_parameters['experiment-'+str(i)] = json.loads(experiment.parms_to_dict())
163 i += 1
163 i += 1
164
164
165
165
166 parameters['experiments'] = exp_parameters
166 parameters['experiments'] = exp_parameters
167 parameters['end_date'] = self.end_date.strftime("%Y-%m-%d")
167 parameters['end_date'] = self.end_date.strftime("%Y-%m-%d")
168 parameters['start_date'] = self.start_date.strftime("%Y-%m-%d")
168 parameters['start_date'] = self.start_date.strftime("%Y-%m-%d")
169 parameters['campaign'] = self.__unicode__()
169 parameters['campaign'] = self.__unicode__()
170 parameters['tags'] =self.tags
170 parameters['tags'] =self.tags
171
171
172 parameters = json.dumps(parameters, indent=2, sort_keys=False)
172 parameters = json.dumps(parameters, indent=2, sort_keys=False)
173
173
174 return parameters
174 return parameters
175
175
176 def import_from_file(self, fp):
176 def import_from_file(self, fp):
177
177
178 import os, json
178 import os, json
179
179
180 parms = {}
180 parms = {}
181
181
182 path, ext = os.path.splitext(fp.name)
182 path, ext = os.path.splitext(fp.name)
183
183
184 if ext == '.json':
184 if ext == '.json':
185 parms = json.load(fp)
185 parms = json.load(fp)
186
186
187 return parms
187 return parms
188
188
189 def dict_to_parms(self, parms, CONF_MODELS):
189 def dict_to_parms(self, parms, CONF_MODELS):
190
190
191 experiments = Experiment.objects.filter(campaign = self)
191 experiments = Experiment.objects.filter(campaign = self)
192 configurations = Configuration.objects.filter(experiment = experiments)
192 configurations = Configuration.objects.filter(experiment = experiments)
193
193
194 if configurations:
194 if configurations:
195 for configuration in configurations:
195 for configuration in configurations:
196 configuration.delete()
196 configuration.delete()
197
197
198 if experiments:
198 if experiments:
199 for experiment in experiments:
199 for experiment in experiments:
200 experiment.delete()
200 experiment.delete()
201
201
202 for parms_exp in parms['experiments']:
202 for parms_exp in parms['experiments']:
203 location = Location.objects.get(name = parms['experiments'][parms_exp]['radar'])
203 location = Location.objects.get(name = parms['experiments'][parms_exp]['radar'])
204 new_exp = Experiment(
204 new_exp = Experiment(
@@ -210,39 +210,39 class Campaign(models.Model):
210 new_exp.save()
210 new_exp.save()
211 new_exp.dict_to_parms(parms['experiments'][parms_exp],CONF_MODELS)
211 new_exp.dict_to_parms(parms['experiments'][parms_exp],CONF_MODELS)
212 new_exp.save()
212 new_exp.save()
213
213
214 self.name = parms['campaign']
214 self.name = parms['campaign']
215 self.start_date = parms['start_date']
215 self.start_date = parms['start_date']
216 self.end_date = parms['end_date']
216 self.end_date = parms['end_date']
217 self.tags = parms['tags']
217 self.tags = parms['tags']
218 self.experiments.add(new_exp)
218 self.experiments.add(new_exp)
219 self.save()
219 self.save()
220
220
221 return self
221 return self
222
222
223 def get_absolute_url(self):
223 def get_absolute_url(self):
224 return reverse('url_campaign', args=[str(self.id)])
224 return reverse('url_campaign', args=[str(self.id)])
225
225
226 def get_absolute_url_edit(self):
226 def get_absolute_url_edit(self):
227 return reverse('url_edit_campaign', args=[str(self.id)])
227 return reverse('url_edit_campaign', args=[str(self.id)])
228
228
229 def get_absolute_url_export(self):
229 def get_absolute_url_export(self):
230 return reverse('url_export_campaign', args=[str(self.id)])
230 return reverse('url_export_campaign', args=[str(self.id)])
231
231
232 def get_absolute_url_import(self):
232 def get_absolute_url_import(self):
233 return reverse('url_import_campaign', args=[str(self.id)])
233 return reverse('url_import_campaign', args=[str(self.id)])
234
234
235
235
236
236
237 class RunningExperiment(models.Model):
237 class RunningExperiment(models.Model):
238 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
238 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
239 running_experiment = models.ManyToManyField('Experiment', blank = True)
239 running_experiment = models.ManyToManyField('Experiment', blank = True)
240 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
240 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
241
241
242
242
243 class Experiment(models.Model):
243 class Experiment(models.Model):
244
244
245 template = models.BooleanField(default=False)
245 template = models.BooleanField(default=False)
246 name = models.CharField(max_length=40, default='', unique=True)
246 name = models.CharField(max_length=40, default='', unique=True)
247 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
247 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
248 start_time = models.TimeField(default='00:00:00')
248 start_time = models.TimeField(default='00:00:00')
@@ -252,58 +252,58 class Experiment(models.Model):
252 class Meta:
252 class Meta:
253 db_table = 'db_experiments'
253 db_table = 'db_experiments'
254 ordering = ('template', 'name')
254 ordering = ('template', 'name')
255
255
256 def __unicode__(self):
256 def __unicode__(self):
257 if self.template:
257 if self.template:
258 return u'%s (template)' % (self.name)
258 return u'%s (template)' % (self.name)
259 else:
259 else:
260 return u'%s' % (self.name)
260 return u'%s' % (self.name)
261
261
262 @property
262 @property
263 def radar_system(self):
263 def radar_system(self):
264 return self.location
264 return self.location
265
265
266 def clone(self, **kwargs):
266 def clone(self, **kwargs):
267
267
268 confs = Configuration.objects.filter(experiment=self, type=0)
268 confs = Configuration.objects.filter(experiment=self, type=0)
269 self.pk = None
269 self.pk = None
270 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
270 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
271 for attr, value in kwargs.items():
271 for attr, value in kwargs.items():
272 setattr(self, attr, value)
272 setattr(self, attr, value)
273
273
274 self.save()
274 self.save()
275
275
276 for conf in confs:
276 for conf in confs:
277 conf.clone(experiment=self, template=False)
277 conf.clone(experiment=self, template=False)
278
278
279 return self
279 return self
280
280
281 def get_status(self):
281 def get_status(self):
282 configurations = Configuration.objects.filter(experiment=self)
282 configurations = Configuration.objects.filter(experiment=self)
283 exp_status=[]
283 exp_status=[]
284 for conf in configurations:
284 for conf in configurations:
285 print conf.status_device()
285 print conf.status_device()
286 exp_status.append(conf.status_device())
286 exp_status.append(conf.status_device())
287
287
288 if not exp_status: #No Configuration
288 if not exp_status: #No Configuration
289 self.status = 4
289 self.status = 4
290 self.save()
290 self.save()
291 return
291 return
292
292
293 total = 1
293 total = 1
294 for e_s in exp_status:
294 for e_s in exp_status:
295 total = total*e_s
295 total = total*e_s
296
296
297 if total == 0: #Error
297 if total == 0: #Error
298 status = 0
298 status = 0
299 elif total == (3**len(exp_status)): #Running
299 elif total == (3**len(exp_status)): #Running
300 status = 2
300 status = 2
301 else:
301 else:
302 status = 1 #Configurated
302 status = 1 #Configurated
303
303
304 self.status = status
304 self.status = status
305 self.save()
305 self.save()
306
306
307 def status_color(self):
307 def status_color(self):
308 color = 'muted'
308 color = 'muted'
309 if self.status == 0:
309 if self.status == 0:
@@ -314,20 +314,20 class Experiment(models.Model):
314 color = "success"
314 color = "success"
315 elif self.status == 3:
315 elif self.status == 3:
316 color = "warning"
316 color = "warning"
317
317
318 return color
318 return color
319
319
320 def get_absolute_url(self):
320 def get_absolute_url(self):
321 return reverse('url_experiment', args=[str(self.id)])
321 return reverse('url_experiment', args=[str(self.id)])
322
322
323 def parms_to_dict(self):
323 def parms_to_dict(self):
324
324
325 import json
325 import json
326
326
327 configurations = Configuration.objects.filter(experiment=self)
327 configurations = Configuration.objects.filter(experiment=self)
328 conf_parameters = {}
328 conf_parameters = {}
329 parameters={}
329 parameters={}
330
330
331 for configuration in configurations:
331 for configuration in configurations:
332 if 'cgs' in configuration.device.device_type.name:
332 if 'cgs' in configuration.device.device_type.name:
333 conf_parameters['cgs'] = configuration.parms_to_dict()
333 conf_parameters['cgs'] = configuration.parms_to_dict()
@@ -341,37 +341,37 class Experiment(models.Model):
341 conf_parameters['usrp'] = configuration.parms_to_dict()
341 conf_parameters['usrp'] = configuration.parms_to_dict()
342 if 'abs' in configuration.device.device_type.name:
342 if 'abs' in configuration.device.device_type.name:
343 conf_parameters['abs'] = configuration.parms_to_dict()
343 conf_parameters['abs'] = configuration.parms_to_dict()
344
344
345 parameters['configurations'] = conf_parameters
345 parameters['configurations'] = conf_parameters
346 parameters['end_time'] = self.end_time.strftime("%H:%M:%S")
346 parameters['end_time'] = self.end_time.strftime("%H:%M:%S")
347 parameters['start_time'] = self.start_time.strftime("%H:%M:%S")
347 parameters['start_time'] = self.start_time.strftime("%H:%M:%S")
348 parameters['radar'] = self.radar_system.name
348 parameters['radar'] = self.radar_system.name
349 parameters['experiment'] = self.name
349 parameters['experiment'] = self.name
350 parameters = json.dumps(parameters, indent=2)
350 parameters = json.dumps(parameters, indent=2)
351
351
352 return parameters
352 return parameters
353
353
354 def import_from_file(self, fp):
354 def import_from_file(self, fp):
355
355
356 import os, json
356 import os, json
357
357
358 parms = {}
358 parms = {}
359
359
360 path, ext = os.path.splitext(fp.name)
360 path, ext = os.path.splitext(fp.name)
361
361
362 if ext == '.json':
362 if ext == '.json':
363 parms = json.load(fp)
363 parms = json.load(fp)
364
364
365 return parms
365 return parms
366
366
367 def dict_to_parms(self, parms, CONF_MODELS):
367 def dict_to_parms(self, parms, CONF_MODELS):
368
368
369 configurations = Configuration.objects.filter(experiment=self)
369 configurations = Configuration.objects.filter(experiment=self)
370
370
371 if configurations:
371 if configurations:
372 for configuration in configurations:
372 for configuration in configurations:
373 configuration.delete()
373 configuration.delete()
374
374
375 for conf_type in parms['configurations']:
375 for conf_type in parms['configurations']:
376 #--For ABS Device:
376 #--For ABS Device:
377 #--For USRP Device:
377 #--For USRP Device:
@@ -419,194 +419,194 class Experiment(models.Model):
419 )
419 )
420 confcgs_form.dict_to_parms(parms['configurations']['cgs'])
420 confcgs_form.dict_to_parms(parms['configurations']['cgs'])
421 confcgs_form.save()
421 confcgs_form.save()
422
422
423 location = Location.objects.get(name = parms['radar'])
423 location = Location.objects.get(name = parms['radar'])
424 self.name = parms['experiment']
424 self.name = parms['experiment']
425 self.location = location
425 self.location = location
426 self.start_time = parms['start_time']
426 self.start_time = parms['start_time']
427 self.end_time = parms['end_time']
427 self.end_time = parms['end_time']
428 self.save()
428 self.save()
429
429
430 return self
430 return self
431
431
432 def get_absolute_url_edit(self):
432 def get_absolute_url_edit(self):
433 return reverse('url_edit_experiment', args=[str(self.id)])
433 return reverse('url_edit_experiment', args=[str(self.id)])
434
434
435 def get_absolute_url_import(self):
435 def get_absolute_url_import(self):
436 return reverse('url_import_experiment', args=[str(self.id)])
436 return reverse('url_import_experiment', args=[str(self.id)])
437
437
438 def get_absolute_url_export(self):
438 def get_absolute_url_export(self):
439 return reverse('url_export_experiment', args=[str(self.id)])
439 return reverse('url_export_experiment', args=[str(self.id)])
440
440
441
441
442 class Configuration(PolymorphicModel):
442 class Configuration(PolymorphicModel):
443
443
444 template = models.BooleanField(default=False)
444 template = models.BooleanField(default=False)
445
445
446 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
446 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
447
447
448 experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
448 experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
449 device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
449 device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
450
450
451 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
451 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
452
452
453 created_date = models.DateTimeField(auto_now_add=True)
453 created_date = models.DateTimeField(auto_now_add=True)
454 programmed_date = models.DateTimeField(auto_now=True)
454 programmed_date = models.DateTimeField(auto_now=True)
455
455
456 parameters = models.TextField(default='{}')
456 parameters = models.TextField(default='{}')
457
457
458 message = ""
458 message = ""
459
459
460 class Meta:
460 class Meta:
461 db_table = 'db_configurations'
461 db_table = 'db_configurations'
462
462
463 def __unicode__(self):
463 def __unicode__(self):
464
464
465 device = '{}:'.format(self.device.device_type.name.upper())
465 device = '{}:'.format(self.device.device_type.name.upper())
466
466
467 if 'mix' in self._meta.get_all_field_names():
467 if 'mix' in self._meta.get_all_field_names():
468 if self.mix:
468 if self.mix:
469 device = '{} MIXED:'.format(self.device.device_type.name.upper())
469 device = '{} MIXED:'.format(self.device.device_type.name.upper())
470
470
471 if self.template:
471 if self.template:
472 return u'{} {} (template)'.format(device, self.name)
472 return u'{} {} (template)'.format(device, self.name)
473 else:
473 else:
474 return u'{} {}'.format(device, self.name)
474 return u'{} {}'.format(device, self.name)
475
475
476 def clone(self, **kwargs):
476 def clone(self, **kwargs):
477
477
478 self.pk = None
478 self.pk = None
479 self.id = None
479 self.id = None
480 for attr, value in kwargs.items():
480 for attr, value in kwargs.items():
481 setattr(self, attr, value)
481 setattr(self, attr, value)
482
482
483 self.save()
483 self.save()
484
484
485 return self
485 return self
486
486
487 def parms_to_dict(self):
487 def parms_to_dict(self):
488
488
489 parameters = {}
489 parameters = {}
490
490
491 for key in self.__dict__.keys():
491 for key in self.__dict__.keys():
492 parameters[key] = getattr(self, key)
492 parameters[key] = getattr(self, key)
493
493
494 return parameters
494 return parameters
495
495
496 def parms_to_text(self):
496 def parms_to_text(self):
497
497
498 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
498 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
499
499
500 return ''
500 return ''
501
501
502 def parms_to_binary(self):
502 def parms_to_binary(self):
503
503
504 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
504 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
505
505
506 return ''
506 return ''
507
507
508 def dict_to_parms(self, parameters):
508 def dict_to_parms(self, parameters):
509
509
510 if type(parameters) != type({}):
510 if type(parameters) != type({}):
511 return
511 return
512
512
513 for key in parameters.keys():
513 for key in parameters.keys():
514 setattr(self, key, parameters[key])
514 setattr(self, key, parameters[key])
515
515
516 def export_to_file(self, format="json"):
516 def export_to_file(self, format="json"):
517
517
518 import json
518 import json
519
519
520 content_type = ''
520 content_type = ''
521
521
522 if format == 'text':
522 if format == 'text':
523 content_type = 'text/plain'
523 content_type = 'text/plain'
524 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
524 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
525 content = self.parms_to_text()
525 content = self.parms_to_text()
526
526
527 if format == 'binary':
527 if format == 'binary':
528 content_type = 'application/octet-stream'
528 content_type = 'application/octet-stream'
529 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
529 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
530 content = self.parms_to_binary()
530 content = self.parms_to_binary()
531
531
532 if not content_type:
532 if not content_type:
533 content_type = 'application/json'
533 content_type = 'application/json'
534 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
534 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
535 content = json.dumps(self.parms_to_dict(), indent=2)
535 content = json.dumps(self.parms_to_dict(), indent=2)
536
536
537 fields = {'content_type':content_type,
537 fields = {'content_type':content_type,
538 'filename':filename,
538 'filename':filename,
539 'content':content
539 'content':content
540 }
540 }
541
541
542 return fields
542 return fields
543
543
544 def import_from_file(self, fp):
544 def import_from_file(self, fp):
545
545
546 import os, json
546 import os, json
547
547
548 parms = {}
548 parms = {}
549
549
550 path, ext = os.path.splitext(fp.name)
550 path, ext = os.path.splitext(fp.name)
551
551
552 if ext == '.json':
552 if ext == '.json':
553 parms = json.load(fp)
553 parms = json.load(fp)
554
554
555 return parms
555 return parms
556
556
557 def status_device(self):
557 def status_device(self):
558
558
559 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
559 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
560
560
561 return None
561 return None
562
562
563 def stop_device(self):
563 def stop_device(self):
564
564
565 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
565 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
566
566
567 return None
567 return None
568
568
569 def start_device(self):
569 def start_device(self):
570
570
571 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
571 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
572
572
573 return None
573 return None
574
574
575 def write_device(self, parms):
575 def write_device(self, parms):
576
576
577 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
577 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
578
578
579 return None
579 return None
580
580
581 def read_device(self):
581 def read_device(self):
582
582
583 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
583 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
584
584
585 return None
585 return None
586
586
587 def get_absolute_url(self):
587 def get_absolute_url(self):
588 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
588 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
589
589
590 def get_absolute_url_edit(self):
590 def get_absolute_url_edit(self):
591 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
591 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
592
592
593 def get_absolute_url_import(self):
593 def get_absolute_url_import(self):
594 return reverse('url_import_dev_conf', args=[str(self.id)])
594 return reverse('url_import_dev_conf', args=[str(self.id)])
595
595
596 def get_absolute_url_export(self):
596 def get_absolute_url_export(self):
597 return reverse('url_export_dev_conf', args=[str(self.id)])
597 return reverse('url_export_dev_conf', args=[str(self.id)])
598
598
599 def get_absolute_url_write(self):
599 def get_absolute_url_write(self):
600 return reverse('url_write_dev_conf', args=[str(self.id)])
600 return reverse('url_write_dev_conf', args=[str(self.id)])
601
601
602 def get_absolute_url_read(self):
602 def get_absolute_url_read(self):
603 return reverse('url_read_dev_conf', args=[str(self.id)])
603 return reverse('url_read_dev_conf', args=[str(self.id)])
604
604
605 def get_absolute_url_start(self):
605 def get_absolute_url_start(self):
606 return reverse('url_start_dev_conf', args=[str(self.id)])
606 return reverse('url_start_dev_conf', args=[str(self.id)])
607
607
608 def get_absolute_url_stop(self):
608 def get_absolute_url_stop(self):
609 return reverse('url_stop_dev_conf', args=[str(self.id)])
609 return reverse('url_stop_dev_conf', args=[str(self.id)])
610
610
611 def get_absolute_url_status(self):
611 def get_absolute_url_status(self):
612 return reverse('url_status_dev_conf', args=[str(self.id)]) No newline at end of file
612 return reverse('url_status_dev_conf', args=[str(self.id)])
@@ -21,7 +21,7
21 </style>
21 </style>
22 <!--[if lt IE 9]>
22 <!--[if lt IE 9]>
23 <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
23 <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
24 <![endif]-->
24 <![endif]-->
25 <script src="{% static 'js/jquery.min.js' %}"></script>
25 <script src="{% static 'js/jquery.min.js' %}"></script>
26 {% block extra-head %}
26 {% block extra-head %}
27 {% endblock %}
27 {% endblock %}
@@ -39,32 +39,32
39 <span class="icon-bar"></span>
39 <span class="icon-bar"></span>
40 <span class="icon-bar"></span>
40 <span class="icon-bar"></span>
41 </button>
41 </button>
42 <a class="navbar-brand" href="{% url 'index' %}" style="padding-top:1px"><img class="logo" alt="JRO" src="{% static "images/logo-jro-white-trans.png" %}"></a>
42 <a class="navbar-brand" href="{% url 'index' %}" style="padding-top:1px"><img class="logo" alt="JRO" src="{% static "images/logo-jro-color-trans.png" %}"></a>
43 </div>
43 </div>
44 <div class="collapse navbar-collapse" id="navigationbar">
44 <div class="collapse navbar-collapse" id="navigationbar">
45 <ul class="nav navbar-nav">
45 <ul class="nav navbar-nav">
46 <li class=" dropdown {% block operation-active %}{% endblock %}"><a href="{% url 'url_operation'%}">Operation</a>
46 <li class=" dropdown {% block operation-active %}{% endblock %}"><a href="{% url 'url_operation'%}">Operation</a>
47 </li>
47 </li>
48 <li class=" dropdown {% block new-active %}{% endblock %}">
48 <li class=" dropdown {% block new-active %}{% endblock %}">
49 <a href="#" class="dropdown-toggle" data-toggle="dropdown">New<span class="caret"></span></a>
49 <a href="#" class="dropdown-toggle" data-toggle="dropdown">New<span class="caret"></span></a>
50 <ul class="dropdown-menu" role="menu">
50 <ul class="dropdown-menu" role="menu">
51 <li><a href="{% url 'url_add_campaign' %}">Campaign</a></li>
51 <li><a href="{% url 'url_add_campaign' %}">Campaign</a></li>
52 <li><a href="{% url 'url_add_experiment' %}">Experiment</a></li>
52 <li><a href="{% url 'url_add_experiment' %}">Experiment</a></li>
53 <li><a href="{% url 'url_add_dev_conf' 0%}">Device Configuration</a></li>
53 <li><a href="{% url 'url_add_dev_conf' 0%}">Device Configuration</a></li>
54 <li><a href="{% url 'url_add_device'%}">Device</a></li>
54 <li><a href="{% url 'url_add_device'%}">Device</a></li>
55 <li><a href="{% url 'url_add_location'%}">Radar System</a></li>
55 <li><a href="{% url 'url_add_location'%}">Radar System</a></li>
56 </ul>
56 </ul>
57 </li>
57 </li>
58 <li class=" dropdown {% block search-active %}{% endblock %}">
58 <li class=" dropdown {% block search-active %}{% endblock %}">
59 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Search<span class="caret"></span></a>
59 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Search<span class="caret"></span></a>
60 <ul class="dropdown-menu" role="menu">
60 <ul class="dropdown-menu" role="menu">
61 <li><a href="{% url 'url_campaigns' %}">Campaigns</a></li>
61 <li><a href="{% url 'url_campaigns' %}">Campaigns</a></li>
62 <li><a href="{% url 'url_experiments' %}">Experiments</a></li>
62 <li><a href="{% url 'url_experiments' %}">Experiments</a></li>
63 <li><a href="{% url 'url_dev_confs' %}">Configurations</a></li>
63 <li><a href="{% url 'url_dev_confs' %}">Configurations</a></li>
64 <li><a href="{% url 'url_devices' %}">Devices</a></li>
64 <li><a href="{% url 'url_devices' %}">Devices</a></li>
65 <li><a href="{% url 'url_locations' %}">Radar Systems</a></li>
65 <li><a href="{% url 'url_locations' %}">Radar Systems</a></li>
66 </ul>
66 </ul>
67 </li>
67 </li>
68 </ul>
68 </ul>
69 <ul class="nav navbar-nav navbar-right">
69 <ul class="nav navbar-nav navbar-right">
70 <li class="nav-divider"></li>
70 <li class="nav-divider"></li>
@@ -78,7 +78,7
78 </li>
78 </li>
79 {% else %}
79 {% else %}
80 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
80 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
81 {% endif %}
81 {% endif %}
82 </ul>
82 </ul>
83 </div>
83 </div>
84 </div>
84 </div>
@@ -89,15 +89,24
89 <div class="container">
89 <div class="container">
90 <div id="page" class="row" style="min-height:600px">
90 <div id="page" class="row" style="min-height:600px">
91
91
92 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
92 {% if no_sidebar %}
93 <div class="col-md-0 hidden-xs hidden-sm" role="complementary">
94
95 {% else %}
96 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
97 {% endif %}
93 <br><br>
98 <br><br>
94 <div id="sidebar">
99 <div id="sidebar">
95 {% block sidebar%}
100 {% block sidebar%}
96 {% endblock %}
101 {% endblock %}
97 </div>
102 </div>
98 </div>
103 </div>
99
104
100 <div class="col-md-9 col-xs-12" role="main">
105 {% if no_sidebar %}
106 <div class="col-md-12 col-xs-12" role="main">
107 {% else %}
108 <div class="col-md-9 col-xs-12" role="main">
109 {% endif %}
101 <div class="page-header">
110 <div class="page-header">
102 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
111 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
103 </div>
112 </div>
@@ -111,13 +120,14
111 {% endfor %}
120 {% endfor %}
112 {% endif %}
121 {% endif %}
113 {% endblock %}
122 {% endblock %}
114
123
115 {% block content %}
124 {% block content %}
116 {% endblock %}
125 {% endblock %}
117
126
118 </div>
127 </div>
119
128
120 </div><!--/row-->
129
130 </div><!--/row-->
121 </div> <!-- container -->
131 </div> <!-- container -->
122
132
123 <div id="debug">{{debug}}</div>
133 <div id="debug">{{debug}}</div>
@@ -127,7 +137,7
127 <div class="container">
137 <div class="container">
128 <p><hr></p>
138 <p><hr></p>
129 <p>
139 <p>
130 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
140 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
131 </p>
141 </p>
132 </div>
142 </div>
133 </footer>
143 </footer>
@@ -140,4 +150,3
140 {% endblock%}
150 {% endblock%}
141 </body>
151 </body>
142 </html>
152 </html>
143
General Comments 0
You need to be logged in to leave comments. Login now