@@ -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 | 39 | parameters = {} |
|
40 | 40 | |
|
41 | parameters['device_id'] = self.device.id | |
|
42 | ||
|
41 | 43 | if self.freq0 == None or self.freq0 == '': |
|
42 | 44 | parameters['freq0'] = 0 |
|
43 | 45 | else: |
@@ -58,10 +60,17 class CGSConfiguration(Configuration): | |||
|
58 | 60 | else: |
|
59 | 61 | parameters['freq3'] = self.freq3 |
|
60 | 62 | |
|
61 | ||
|
62 | 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 | 74 | def status_device(self): |
|
66 | 75 | |
|
67 | 76 | import requests |
@@ -73,6 +73,8 class DDSConfiguration(Configuration): | |||
|
73 | 73 | |
|
74 | 74 | parameters = {} |
|
75 | 75 | |
|
76 | parameters['device_id'] = self.device.id | |
|
77 | ||
|
76 | 78 | parameters['clock'] = float(self.clock) |
|
77 | 79 | parameters['multiplier'] = int(self.multiplier) |
|
78 | 80 |
@@ -6,6 +6,7 from polymorphic import PolymorphicModel | |||
|
6 | 6 | |
|
7 | 7 | from django.core.urlresolvers import reverse |
|
8 | 8 | |
|
9 | ||
|
9 | 10 | CONF_STATES = ( |
|
10 | 11 | (0, 'Disconnected'), |
|
11 | 12 | (1, 'Connected'), |
@@ -146,18 +147,41 class Campaign(models.Model): | |||
|
146 | 147 | i += 1 |
|
147 | 148 | |
|
148 | 149 | |
|
149 | parameters['experimets'] =exp_parameters | |
|
150 | parameters['end_date'] = self.end_date.strftime("%Y-%m-%d") | |
|
151 | parameters['start_date'] = self.start_date.strftime("%Y-%m-%d") | |
|
152 | parameters['campaign'] = self.__unicode__() | |
|
150 | parameters['experiments'] = exp_parameters | |
|
151 | parameters['end_date'] = self.end_date.strftime("%Y-%m-%d") | |
|
152 | parameters['start_date'] = self.start_date.strftime("%Y-%m-%d") | |
|
153 | parameters['campaign'] = self.__unicode__() | |
|
154 | parameters['tags'] =self.tags | |
|
153 | 155 | |
|
154 | 156 | parameters = json.dumps(parameters, indent=2, sort_keys=False) |
|
155 | 157 | |
|
156 | 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 | 179 | def get_absolute_url_export(self): |
|
159 | 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 | 187 | class RunningExperiment(models.Model): |
@@ -169,7 +193,6 class RunningExperiment(models.Model): | |||
|
169 | 193 | class Experiment(models.Model): |
|
170 | 194 | |
|
171 | 195 | template = models.BooleanField(default=False) |
|
172 | location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) | |
|
173 | 196 | name = models.CharField(max_length=40, default='', unique=True) |
|
174 | 197 | location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) |
|
175 | 198 | start_time = models.TimeField(default='00:00:00') |
@@ -272,15 +295,84 class Experiment(models.Model): | |||
|
272 | 295 | conf_parameters['abs'] = configuration.parms_to_dict() |
|
273 | 296 | |
|
274 | 297 | parameters['configurations'] = conf_parameters |
|
275 |
parameters['end_time'] = self.end_time.strftime("% |
|
|
276 |
parameters['start_time'] = self.start_time.strftime("% |
|
|
277 | parameters['radar'] = self.radar.name | |
|
278 | parameters['experiment'] = self.name | |
|
298 | parameters['end_time'] = self.end_time.strftime("%H:%M:%S") | |
|
299 | parameters['start_time'] = self.start_time.strftime("%H:%M:%S") | |
|
300 | parameters['radar'] = self.radar.name | |
|
301 | parameters['experiment'] = self.name | |
|
279 | 302 | parameters = json.dumps(parameters, indent=2) |
|
280 | #parameters = json.dumps(parameters) | |
|
281 | 303 | |
|
282 | 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 | 376 | def get_absolute_url_export(self): |
|
285 | 377 | return reverse('url_export_experiment', args=[str(self.id)]) |
|
286 | 378 |
@@ -19,7 +19,7 | |||
|
19 | 19 | <ul class="dropdown-menu" role="menu"> |
|
20 | 20 | <li><a href="{% url 'url_edit_campaign' campaign.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> |
|
21 | 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 | 23 | <li><a href="{{ campaign.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> |
|
24 | 24 | {% block extra-menu-actions %} |
|
25 | 25 | {% endblock %} |
@@ -19,13 +19,14 | |||
|
19 | 19 | <ul class="dropdown-menu" role="menu"> |
|
20 | 20 | <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> |
|
21 | 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 | 23 | <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li> |
|
24 | 24 | {% block extra-menu-actions %} |
|
25 | 25 | {% endblock %} |
|
26 | 26 | <li><a>----------------</a></li> |
|
27 | 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 | 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 | 30 | </ul> |
|
30 | 31 | </span> |
|
31 | 32 | {% endblock %} |
@@ -19,6 +19,7 urlpatterns = ( | |||
|
19 | 19 | url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.campaign_edit', name='url_edit_campaign'), |
|
20 | 20 | url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.campaign_delete', name='url_delete_campaign'), |
|
21 | 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 | 24 | url(r'^experiment/new/$', 'apps.main.views.experiment_new', name='url_add_experiment'), |
|
24 | 25 | url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'), |
@@ -26,6 +27,7 urlpatterns = ( | |||
|
26 | 27 | url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.experiment_edit', name='url_edit_experiment'), |
|
27 | 28 | url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.experiment_delete', name='url_delete_experiment'), |
|
28 | 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 | 31 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', 'apps.main.views.experiment_mix', name='url_mix_experiment'), |
|
30 | 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 | 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 | 487 | def experiments(request): |
|
430 | 488 | |
|
431 | 489 | experiment_list = Experiment.objects.all() |
@@ -572,6 +630,59 def experiment_export(request, id_exp): | |||
|
572 | 630 | |
|
573 | 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 | 687 | def experiment_mix(request, id_exp): |
|
577 | 688 |
General Comments 0
You need to be logged in to leave comments.
Login now