@@ -0,0 +1,1 | |||||
|
1 | {% extends "campaign_edit.html" %} No newline at end of file |
@@ -0,0 +1,1 | |||||
|
1 | {% extends "experiment_edit.html" %} No newline at end of file |
@@ -38,6 +38,8 class CGSConfiguration(Configuration): | |||||
38 |
|
38 | |||
39 | parameters = {} |
|
39 | parameters = {} | |
40 |
|
40 | |||
|
41 | parameters['device_id'] = self.device.id | |||
|
42 | ||||
41 | if self.freq0 == None or self.freq0 == '': |
|
43 | if self.freq0 == None or self.freq0 == '': | |
42 | parameters['freq0'] = 0 |
|
44 | parameters['freq0'] = 0 | |
43 | else: |
|
45 | else: | |
@@ -58,10 +60,17 class CGSConfiguration(Configuration): | |||||
58 | else: |
|
60 | else: | |
59 | parameters['freq3'] = self.freq3 |
|
61 | parameters['freq3'] = self.freq3 | |
60 |
|
62 | |||
61 |
|
||||
62 | return parameters |
|
63 | return parameters | |
63 |
|
64 | |||
64 |
|
65 | |||
|
66 | def dict_to_parms(self, parameters): | |||
|
67 | ||||
|
68 | self.freq0 = parameters['freq0'] | |||
|
69 | self.freq1 = parameters['freq1'] | |||
|
70 | self.freq2 = parameters['freq2'] | |||
|
71 | self.freq3 = parameters['freq3'] | |||
|
72 | ||||
|
73 | ||||
65 | def status_device(self): |
|
74 | def status_device(self): | |
66 |
|
75 | |||
67 | import requests |
|
76 | import requests |
@@ -73,6 +73,8 class DDSConfiguration(Configuration): | |||||
73 |
|
73 | |||
74 | parameters = {} |
|
74 | parameters = {} | |
75 |
|
75 | |||
|
76 | parameters['device_id'] = self.device.id | |||
|
77 | ||||
76 | parameters['clock'] = float(self.clock) |
|
78 | parameters['clock'] = float(self.clock) | |
77 | parameters['multiplier'] = int(self.multiplier) |
|
79 | parameters['multiplier'] = int(self.multiplier) | |
78 |
|
80 |
@@ -6,6 +6,7 from polymorphic import PolymorphicModel | |||||
6 |
|
6 | |||
7 | from django.core.urlresolvers import reverse |
|
7 | from django.core.urlresolvers import reverse | |
8 |
|
8 | |||
|
9 | ||||
9 | CONF_STATES = ( |
|
10 | CONF_STATES = ( | |
10 | (0, 'Disconnected'), |
|
11 | (0, 'Disconnected'), | |
11 | (1, 'Connected'), |
|
12 | (1, 'Connected'), | |
@@ -146,18 +147,41 class Campaign(models.Model): | |||||
146 | i += 1 |
|
147 | i += 1 | |
147 |
|
148 | |||
148 |
|
149 | |||
149 | parameters['experimets'] =exp_parameters |
|
150 | parameters['experiments'] = exp_parameters | |
150 | parameters['end_date'] = self.end_date.strftime("%Y-%m-%d") |
|
151 | parameters['end_date'] = self.end_date.strftime("%Y-%m-%d") | |
151 | parameters['start_date'] = self.start_date.strftime("%Y-%m-%d") |
|
152 | parameters['start_date'] = self.start_date.strftime("%Y-%m-%d") | |
152 | parameters['campaign'] = self.__unicode__() |
|
153 | parameters['campaign'] = self.__unicode__() | |
|
154 | parameters['tags'] =self.tags | |||
153 |
|
155 | |||
154 | parameters = json.dumps(parameters, indent=2, sort_keys=False) |
|
156 | parameters = json.dumps(parameters, indent=2, sort_keys=False) | |
155 |
|
157 | |||
156 | return parameters |
|
158 | return parameters | |
157 |
|
159 | |||
|
160 | def import_from_file(self, fp): | |||
|
161 | ||||
|
162 | import os, json | |||
|
163 | ||||
|
164 | parms = {} | |||
|
165 | ||||
|
166 | path, ext = os.path.splitext(fp.name) | |||
|
167 | ||||
|
168 | if ext == '.json': | |||
|
169 | parms = json.load(fp) | |||
|
170 | ||||
|
171 | return parms | |||
|
172 | ||||
|
173 | def get_absolute_url(self): | |||
|
174 | return reverse('url_campaign', args=[str(self.id)]) | |||
|
175 | ||||
|
176 | def get_absolute_url_edit(self): | |||
|
177 | return reverse('url_edit_campaign', args=[str(self.id)]) | |||
|
178 | ||||
158 | def get_absolute_url_export(self): |
|
179 | def get_absolute_url_export(self): | |
159 | return reverse('url_export_campaign', args=[str(self.id)]) |
|
180 | return reverse('url_export_campaign', args=[str(self.id)]) | |
160 |
|
181 | |||
|
182 | def get_absolute_url_import(self): | |||
|
183 | return reverse('url_import_campaign', args=[str(self.id)]) | |||
|
184 | ||||
161 |
|
185 | |||
162 |
|
186 | |||
163 | class RunningExperiment(models.Model): |
|
187 | class RunningExperiment(models.Model): | |
@@ -169,7 +193,6 class RunningExperiment(models.Model): | |||||
169 | class Experiment(models.Model): |
|
193 | class Experiment(models.Model): | |
170 |
|
194 | |||
171 | template = models.BooleanField(default=False) |
|
195 | template = models.BooleanField(default=False) | |
172 | location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) |
|
|||
173 | name = models.CharField(max_length=40, default='', unique=True) |
|
196 | name = models.CharField(max_length=40, default='', unique=True) | |
174 | location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) |
|
197 | location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) | |
175 | start_time = models.TimeField(default='00:00:00') |
|
198 | start_time = models.TimeField(default='00:00:00') | |
@@ -272,15 +295,84 class Experiment(models.Model): | |||||
272 | conf_parameters['abs'] = configuration.parms_to_dict() |
|
295 | conf_parameters['abs'] = configuration.parms_to_dict() | |
273 |
|
296 | |||
274 | parameters['configurations'] = conf_parameters |
|
297 | parameters['configurations'] = conf_parameters | |
275 |
parameters['end_time'] = self.end_time.strftime("% |
|
298 | parameters['end_time'] = self.end_time.strftime("%H:%M:%S") | |
276 |
parameters['start_time'] = self.start_time.strftime("% |
|
299 | parameters['start_time'] = self.start_time.strftime("%H:%M:%S") | |
277 | parameters['radar'] = self.radar.name |
|
300 | parameters['radar'] = self.radar.name | |
278 | parameters['experiment'] = self.name |
|
301 | parameters['experiment'] = self.name | |
279 | parameters = json.dumps(parameters, indent=2) |
|
302 | parameters = json.dumps(parameters, indent=2) | |
280 | #parameters = json.dumps(parameters) |
|
|||
281 |
|
303 | |||
282 | return parameters |
|
304 | return parameters | |
283 |
|
305 | |||
|
306 | def import_from_file(self, fp): | |||
|
307 | ||||
|
308 | import os, json | |||
|
309 | ||||
|
310 | parms = {} | |||
|
311 | ||||
|
312 | path, ext = os.path.splitext(fp.name) | |||
|
313 | ||||
|
314 | if ext == '.json': | |||
|
315 | parms = json.load(fp) | |||
|
316 | ||||
|
317 | return parms | |||
|
318 | ||||
|
319 | def dict_to_parms(self, parms, CONF_MODELS): | |||
|
320 | ||||
|
321 | #self.name = parameters['experiment'] | |||
|
322 | #self.location = parameters['radar'] | |||
|
323 | #self.start_time = parameters['start_time'] | |||
|
324 | #self.end_time = parameters['end_time'] | |||
|
325 | ||||
|
326 | configurations = Configuration.objects.filter(experiment=self) | |||
|
327 | ||||
|
328 | if configurations: | |||
|
329 | for configuration in configurations: | |||
|
330 | configuration.delete() | |||
|
331 | ||||
|
332 | for conf_type in parms['configurations']: | |||
|
333 | #--For ABS Device: | |||
|
334 | #--For USRP Device: | |||
|
335 | #--For JARS Device: | |||
|
336 | #--For RC Device: | |||
|
337 | if conf_type == 'rc': | |||
|
338 | device = get_object_or_404(Device, pk=parms['configurations']['rc']['device_id']) | |||
|
339 | DevConfModel = CONF_MODELS[conf_type] | |||
|
340 | confrc_form = DevConfModel( | |||
|
341 | experiment = self, | |||
|
342 | name = 'RC', | |||
|
343 | device=device, | |||
|
344 | ) | |||
|
345 | confrc_form.dict_to_parms(parms['configurations']['rc']) | |||
|
346 | confrc_form.save() | |||
|
347 | #--For DDS Device: | |||
|
348 | if conf_type == 'dds': | |||
|
349 | device = get_object_or_404(Device, pk=parms['configurations']['dds']['device_id']) | |||
|
350 | DevConfModel = CONF_MODELS[conf_type] | |||
|
351 | confdds_form = DevConfModel( | |||
|
352 | experiment = self, | |||
|
353 | name = 'DDS', | |||
|
354 | device=device, | |||
|
355 | ) | |||
|
356 | confdds_form.dict_to_parms(parms['configurations']['dds']) | |||
|
357 | confdds_form.save() | |||
|
358 | #--For CGS Device: | |||
|
359 | if conf_type == 'cgs': | |||
|
360 | device = get_object_or_404(Device, pk=parms['configurations']['cgs']['device_id']) | |||
|
361 | DevConfModel = CONF_MODELS[conf_type] | |||
|
362 | confcgs_form = DevConfModel( | |||
|
363 | experiment = self, | |||
|
364 | name = 'CGS', | |||
|
365 | device=device, | |||
|
366 | ) | |||
|
367 | confcgs_form.dict_to_parms(parms['configurations']['cgs']) | |||
|
368 | confcgs_form.save() | |||
|
369 | ||||
|
370 | def get_absolute_url_edit(self): | |||
|
371 | return reverse('url_edit_experiment', args=[str(self.id)]) | |||
|
372 | ||||
|
373 | def get_absolute_url_import(self): | |||
|
374 | return reverse('url_import_experiment', args=[str(self.id)]) | |||
|
375 | ||||
284 | def get_absolute_url_export(self): |
|
376 | def get_absolute_url_export(self): | |
285 | return reverse('url_export_experiment', args=[str(self.id)]) |
|
377 | return reverse('url_export_experiment', args=[str(self.id)]) | |
286 |
|
378 |
@@ -19,7 +19,7 | |||||
19 | <ul class="dropdown-menu" role="menu"> |
|
19 | <ul class="dropdown-menu" role="menu"> | |
20 | <li><a href="{% url 'url_edit_campaign' campaign.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> |
|
20 | <li><a href="{% url 'url_edit_campaign' campaign.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> | |
21 | <li><a href="{% url 'url_delete_campaign' campaign.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> |
|
21 | <li><a href="{% url 'url_delete_campaign' campaign.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> | |
22 |
<li><a href="{{ |
|
22 | <li><a href="{{ campaign.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li> | |
23 | <li><a href="{{ campaign.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> |
|
23 | <li><a href="{{ campaign.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> | |
24 | {% block extra-menu-actions %} |
|
24 | {% block extra-menu-actions %} | |
25 | {% endblock %} |
|
25 | {% endblock %} |
@@ -19,13 +19,14 | |||||
19 | <ul class="dropdown-menu" role="menu"> |
|
19 | <ul class="dropdown-menu" role="menu"> | |
20 | <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> |
|
20 | <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> | |
21 | <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> |
|
21 | <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> | |
22 |
<li><a href="{{ |
|
22 | <li><a href="{{ experiment.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li> | |
23 | <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> |
|
23 | <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> | |
24 | {% block extra-menu-actions %} |
|
24 | {% block extra-menu-actions %} | |
25 | {% endblock %} |
|
25 | {% endblock %} | |
26 | <li><a>----------------</a></li> |
|
26 | <li><a>----------------</a></li> | |
27 | <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li> |
|
27 | <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li> | |
28 | <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li> |
|
28 | <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li> | |
|
29 | ||||
29 | </ul> |
|
30 | </ul> | |
30 | </span> |
|
31 | </span> | |
31 | {% endblock %} |
|
32 | {% endblock %} |
@@ -19,6 +19,7 urlpatterns = ( | |||||
19 | url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.campaign_edit', name='url_edit_campaign'), |
|
19 | url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.campaign_edit', name='url_edit_campaign'), | |
20 | url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.campaign_delete', name='url_delete_campaign'), |
|
20 | url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.campaign_delete', name='url_delete_campaign'), | |
21 | url(r'^campaign/(?P<id_camp>-?\d+)/export/$', 'apps.main.views.campaign_export', name='url_export_campaign'), |
|
21 | url(r'^campaign/(?P<id_camp>-?\d+)/export/$', 'apps.main.views.campaign_export', name='url_export_campaign'), | |
|
22 | url(r'^campaign/(?P<id_camp>-?\d+)/import/$', 'apps.main.views.campaign_import', name='url_import_campaign'), | |||
22 |
|
23 | |||
23 | url(r'^experiment/new/$', 'apps.main.views.experiment_new', name='url_add_experiment'), |
|
24 | url(r'^experiment/new/$', 'apps.main.views.experiment_new', name='url_add_experiment'), | |
24 | url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'), |
|
25 | url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'), | |
@@ -26,6 +27,7 urlpatterns = ( | |||||
26 | url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.experiment_edit', name='url_edit_experiment'), |
|
27 | url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.experiment_edit', name='url_edit_experiment'), | |
27 | url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.experiment_delete', name='url_delete_experiment'), |
|
28 | url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.experiment_delete', name='url_delete_experiment'), | |
28 | url(r'^experiment/(?P<id_exp>-?\d+)/export/$', 'apps.main.views.experiment_export', name='url_export_experiment'), |
|
29 | url(r'^experiment/(?P<id_exp>-?\d+)/export/$', 'apps.main.views.experiment_export', name='url_export_experiment'), | |
|
30 | url(r'^experiment/(?P<id_exp>-?\d+)/import/$', 'apps.main.views.experiment_import', name='url_import_experiment'), | |||
29 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', 'apps.main.views.experiment_mix', name='url_mix_experiment'), |
|
31 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', 'apps.main.views.experiment_mix', name='url_mix_experiment'), | |
30 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', 'apps.main.views.experiment_mix_delete', name='url_delete_mix_experiment'), |
|
32 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', 'apps.main.views.experiment_mix_delete', name='url_delete_mix_experiment'), | |
31 |
|
33 |
@@ -426,6 +426,64 def campaign_export(request, id_camp): | |||||
426 |
|
426 | |||
427 | return response |
|
427 | return response | |
428 |
|
428 | |||
|
429 | ||||
|
430 | def campaign_import(request, id_camp): | |||
|
431 | ###------FALTA CORREGIR!!!!!-----### | |||
|
432 | campaign = get_object_or_404(Campaign, pk=id_camp) | |||
|
433 | experiments = Experiment.objects.filter(campaign=campaign) | |||
|
434 | configurations = Configuration.objects.filter(experiment=experiments) | |||
|
435 | ||||
|
436 | if request.method == 'GET': | |||
|
437 | file_form = UploadFileForm() | |||
|
438 | ||||
|
439 | if request.method == 'POST': | |||
|
440 | file_form = UploadFileForm(request.POST, request.FILES) | |||
|
441 | ||||
|
442 | if file_form.is_valid(): | |||
|
443 | ||||
|
444 | parms = campaign.import_from_file(request.FILES['file']) | |||
|
445 | ||||
|
446 | if parms: | |||
|
447 | location = Location.objects.get(name = parms['radar']) | |||
|
448 | parms['location'] = location.id | |||
|
449 | parms['name'] = parms['experiment'] | |||
|
450 | ||||
|
451 | campaign.dict_to_parms(parms, CONF_MODELS) | |||
|
452 | ||||
|
453 | messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name) | |||
|
454 | ||||
|
455 | form = CampaignForm(initial=parms, instance=campaign) | |||
|
456 | ||||
|
457 | kwargs = {} | |||
|
458 | #kwargs['id_dev'] = conf.id | |||
|
459 | kwargs['form'] = form | |||
|
460 | kwargs['title'] = 'Campaign' | |||
|
461 | kwargs['suptitle'] = 'Parameters imported' | |||
|
462 | kwargs['button'] = 'Save' | |||
|
463 | kwargs['action'] = campaign.get_absolute_url_edit() | |||
|
464 | kwargs['previous'] = campaign.get_absolute_url() | |||
|
465 | ||||
|
466 | ||||
|
467 | ###### SIDEBAR ###### | |||
|
468 | #kwargs.update(sidebar(conf=conf)) | |||
|
469 | #kwargs.update(sidebar(campaign=campaign)) | |||
|
470 | ||||
|
471 | return render(request, 'campaign_edit.html', kwargs) | |||
|
472 | ||||
|
473 | messages.error(request, "Could not import parameters from file") | |||
|
474 | ||||
|
475 | kwargs = {} | |||
|
476 | #kwargs['id_dev'] = conf.id | |||
|
477 | kwargs['title'] = 'Campaign' | |||
|
478 | kwargs['form'] = file_form | |||
|
479 | kwargs['suptitle'] = 'Importing file' | |||
|
480 | kwargs['button'] = 'Import' | |||
|
481 | ||||
|
482 | #kwargs.update(sidebar(campaign=campaign)) | |||
|
483 | ||||
|
484 | return render(request, 'campaign_import.html', kwargs) | |||
|
485 | ||||
|
486 | ||||
429 | def experiments(request): |
|
487 | def experiments(request): | |
430 |
|
488 | |||
431 | experiment_list = Experiment.objects.all() |
|
489 | experiment_list = Experiment.objects.all() | |
@@ -572,6 +630,59 def experiment_export(request, id_exp): | |||||
572 |
|
630 | |||
573 | return response |
|
631 | return response | |
574 |
|
632 | |||
|
633 | def experiment_import(request, id_exp): | |||
|
634 | ||||
|
635 | experiment = get_object_or_404(Experiment, pk=id_exp) | |||
|
636 | configurations = Configuration.objects.filter(experiment=experiment) | |||
|
637 | ||||
|
638 | if request.method == 'GET': | |||
|
639 | file_form = UploadFileForm() | |||
|
640 | ||||
|
641 | if request.method == 'POST': | |||
|
642 | file_form = UploadFileForm(request.POST, request.FILES) | |||
|
643 | ||||
|
644 | if file_form.is_valid(): | |||
|
645 | ||||
|
646 | parms = experiment.import_from_file(request.FILES['file']) | |||
|
647 | ||||
|
648 | if parms: | |||
|
649 | location = Location.objects.get(name = parms['radar']) | |||
|
650 | parms['location'] = location.id | |||
|
651 | parms['name'] = parms['experiment'] | |||
|
652 | ||||
|
653 | experiment.dict_to_parms(parms, CONF_MODELS) | |||
|
654 | ||||
|
655 | messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name) | |||
|
656 | ||||
|
657 | form = ExperimentForm(initial=parms, instance=experiment) | |||
|
658 | ||||
|
659 | kwargs = {} | |||
|
660 | #kwargs['id_dev'] = conf.id | |||
|
661 | kwargs['form'] = form | |||
|
662 | kwargs['title'] = 'Experiment' | |||
|
663 | kwargs['suptitle'] = 'Parameters imported' | |||
|
664 | kwargs['button'] = 'Save' | |||
|
665 | kwargs['action'] = experiment.get_absolute_url_edit() | |||
|
666 | kwargs['previous'] = experiment.get_absolute_url() | |||
|
667 | ||||
|
668 | ###### SIDEBAR ###### | |||
|
669 | #kwargs.update(sidebar(conf=conf)) | |||
|
670 | kwargs.update(sidebar(experiment=experiment)) | |||
|
671 | ||||
|
672 | return render(request, 'experiment_edit.html', kwargs) | |||
|
673 | ||||
|
674 | messages.error(request, "Could not import parameters from file") | |||
|
675 | ||||
|
676 | kwargs = {} | |||
|
677 | #kwargs['id_dev'] = conf.id | |||
|
678 | kwargs['title'] = 'Experiment' | |||
|
679 | kwargs['form'] = file_form | |||
|
680 | kwargs['suptitle'] = 'Importing file' | |||
|
681 | kwargs['button'] = 'Import' | |||
|
682 | ||||
|
683 | kwargs.update(sidebar(experiment=experiment)) | |||
|
684 | ||||
|
685 | return render(request, 'experiment_import.html', kwargs) | |||
575 |
|
686 | |||
576 | def experiment_mix(request, id_exp): |
|
687 | def experiment_mix(request, id_exp): | |
577 |
|
688 |
General Comments 0
You need to be logged in to leave comments.
Login now