##// END OF EJS Templates
Task #559: Vista de Summary (bug)...
Fiorella Quino -
r154:8ceb16bb8d81
parent child
Show More
@@ -1,1487 +1,1487
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2 from django.utils.safestring import mark_safe
3 3 from django.http import HttpResponseRedirect
4 4 from django.core.urlresolvers import reverse
5 5 from django.db.models import Q
6 6 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
7 7 from django.contrib import messages
8 8 from datetime import datetime
9 9 import urllib
10 10
11 11 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
12 12 from .forms import OperationSearchForm, FilterForm
13 13 from apps.cgs.forms import CGSConfigurationForm
14 14 from apps.jars.forms import JARSConfigurationForm
15 15 from apps.usrp.forms import USRPConfigurationForm
16 16 from apps.abs.forms import ABSConfigurationForm
17 17 from apps.rc.forms import RCConfigurationForm, RCMixConfigurationForm
18 18 from apps.dds.forms import DDSConfigurationForm
19 19
20 20 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
21 21 from apps.cgs.models import CGSConfiguration
22 22 from apps.jars.models import JARSConfiguration, EXPERIMENT_TYPE
23 23 from apps.usrp.models import USRPConfiguration
24 24 from apps.abs.models import ABSConfiguration
25 25 from apps.rc.models import RCConfiguration, RCLine, RCLineType
26 26 from apps.dds.models import DDSConfiguration
27 27 from django.http.request import QueryDict
28 28
29 29 # Create your views here.
30 30
31 31 CONF_FORMS = {
32 32 'rc': RCConfigurationForm,
33 33 'dds': DDSConfigurationForm,
34 34 'jars': JARSConfigurationForm,
35 35 'cgs': CGSConfigurationForm,
36 36 'abs': ABSConfigurationForm,
37 37 'usrp': USRPConfigurationForm,
38 38 }
39 39
40 40 CONF_MODELS = {
41 41 'rc': RCConfiguration,
42 42 'dds': DDSConfiguration,
43 43 'jars': JARSConfiguration,
44 44 'cgs': CGSConfiguration,
45 45 'abs': ABSConfiguration,
46 46 'usrp': USRPConfiguration,
47 47 }
48 48
49 49 MIX_MODES = {
50 50 '0': 'P',
51 51 '1': 'S',
52 52 }
53 53
54 54 MIX_OPERATIONS = {
55 55 '0': 'OR',
56 56 '1': 'XOR',
57 57 '2': 'AND',
58 58 '3': 'NAND',
59 59 }
60 60
61 61
62 62 def index(request):
63 63 kwargs = {}
64 64
65 65 return render(request, 'index.html', kwargs)
66 66
67 67
68 68 def locations(request):
69 69
70 70 page = request.GET.get('page')
71 71 order = ('name',)
72 72
73 73 kwargs = get_paginator(Location, page, order)
74 74
75 75 kwargs['keys'] = ['name', 'description']
76 76 kwargs['title'] = 'Radar System'
77 77 kwargs['suptitle'] = 'List'
78 78
79 79 return render(request, 'base_list.html', kwargs)
80 80
81 81
82 82 def location(request, id_loc):
83 83
84 84 location = get_object_or_404(Location, pk=id_loc)
85 85
86 86 kwargs = {}
87 87 kwargs['location'] = location
88 88 kwargs['location_keys'] = ['name', 'description']
89 89
90 90 kwargs['title'] = 'Location'
91 91 kwargs['suptitle'] = 'Details'
92 92
93 93 return render(request, 'location.html', kwargs)
94 94
95 95
96 96 def location_new(request):
97 97
98 98 if request.method == 'GET':
99 99 form = LocationForm()
100 100
101 101 if request.method == 'POST':
102 102 form = LocationForm(request.POST)
103 103
104 104 if form.is_valid():
105 105 form.save()
106 106 return redirect('url_locations')
107 107
108 108 kwargs = {}
109 109 kwargs['form'] = form
110 110 kwargs['title'] = 'Radar System'
111 111 kwargs['suptitle'] = 'New'
112 112 kwargs['button'] = 'Create'
113 113
114 114 return render(request, 'base_edit.html', kwargs)
115 115
116 116
117 117 def location_edit(request, id_loc):
118 118
119 119 location = get_object_or_404(Location, pk=id_loc)
120 120
121 121 if request.method=='GET':
122 122 form = LocationForm(instance=location)
123 123
124 124 if request.method=='POST':
125 125 form = LocationForm(request.POST, instance=location)
126 126
127 127 if form.is_valid():
128 128 form.save()
129 129 return redirect('url_locations')
130 130
131 131 kwargs = {}
132 132 kwargs['form'] = form
133 133 kwargs['title'] = 'Location'
134 134 kwargs['suptitle'] = 'Edit'
135 135 kwargs['button'] = 'Update'
136 136
137 137 return render(request, 'base_edit.html', kwargs)
138 138
139 139
140 140 def location_delete(request, id_loc):
141 141
142 142 location = get_object_or_404(Location, pk=id_loc)
143 143
144 144 if request.method=='POST':
145 145
146 146 if request.user.is_staff:
147 147 location.delete()
148 148 return redirect('url_locations')
149 149
150 150 messages.error(request, 'Not enough permission to delete this object')
151 151 return redirect(location.get_absolute_url())
152 152
153 153 kwargs = {
154 154 'title': 'Delete',
155 155 'suptitle': 'Location',
156 156 'object': location,
157 157 'previous': location.get_absolute_url(),
158 158 'delete': True
159 159 }
160 160
161 161 return render(request, 'confirm.html', kwargs)
162 162
163 163
164 164 def devices(request):
165 165
166 166 page = request.GET.get('page')
167 167 order = ('device_type', 'name')
168 168
169 169 kwargs = get_paginator(Device, page, order)
170 170 kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type']
171 171 kwargs['title'] = 'Device'
172 172 kwargs['suptitle'] = 'List'
173 173
174 174 return render(request, 'base_list.html', kwargs)
175 175
176 176
177 177 def device(request, id_dev):
178 178
179 179 device = get_object_or_404(Device, pk=id_dev)
180 180
181 181 kwargs = {}
182 182 kwargs['device'] = device
183 183 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
184 184
185 185 kwargs['title'] = 'Device'
186 186 kwargs['suptitle'] = 'Details'
187 187
188 188 return render(request, 'device.html', kwargs)
189 189
190 190
191 191 def device_new(request):
192 192
193 193 if request.method == 'GET':
194 194 form = DeviceForm()
195 195
196 196 if request.method == 'POST':
197 197 form = DeviceForm(request.POST)
198 198
199 199 if form.is_valid():
200 200 form.save()
201 201 return redirect('url_devices')
202 202
203 203 kwargs = {}
204 204 kwargs['form'] = form
205 205 kwargs['title'] = 'Device'
206 206 kwargs['suptitle'] = 'New'
207 207 kwargs['button'] = 'Create'
208 208
209 209 return render(request, 'base_edit.html', kwargs)
210 210
211 211
212 212 def device_edit(request, id_dev):
213 213
214 214 device = get_object_or_404(Device, pk=id_dev)
215 215
216 216 if request.method=='GET':
217 217 form = DeviceForm(instance=device)
218 218
219 219 if request.method=='POST':
220 220 form = DeviceForm(request.POST, instance=device)
221 221
222 222 if form.is_valid():
223 223 form.save()
224 224 return redirect(device.get_absolute_url())
225 225
226 226 kwargs = {}
227 227 kwargs['form'] = form
228 228 kwargs['title'] = 'Device'
229 229 kwargs['suptitle'] = 'Edit'
230 230 kwargs['button'] = 'Update'
231 231
232 232 return render(request, 'base_edit.html', kwargs)
233 233
234 234
235 235 def device_delete(request, id_dev):
236 236
237 237 device = get_object_or_404(Device, pk=id_dev)
238 238
239 239 if request.method=='POST':
240 240
241 241 if request.user.is_staff:
242 242 device.delete()
243 243 return redirect('url_devices')
244 244
245 245 messages.error(request, 'Not enough permission to delete this object')
246 246 return redirect(device.get_absolute_url())
247 247
248 248 kwargs = {
249 249 'title': 'Delete',
250 250 'suptitle': 'Device',
251 251 'object': device,
252 252 'previous': device.get_absolute_url(),
253 253 'delete': True
254 254 }
255 255
256 256 return render(request, 'confirm.html', kwargs)
257 257
258 258
259 259 def campaigns(request):
260 260
261 261 page = request.GET.get('page')
262 262 order = ('start_date',)
263 263 filters = request.GET.copy()
264 264
265 265 kwargs = get_paginator(Campaign, page, order, filters)
266 266
267 267 form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template'])
268 268 kwargs['keys'] = ['name', 'start_date', 'end_date']
269 269 kwargs['title'] = 'Campaign'
270 270 kwargs['suptitle'] = 'List'
271 271 kwargs['form'] = form
272 272 filters.pop('page', None)
273 273 kwargs['q'] = urllib.urlencode(filters)
274 274
275 275 return render(request, 'base_list.html', kwargs)
276 276
277 277
278 278 def campaign(request, id_camp):
279 279
280 280 campaign = get_object_or_404(Campaign, pk=id_camp)
281 281 experiments = Experiment.objects.filter(campaign=campaign)
282 282
283 283 form = CampaignForm(instance=campaign)
284 284
285 285 kwargs = {}
286 286 kwargs['campaign'] = campaign
287 287 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
288 288
289 289 kwargs['experiments'] = experiments
290 290 kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time']
291 291
292 292 kwargs['title'] = 'Campaign'
293 293 kwargs['suptitle'] = 'Details'
294 294
295 295 kwargs['form'] = form
296 296 kwargs['button'] = 'Add Experiment'
297 297
298 298 return render(request, 'campaign.html', kwargs)
299 299
300 300
301 301 def campaign_new(request):
302 302
303 303 kwargs = {}
304 304
305 305 if request.method == 'GET':
306 306
307 307 if 'template' in request.GET:
308 308 if request.GET['template']=='0':
309 309 form = NewForm(initial={'create_from':2},
310 310 template_choices=Campaign.objects.filter(template=True).values_list('id', 'name'))
311 311 else:
312 312 kwargs['button'] = 'Create'
313 313 kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
314 314 kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
315 315 camp = Campaign.objects.get(pk=request.GET['template'])
316 316 form = CampaignForm(instance=camp,
317 317 initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
318 318 'template':False})
319 319 elif 'blank' in request.GET:
320 320 kwargs['button'] = 'Create'
321 321 form = CampaignForm()
322 322 else:
323 323 form = NewForm()
324 324
325 325 if request.method == 'POST':
326 326 kwargs['button'] = 'Create'
327 327 post = request.POST.copy()
328 328 experiments = []
329 329
330 330 for id_exp in post.getlist('experiments'):
331 331 exp = Experiment.objects.get(pk=id_exp)
332 332 new_exp = exp.clone(template=False)
333 333 experiments.append(new_exp)
334 334
335 335 post.setlist('experiments', [])
336 336
337 337 form = CampaignForm(post)
338 338
339 339 if form.is_valid():
340 340 campaign = form.save()
341 341 for exp in experiments:
342 342 campaign.experiments.add(exp)
343 343 campaign.save()
344 344 return redirect('url_campaign', id_camp=campaign.id)
345 345
346 346 kwargs['form'] = form
347 347 kwargs['title'] = 'Campaign'
348 348 kwargs['suptitle'] = 'New'
349 349
350 350 return render(request, 'campaign_edit.html', kwargs)
351 351
352 352
353 353 def campaign_edit(request, id_camp):
354 354
355 355 campaign = get_object_or_404(Campaign, pk=id_camp)
356 356
357 357 if request.method=='GET':
358 358 form = CampaignForm(instance=campaign)
359 359
360 360 if request.method=='POST':
361 361 exps = campaign.experiments.all().values_list('pk', flat=True)
362 362 post = request.POST.copy()
363 363 new_exps = post.getlist('experiments')
364 364 post.setlist('experiments', [])
365 365 form = CampaignForm(post, instance=campaign)
366 366
367 367 if form.is_valid():
368 368 camp = form.save()
369 369 for id_exp in new_exps:
370 370 if int(id_exp) in exps:
371 371 exps.pop(id_exp)
372 372 else:
373 373 exp = Experiment.objects.get(pk=id_exp)
374 374 if exp.template:
375 375 camp.experiments.add(exp.clone(template=False))
376 376 else:
377 377 camp.experiments.add(exp)
378 378
379 379 for id_exp in exps:
380 380 camp.experiments.remove(Experiment.objects.get(pk=id_exp))
381 381
382 382 return redirect('url_campaign', id_camp=id_camp)
383 383
384 384 kwargs = {}
385 385 kwargs['form'] = form
386 386 kwargs['title'] = 'Campaign'
387 387 kwargs['suptitle'] = 'Edit'
388 388 kwargs['button'] = 'Update'
389 389
390 390 return render(request, 'campaign_edit.html', kwargs)
391 391
392 392
393 393 def campaign_delete(request, id_camp):
394 394
395 395 campaign = get_object_or_404(Campaign, pk=id_camp)
396 396
397 397 if request.method=='POST':
398 398 if request.user.is_staff:
399 399
400 400 for exp in campaign.experiments.all():
401 401 for conf in Configuration.objects.filter(experiment=exp):
402 402 conf.delete()
403 403 exp.delete()
404 404 campaign.delete()
405 405
406 406 return redirect('url_campaigns')
407 407
408 408 messages.error(request, 'Not enough permission to delete this object')
409 409 return redirect(campaign.get_absolute_url())
410 410
411 411 kwargs = {
412 412 'title': 'Delete',
413 413 'suptitle': 'Campaign',
414 414 'object': campaign,
415 415 'previous': campaign.get_absolute_url(),
416 416 'delete': True
417 417 }
418 418
419 419 return render(request, 'confirm.html', kwargs)
420 420
421 421 def campaign_export(request, id_camp):
422 422
423 423 campaign = get_object_or_404(Campaign, pk=id_camp)
424 424 content = campaign.parms_to_dict()
425 425 content_type = 'application/json'
426 426 filename = '%s_%s.json' %(campaign.name, campaign.id)
427 427
428 428 response = HttpResponse(content_type=content_type)
429 429 response['Content-Disposition'] = 'attachment; filename="%s"' %filename
430 430 response.write(content)
431 431
432 432 return response
433 433
434 434
435 435 def campaign_import(request, id_camp):
436 436
437 437 campaign = get_object_or_404(Campaign, pk=id_camp)
438 438
439 439 if request.method == 'GET':
440 440 file_form = UploadFileForm()
441 441
442 442 if request.method == 'POST':
443 443 file_form = UploadFileForm(request.POST, request.FILES)
444 444
445 445 if file_form.is_valid():
446 446
447 447 parms = campaign.import_from_file(request.FILES['file'])
448 448
449 449 if parms:
450 450 parms['name'] = parms['campaign']
451 451
452 452 new_camp = campaign.dict_to_parms(parms, CONF_MODELS)
453 453
454 454 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
455 455
456 456 return redirect(new_camp.get_absolute_url_edit())
457 457
458 458 messages.error(request, "Could not import parameters from file")
459 459
460 460 kwargs = {}
461 461 kwargs['title'] = 'Campaign'
462 462 kwargs['form'] = file_form
463 463 kwargs['suptitle'] = 'Importing file'
464 464 kwargs['button'] = 'Import'
465 465
466 466 return render(request, 'campaign_import.html', kwargs)
467 467
468 468
469 469 def experiments(request):
470 470
471 471 page = request.GET.get('page')
472 472 order = ('location',)
473 473 filters = request.GET.copy()
474 474
475 475 kwargs = get_paginator(Experiment, page, order, filters)
476 476
477 477 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
478 478
479 479 kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time']
480 480 kwargs['title'] = 'Experiment'
481 481 kwargs['suptitle'] = 'List'
482 482 kwargs['form'] = form
483 483 filters.pop('page', None)
484 484 kwargs['q'] = urllib.urlencode(filters)
485 485
486 486 return render(request, 'base_list.html', kwargs)
487 487
488 488
489 489 def experiment(request, id_exp):
490 490
491 491 experiment = get_object_or_404(Experiment, pk=id_exp)
492 492
493 493 configurations = Configuration.objects.filter(experiment=experiment, type=0)
494 494
495 495 kwargs = {}
496 496
497 497 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
498 498 kwargs['experiment'] = experiment
499 499
500 500 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
501 501 kwargs['configurations'] = configurations
502 502
503 503 kwargs['title'] = 'Experiment'
504 504 kwargs['suptitle'] = 'Details'
505 505
506 506 kwargs['button'] = 'Add Configuration'
507 507
508 508 ###### SIDEBAR ######
509 509 kwargs.update(sidebar(experiment=experiment))
510 510
511 511 return render(request, 'experiment.html', kwargs)
512 512
513 513
514 514 def experiment_new(request, id_camp=None):
515 515
516 516 kwargs = {}
517 517
518 518 if request.method == 'GET':
519 519 if 'template' in request.GET:
520 520 if request.GET['template']=='0':
521 521 form = NewForm(initial={'create_from':2},
522 522 template_choices=Experiment.objects.filter(template=True).values_list('id', 'name'))
523 523 else:
524 524 kwargs['button'] = 'Create'
525 525 kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
526 526 kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
527 527 exp=Experiment.objects.get(pk=request.GET['template'])
528 528 form = ExperimentForm(instance=exp,
529 529 initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
530 530 'template': False})
531 531 elif 'blank' in request.GET:
532 532 kwargs['button'] = 'Create'
533 533 form = ExperimentForm()
534 534 else:
535 535 form = NewForm()
536 536
537 537 if request.method == 'POST':
538 538 form = ExperimentForm(request.POST)
539 539 print form.data
540 540 if form.is_valid():
541 541 experiment = form.save()
542 542
543 543 if 'template' in request.GET:
544 544 configurations = Configuration.objects.filter(experiment=request.GET['template'], type=0)
545 545 for conf in configurations:
546 546 conf.clone(experiment=experiment, template=False)
547 547
548 548 return redirect('url_experiment', id_exp=experiment.id)
549 549
550 550 kwargs['form'] = form
551 551 kwargs['title'] = 'Experiment'
552 552 kwargs['suptitle'] = 'New'
553 553
554 554 return render(request, 'experiment_edit.html', kwargs)
555 555
556 556
557 557 def experiment_edit(request, id_exp):
558 558
559 559 experiment = get_object_or_404(Experiment, pk=id_exp)
560 560
561 561 if request.method == 'GET':
562 562 form = ExperimentForm(instance=experiment)
563 563
564 564 if request.method=='POST':
565 565 form = ExperimentForm(request.POST, instance=experiment)
566 566
567 567 if form.is_valid():
568 568 experiment = form.save()
569 569 return redirect('url_experiment', id_exp=experiment.id)
570 570
571 571 kwargs = {}
572 572 kwargs['form'] = form
573 573 kwargs['title'] = 'Experiment'
574 574 kwargs['suptitle'] = 'Edit'
575 575 kwargs['button'] = 'Update'
576 576
577 577 return render(request, 'experiment_edit.html', kwargs)
578 578
579 579
580 580 def experiment_delete(request, id_exp):
581 581
582 582 experiment = get_object_or_404(Experiment, pk=id_exp)
583 583
584 584 if request.method=='POST':
585 585 if request.user.is_staff:
586 586 for conf in Configuration.objects.filter(experiment=experiment):
587 587 conf.delete()
588 588 experiment.delete()
589 589 return redirect('url_experiments')
590 590
591 591 messages.error(request, 'Not enough permission to delete this object')
592 592 return redirect(experiment.get_absolute_url())
593 593
594 594 kwargs = {
595 595 'title': 'Delete',
596 596 'suptitle': 'Experiment',
597 597 'object': experiment,
598 598 'previous': experiment.get_absolute_url(),
599 599 'delete': True
600 600 }
601 601
602 602 return render(request, 'confirm.html', kwargs)
603 603
604 604
605 605 def experiment_export(request, id_exp):
606 606
607 607 experiment = get_object_or_404(Experiment, pk=id_exp)
608 608 content = experiment.parms_to_dict()
609 609 content_type = 'application/json'
610 610 filename = '%s_%s.json' %(experiment.name, experiment.id)
611 611
612 612 response = HttpResponse(content_type=content_type)
613 613 response['Content-Disposition'] = 'attachment; filename="%s"' %filename
614 614 response.write(content)
615 615
616 616 return response
617 617
618 618 def experiment_import(request, id_exp):
619 619
620 620 experiment = get_object_or_404(Experiment, pk=id_exp)
621 621 configurations = Configuration.objects.filter(experiment=experiment)
622 622
623 623 if request.method == 'GET':
624 624 file_form = UploadFileForm()
625 625
626 626 if request.method == 'POST':
627 627 file_form = UploadFileForm(request.POST, request.FILES)
628 628
629 629 if file_form.is_valid():
630 630
631 631 parms = experiment.import_from_file(request.FILES['file'])
632 632
633 633 if parms:
634 634
635 635 new_exp = experiment.dict_to_parms(parms, CONF_MODELS)
636 636
637 637 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
638 638
639 639 return redirect(new_exp.get_absolute_url_edit())
640 640
641 641 messages.error(request, "Could not import parameters from file")
642 642
643 643 kwargs = {}
644 644 kwargs['title'] = 'Experiment'
645 645 kwargs['form'] = file_form
646 646 kwargs['suptitle'] = 'Importing file'
647 647 kwargs['button'] = 'Import'
648 648
649 649 kwargs.update(sidebar(experiment=experiment))
650 650
651 651 return render(request, 'experiment_import.html', kwargs)
652 652
653 653 def experiment_mix(request, id_exp):
654 654
655 655 experiment = get_object_or_404(Experiment, pk=id_exp)
656 656 rc_confs = [conf for conf in RCConfiguration.objects.filter(experiment=id_exp,
657 657 mix=False)]
658 658
659 659 if len(rc_confs)<2:
660 660 messages.warning(request, 'You need at least two RC Configurations to make a mix')
661 661 return redirect(experiment.get_absolute_url())
662 662
663 663 mix_confs = RCConfiguration.objects.filter(experiment=id_exp, mix=True)
664 664
665 665 if mix_confs:
666 666 mix = mix_confs[0]
667 667 else:
668 668 mix = RCConfiguration(experiment=experiment,
669 669 device=rc_confs[0].device,
670 670 ipp=rc_confs[0].ipp,
671 671 clock_in=rc_confs[0].clock_in,
672 672 clock_divider=rc_confs[0].clock_divider,
673 673 mix=True,
674 674 parameters='')
675 675 mix.save()
676 676
677 677 line_type = RCLineType.objects.get(name='mix')
678 678 for i in range(len(rc_confs[0].get_lines())):
679 679 line = RCLine(rc_configuration=mix, line_type=line_type, channel=i)
680 680 line.save()
681 681
682 682 initial = {'name': mix.name,
683 683 'result': parse_mix_result(mix.parameters),
684 684 'delay': 0,
685 685 'mask': [0,1,2,3,4,5,6,7]
686 686 }
687 687
688 688 if request.method=='GET':
689 689 form = RCMixConfigurationForm(confs=rc_confs, initial=initial)
690 690
691 691 if request.method=='POST':
692 692 result = mix.parameters
693 693
694 694 if '{}|'.format(request.POST['experiment']) in result:
695 695 messages.error(request, 'Configuration already added')
696 696 else:
697 697 if 'operation' in request.POST:
698 698 operation = MIX_OPERATIONS[request.POST['operation']]
699 699 else:
700 700 operation = ' '
701 701
702 702 mode = MIX_MODES[request.POST['mode']]
703 703
704 704 if result:
705 705 result = '{}-{}|{}|{}|{}|{}'.format(mix.parameters,
706 706 request.POST['experiment'],
707 707 mode,
708 708 operation,
709 709 float(request.POST['delay']),
710 710 parse_mask(request.POST.getlist('mask'))
711 711 )
712 712 else:
713 713 result = '{}|{}|{}|{}|{}'.format(request.POST['experiment'],
714 714 mode,
715 715 operation,
716 716 float(request.POST['delay']),
717 717 parse_mask(request.POST.getlist('mask'))
718 718 )
719 719
720 720 mix.parameters = result
721 721 mix.name = request.POST['name']
722 722 mix.save()
723 723 mix.update_pulses()
724 724
725 725 initial['result'] = parse_mix_result(result)
726 726 initial['name'] = mix.name
727 727
728 728 form = RCMixConfigurationForm(initial=initial, confs=rc_confs)
729 729
730 730
731 731 kwargs = {
732 732 'title': 'Experiment',
733 733 'suptitle': 'Mix Configurations',
734 734 'form' : form,
735 735 'extra_button': 'Delete',
736 736 'button': 'Add',
737 737 'cancel': 'Back',
738 738 'previous': experiment.get_absolute_url(),
739 739 'id_exp':id_exp,
740 740
741 741 }
742 742
743 743 return render(request, 'experiment_mix.html', kwargs)
744 744
745 745
746 746 def experiment_mix_delete(request, id_exp):
747 747
748 748 conf = RCConfiguration.objects.get(experiment=id_exp, mix=True)
749 749 values = conf.parameters.split('-')
750 750 conf.parameters = '-'.join(values[:-1])
751 751 conf.save()
752 752
753 753 return redirect('url_mix_experiment', id_exp=id_exp)
754 754
755 755
756 756 def experiment_summary(request, id_exp):
757 757
758 758 import json
759 759
760 760 experiment = get_object_or_404(Experiment, pk=id_exp)
761 761 experiment_data = json.loads(experiment.parms_to_dict())
762 762 configurations = Configuration.objects.filter(experiment=experiment, type=0)
763 763
764 764 kwargs = {}
765 765
766 766 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
767 767 kwargs['experiment'] = experiment
768 768
769 769 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
770 770 kwargs['configurations'] = configurations
771 771 kwargs['experiment_data'] = experiment_data
772 772
773 773 kwargs['title'] = 'Experiment Summary'
774 774 kwargs['suptitle'] = 'Details'
775 775
776 776 kwargs['button'] = 'Verify Parameters'
777 777
778 778 for configuration in configurations:
779 779 if configuration.device.device_type.name == 'jars':
780 780 kwargs['exp_type'] = EXPERIMENT_TYPE[configuration.exp_type][1]
781 781
782 782 if configuration.device.device_type.name == 'rc':
783 783 rc_lines = experiment_data['configurations']['rc']['lines']
784 if experiment_data['configurations']['rc']['mix'] == True:
784 if experiment_data['configurations']['rc']['mix'] == 'True':
785 785 tx = ''
786 786 code = ''
787 787 window = ''
788 788 else:
789 789 code = rc_lines[3]['code']
790 790
791 791 window_data = rc_lines[6]['params'][0]
792 792 h0 = str(window_data['first_height'])
793 793 dh = str(window_data['resolution'])
794 794 nsa = str(window_data['number_of_samples'])
795 795 window = 'Ho='+h0+'km\nDH='+dh+'km\nNSA='+nsa
796 796
797 797 tx = ''
798 798 if float(rc_lines[1]['delays']) == 0:
799 799 tx = rc_lines[2]['pulse_width']
800 800 elif float(rc_lines[2]['delays']) == 0:
801 801 tx = rc_lines[1]['pulse_width']
802 802 else:
803 803 tx = rc_lines[1]['pulse_width']+' | '+rc_lines[2]['pulse_width']
804 804
805 805 kwargs['tx'] = tx
806 806 kwargs['code'] = code
807 807 kwargs['window'] = window
808 808
809 809 ###### SIDEBAR ######
810 810 kwargs.update(sidebar(experiment=experiment))
811 811
812 812 return render(request, 'experiment_summary.html', kwargs)
813 813
814 814
815 815 def parse_mix_result(s):
816 816
817 817 values = s.split('-')
818 818 html = 'EXP MOD OPE DELAY MASK\r\n'
819 819
820 820 if not values or values[0] in ('', ' '):
821 821 return mark_safe(html)
822 822
823 823 for i, value in enumerate(values):
824 824 if not value:
825 825 continue
826 826 pk, mode, operation, delay, mask = value.split('|')
827 827 conf = RCConfiguration.objects.get(pk=pk)
828 828 if i==0:
829 829 html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
830 830 conf.name,
831 831 mode,
832 832 ' ',
833 833 delay,
834 834 mask)
835 835 else:
836 836 html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
837 837 conf.name,
838 838 mode,
839 839 operation,
840 840 delay,
841 841 mask)
842 842
843 843 return mark_safe(html)
844 844
845 845 def parse_mask(l):
846 846
847 847 values = []
848 848
849 849 for x in range(8):
850 850 if '{}'.format(x) in l:
851 851 values.append(1)
852 852 else:
853 853 values.append(0)
854 854
855 855 values.reverse()
856 856
857 857 return int(''.join([str(x) for x in values]), 2)
858 858
859 859
860 860 def dev_confs(request):
861 861
862 862
863 863 page = request.GET.get('page')
864 864 order = ('type', 'device__device_type', 'experiment')
865 865 filters = request.GET.copy()
866 866
867 867 kwargs = get_paginator(Configuration, page, order, filters)
868 868
869 869 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
870 870 kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
871 871 kwargs['title'] = 'Configuration'
872 872 kwargs['suptitle'] = 'List'
873 873 kwargs['form'] = form
874 874 filters.pop('page', None)
875 875 kwargs['q'] = urllib.urlencode(filters)
876 876
877 877 return render(request, 'base_list.html', kwargs)
878 878
879 879
880 880 def dev_conf(request, id_conf):
881 881
882 882 conf = get_object_or_404(Configuration, pk=id_conf)
883 883
884 884 return redirect(conf.get_absolute_url())
885 885
886 886
887 887 def dev_conf_new(request, id_exp=0, id_dev=0):
888 888
889 889 initial = {}
890 890 kwargs = {}
891 891
892 892 if id_exp<>0:
893 893 initial['experiment'] = id_exp
894 894
895 895 if id_dev<>0:
896 896 initial['device'] = id_dev
897 897
898 898 if request.method == 'GET':
899 899
900 900 if id_dev:
901 901 kwargs['button'] = 'Create'
902 902 device = Device.objects.get(pk=id_dev)
903 903 DevConfForm = CONF_FORMS[device.device_type.name]
904 904 initial['name'] = request.GET['name']
905 905 form = DevConfForm(initial=initial)
906 906 else:
907 907 if 'template' in request.GET:
908 908 if request.GET['template']=='0':
909 909 choices = [(conf.pk, '{}'.format(conf)) for conf in Configuration.objects.filter(template=True)]
910 910 form = NewForm(initial={'create_from':2},
911 911 template_choices=choices)
912 912 else:
913 913 kwargs['button'] = 'Create'
914 914 conf = Configuration.objects.get(pk=request.GET['template'])
915 915 id_dev = conf.device.pk
916 916 DevConfForm = CONF_FORMS[conf.device.device_type.name]
917 917 form = DevConfForm(instance=conf,
918 918 initial={'name': '{} [{:%Y/%m/%d}]'.format(conf.name, datetime.now()),
919 919 'template': False,
920 920 'experiment':id_exp})
921 921 elif 'blank' in request.GET:
922 922 kwargs['button'] = 'Create'
923 923 form = ConfigurationForm(initial=initial)
924 924 else:
925 925 form = NewForm()
926 926
927 927 if request.method == 'POST':
928 928
929 929 device = Device.objects.get(pk=request.POST['device'])
930 930 DevConfForm = CONF_FORMS[device.device_type.name]
931 931
932 932 form = DevConfForm(request.POST)
933 933 kwargs['button'] = 'Create'
934 934 if form.is_valid():
935 935 conf = form.save()
936 936
937 937 if 'template' in request.GET and conf.device.device_type.name=='rc':
938 938 lines = RCLine.objects.filter(rc_configuration=request.GET['template'])
939 939 for line in lines:
940 940 line.clone(rc_configuration=conf)
941 941
942 942 if conf.device.device_type.name=='jars':
943 943 conf.add_parms_to_filter()
944 944
945 945 return redirect('url_dev_conf', id_conf=conf.pk)
946 946
947 947 kwargs['id_exp'] = id_exp
948 948 kwargs['form'] = form
949 949 kwargs['title'] = 'Configuration'
950 950 kwargs['suptitle'] = 'New'
951 951
952 952
953 953 if id_dev != 0:
954 954 device = Device.objects.get(pk=id_dev)
955 955 kwargs['device'] = device.device_type.name
956 956
957 957 return render(request, 'dev_conf_edit.html', kwargs)
958 958
959 959
960 960 def dev_conf_edit(request, id_conf):
961 961
962 962 conf = get_object_or_404(Configuration, pk=id_conf)
963 963
964 964 DevConfModel = CONF_MODELS[conf.device.device_type.name]
965 965 DevConfForm = CONF_FORMS[conf.device.device_type.name]
966 966
967 967 dev_conf = DevConfModel.objects.get(pk=id_conf)
968 968
969 969 if request.method=='GET':
970 970 form = DevConfForm(instance=dev_conf)
971 971
972 972 if request.method=='POST':
973 973 form = DevConfForm(request.POST, instance=dev_conf)
974 974
975 975 if form.is_valid():
976 976 form.save()
977 977 return redirect('url_dev_conf', id_conf=id_conf)
978 978
979 979 kwargs = {}
980 980 kwargs['form'] = form
981 981 kwargs['title'] = 'Device Configuration'
982 982 kwargs['suptitle'] = 'Edit'
983 983 kwargs['button'] = 'Update'
984 984
985 985 ###### SIDEBAR ######
986 986 kwargs.update(sidebar(conf=conf))
987 987
988 988 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
989 989
990 990
991 991 def dev_conf_start(request, id_conf):
992 992
993 993 conf = get_object_or_404(Configuration, pk=id_conf)
994 994
995 995 DevConfModel = CONF_MODELS[conf.device.device_type.name]
996 996
997 997 conf = DevConfModel.objects.get(pk=id_conf)
998 998
999 999 if conf.start_device():
1000 1000 messages.success(request, conf.message)
1001 1001 else:
1002 1002 messages.error(request, conf.message)
1003 1003
1004 1004 conf.status_device()
1005 1005
1006 1006 return redirect(conf.get_absolute_url())
1007 1007
1008 1008
1009 1009 def dev_conf_stop(request, id_conf):
1010 1010
1011 1011 conf = get_object_or_404(Configuration, pk=id_conf)
1012 1012
1013 1013 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1014 1014
1015 1015 conf = DevConfModel.objects.get(pk=id_conf)
1016 1016
1017 1017 if conf.stop_device():
1018 1018 messages.success(request, conf.message)
1019 1019 else:
1020 1020 messages.error(request, conf.message)
1021 1021
1022 1022 conf.status_device()
1023 1023
1024 1024 return redirect(conf.get_absolute_url())
1025 1025
1026 1026
1027 1027 def dev_conf_status(request, id_conf):
1028 1028
1029 1029 conf = get_object_or_404(Configuration, pk=id_conf)
1030 1030
1031 1031 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1032 1032
1033 1033 conf = DevConfModel.objects.get(pk=id_conf)
1034 1034
1035 1035 if conf.status_device():
1036 1036 messages.success(request, conf.message)
1037 1037 else:
1038 1038 messages.error(request, conf.message)
1039 1039
1040 1040 return redirect(conf.get_absolute_url())
1041 1041
1042 1042
1043 1043 def dev_conf_write(request, id_conf):
1044 1044
1045 1045 conf = get_object_or_404(Configuration, pk=id_conf)
1046 1046
1047 1047 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1048 1048
1049 1049 conf = DevConfModel.objects.get(pk=id_conf)
1050 1050
1051 1051 answer = conf.write_device()
1052 1052 conf.status_device()
1053 1053
1054 1054 if answer:
1055 1055 messages.success(request, conf.message)
1056 1056
1057 1057 #Creating a historical configuration
1058 1058 conf.clone(type=0, template=False)
1059 1059
1060 1060 #Original configuration
1061 1061 conf = DevConfModel.objects.get(pk=id_conf)
1062 1062 else:
1063 1063 messages.error(request, conf.message)
1064 1064
1065 1065 return redirect(conf.get_absolute_url())
1066 1066
1067 1067
1068 1068 def dev_conf_read(request, id_conf):
1069 1069
1070 1070 conf = get_object_or_404(Configuration, pk=id_conf)
1071 1071
1072 1072 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1073 1073 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1074 1074
1075 1075 conf = DevConfModel.objects.get(pk=id_conf)
1076 1076
1077 1077 if request.method=='GET':
1078 1078
1079 1079 parms = conf.read_device()
1080 1080 conf.status_device()
1081 1081
1082 1082 if not parms:
1083 1083 messages.error(request, conf.message)
1084 1084 return redirect(conf.get_absolute_url())
1085 1085
1086 1086 form = DevConfForm(initial=parms, instance=conf)
1087 1087
1088 1088 if request.method=='POST':
1089 1089 form = DevConfForm(request.POST, instance=conf)
1090 1090
1091 1091 if form.is_valid():
1092 1092 form.save()
1093 1093 return redirect(conf.get_absolute_url())
1094 1094
1095 1095 messages.error(request, "Parameters could not be saved")
1096 1096
1097 1097 kwargs = {}
1098 1098 kwargs['id_dev'] = conf.id
1099 1099 kwargs['form'] = form
1100 1100 kwargs['title'] = 'Device Configuration'
1101 1101 kwargs['suptitle'] = 'Parameters read from device'
1102 1102 kwargs['button'] = 'Save'
1103 1103
1104 1104 ###### SIDEBAR ######
1105 1105 kwargs.update(sidebar(conf=conf))
1106 1106
1107 1107 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
1108 1108
1109 1109
1110 1110 def dev_conf_import(request, id_conf):
1111 1111
1112 1112 conf = get_object_or_404(Configuration, pk=id_conf)
1113 1113
1114 1114 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1115 1115 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1116 1116 conf = DevConfModel.objects.get(pk=id_conf)
1117 1117
1118 1118 if request.method == 'GET':
1119 1119 file_form = UploadFileForm()
1120 1120
1121 1121 if request.method == 'POST':
1122 1122 file_form = UploadFileForm(request.POST, request.FILES)
1123 1123
1124 1124 if file_form.is_valid():
1125 1125
1126 1126 parms = conf.import_from_file(request.FILES['file'])
1127 1127
1128 1128 if parms:
1129 1129 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
1130 1130 form = DevConfForm(initial=parms, instance=conf)
1131 1131
1132 1132 kwargs = {}
1133 1133 kwargs['id_dev'] = conf.id
1134 1134 kwargs['form'] = form
1135 1135 kwargs['title'] = 'Device Configuration'
1136 1136 kwargs['suptitle'] = 'Parameters imported'
1137 1137 kwargs['button'] = 'Save'
1138 1138 kwargs['action'] = conf.get_absolute_url_edit()
1139 1139 kwargs['previous'] = conf.get_absolute_url()
1140 1140
1141 1141 ###### SIDEBAR ######
1142 1142 kwargs.update(sidebar(conf=conf))
1143 1143
1144 1144 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
1145 1145
1146 1146 messages.error(request, "Could not import parameters from file")
1147 1147
1148 1148 kwargs = {}
1149 1149 kwargs['id_dev'] = conf.id
1150 1150 kwargs['title'] = 'Device Configuration'
1151 1151 kwargs['form'] = file_form
1152 1152 kwargs['suptitle'] = 'Importing file'
1153 1153 kwargs['button'] = 'Import'
1154 1154
1155 1155 kwargs.update(sidebar(conf=conf))
1156 1156
1157 1157 return render(request, 'dev_conf_import.html', kwargs)
1158 1158
1159 1159
1160 1160 def dev_conf_export(request, id_conf):
1161 1161
1162 1162 conf = get_object_or_404(Configuration, pk=id_conf)
1163 1163
1164 1164 DevConfModel = CONF_MODELS[conf.device.device_type.name]
1165 1165
1166 1166 conf = DevConfModel.objects.get(pk=id_conf)
1167 1167
1168 1168 if request.method == 'GET':
1169 1169 file_form = DownloadFileForm(conf.device.device_type.name)
1170 1170
1171 1171 if request.method == 'POST':
1172 1172 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
1173 1173
1174 1174 if file_form.is_valid():
1175 1175 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
1176 1176
1177 1177 response = HttpResponse(content_type=fields['content_type'])
1178 1178 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
1179 1179 response.write(fields['content'])
1180 1180
1181 1181 return response
1182 1182
1183 1183 messages.error(request, "Could not export parameters")
1184 1184
1185 1185 kwargs = {}
1186 1186 kwargs['id_dev'] = conf.id
1187 1187 kwargs['title'] = 'Device Configuration'
1188 1188 kwargs['form'] = file_form
1189 1189 kwargs['suptitle'] = 'Exporting file'
1190 1190 kwargs['button'] = 'Export'
1191 1191
1192 1192 return render(request, 'dev_conf_export.html', kwargs)
1193 1193
1194 1194
1195 1195 def dev_conf_delete(request, id_conf):
1196 1196
1197 1197 conf = get_object_or_404(Configuration, pk=id_conf)
1198 1198
1199 1199 if request.method=='POST':
1200 1200 if request.user.is_staff:
1201 1201 conf.delete()
1202 1202 return redirect('url_dev_confs')
1203 1203
1204 1204 messages.error(request, 'Not enough permission to delete this object')
1205 1205 return redirect(conf.get_absolute_url())
1206 1206
1207 1207 kwargs = {
1208 1208 'title': 'Delete',
1209 1209 'suptitle': 'Experiment',
1210 1210 'object': conf,
1211 1211 'previous': conf.get_absolute_url(),
1212 1212 'delete': True
1213 1213 }
1214 1214
1215 1215 return render(request, 'confirm.html', kwargs)
1216 1216
1217 1217
1218 1218 def sidebar(**kwargs):
1219 1219
1220 1220 side_data = {}
1221 1221
1222 1222 conf = kwargs.get('conf', None)
1223 1223 experiment = kwargs.get('experiment', None)
1224 1224
1225 1225 if not experiment:
1226 1226 experiment = conf.experiment
1227 1227
1228 1228 if experiment:
1229 1229 side_data['experiment'] = experiment
1230 1230 campaign = experiment.campaign_set.all()
1231 1231 if campaign:
1232 1232 side_data['campaign'] = campaign[0]
1233 1233 experiments = campaign[0].experiments.all()
1234 1234 else:
1235 1235 experiments = [experiment]
1236 1236 configurations = experiment.configuration_set.filter(type=0)
1237 1237 side_data['side_experiments'] = experiments
1238 1238 side_data['side_configurations'] = configurations
1239 1239
1240 1240 return side_data
1241 1241
1242 1242 def get_paginator(model, page, order, filters={}, n=10):
1243 1243
1244 1244 kwargs = {}
1245 1245 query = Q()
1246 1246 if isinstance(filters, QueryDict):
1247 1247 filters = filters.dict()
1248 1248 [filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
1249 1249 filters.pop('page', None)
1250 1250
1251 1251 if 'start_date' in filters:
1252 1252 filters['start_date__gte'] = filters.pop('start_date')
1253 1253 if 'end_date' in filters:
1254 1254 filters['start_date__lte'] = filters.pop('end_date')
1255 1255 if 'tags' in filters:
1256 1256 tags = filters.pop('tags')
1257 1257 if 'tags' in model._meta.get_all_field_names():
1258 1258 query = query | Q(tags__icontains=tags)
1259 1259 if 'name' in model._meta.get_all_field_names():
1260 1260 query = query | Q(name__icontains=tags)
1261 1261 if 'location' in model._meta.get_all_field_names():
1262 1262 query = query | Q(location__name__icontains=tags)
1263 1263 if 'device' in model._meta.get_all_field_names():
1264 1264 query = query | Q(device__name__icontains=tags)
1265 1265
1266 1266 object_list = model.objects.filter(query, **filters).order_by(*order)
1267 1267 paginator = Paginator(object_list, n)
1268 1268
1269 1269 try:
1270 1270 objects = paginator.page(page)
1271 1271 except PageNotAnInteger:
1272 1272 objects = paginator.page(1)
1273 1273 except EmptyPage:
1274 1274 objects = paginator.page(paginator.num_pages)
1275 1275
1276 1276 kwargs['objects'] = objects
1277 1277 kwargs['offset'] = (int(page)-1)*n if page else 0
1278 1278
1279 1279 return kwargs
1280 1280
1281 1281 def operation(request, id_camp=None):
1282 1282
1283 1283 if not id_camp:
1284 1284 campaigns = Campaign.objects.all().order_by('-start_date')
1285 1285
1286 1286 if not campaigns:
1287 1287 kwargs = {}
1288 1288 kwargs['title'] = 'No Campaigns'
1289 1289 kwargs['suptitle'] = 'Empty'
1290 1290 return render(request, 'operation.html', kwargs)
1291 1291
1292 1292 id_camp = campaigns[0].id
1293 1293
1294 1294 campaign = get_object_or_404(Campaign, pk = id_camp)
1295 1295
1296 1296 if request.method=='GET':
1297 1297 form = OperationForm(initial={'campaign': campaign.id}, length = 5)
1298 1298
1299 1299 if request.method=='POST':
1300 1300 form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5)
1301 1301
1302 1302 if form.is_valid():
1303 1303 return redirect('url_operation', id_camp=campaign.id)
1304 1304 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
1305 1305 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
1306 1306 #for exs in experiments:
1307 1307 # exs.get_status()
1308 1308 locations= Location.objects.filter(experiment=experiments).distinct()
1309 1309 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
1310 1310 kwargs = {}
1311 1311 #---Campaign
1312 1312 kwargs['campaign'] = campaign
1313 1313 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
1314 1314 #---Experiment
1315 1315 keys = ['id', 'name', 'start_time', 'end_time', 'status']
1316 1316 kwargs['experiment_keys'] = keys[1:]
1317 1317 kwargs['experiments'] = experiments
1318 1318 #---Radar
1319 1319 kwargs['locations'] = locations
1320 1320 #---Else
1321 1321 kwargs['title'] = 'Campaign'
1322 1322 kwargs['suptitle'] = campaign.name
1323 1323 kwargs['form'] = form
1324 1324 kwargs['button'] = 'Search'
1325 1325 kwargs['details'] = True
1326 1326 kwargs['search_button'] = True
1327 1327
1328 1328 return render(request, 'operation.html', kwargs)
1329 1329
1330 1330
1331 1331 def operation_search(request, id_camp=None):
1332 1332
1333 1333
1334 1334 if not id_camp:
1335 1335 campaigns = Campaign.objects.all().order_by('-start_date')
1336 1336
1337 1337 if not campaigns:
1338 1338 return render(request, 'operation.html', {})
1339 1339
1340 1340 id_camp = campaigns[0].id
1341 1341 campaign = get_object_or_404(Campaign, pk = id_camp)
1342 1342
1343 1343 if request.method=='GET':
1344 1344 form = OperationSearchForm(initial={'campaign': campaign.id})
1345 1345
1346 1346 if request.method=='POST':
1347 1347 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
1348 1348
1349 1349 if form.is_valid():
1350 1350 return redirect('url_operation', id_camp=campaign.id)
1351 1351
1352 1352 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
1353 1353 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
1354 1354 #for exs in experiments:
1355 1355 # exs.get_status()
1356 1356 locations= Location.objects.filter(experiment=experiments).distinct()
1357 1357 form = OperationSearchForm(initial={'campaign': campaign.id})
1358 1358
1359 1359 kwargs = {}
1360 1360 #---Campaign
1361 1361 kwargs['campaign'] = campaign
1362 1362 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
1363 1363 #---Experiment
1364 1364 keys = ['id', 'name', 'start_time', 'end_time', 'status']
1365 1365 kwargs['experiment_keys'] = keys[1:]
1366 1366 kwargs['experiments'] = experiments
1367 1367 #---Radar
1368 1368 kwargs['locations'] = locations
1369 1369 #---Else
1370 1370 kwargs['title'] = 'Campaign'
1371 1371 kwargs['suptitle'] = campaign.name
1372 1372 kwargs['form'] = form
1373 1373 kwargs['button'] = 'Select'
1374 1374 kwargs['details'] = True
1375 1375 kwargs['search_button'] = False
1376 1376
1377 1377 return render(request, 'operation.html', kwargs)
1378 1378
1379 1379
1380 1380 def radar_play(request, id_camp, id_radar):
1381 1381 campaign = get_object_or_404(Campaign, pk = id_camp)
1382 1382 radar = get_object_or_404(Location, pk = id_radar)
1383 1383 today = datetime.today()
1384 1384 now = today.time()
1385 1385
1386 1386 #--Clear Old Experiments From RunningExperiment Object
1387 1387 running_experiment = RunningExperiment.objects.filter(radar=radar)
1388 1388 if running_experiment:
1389 1389 running_experiment = running_experiment[0]
1390 1390 running_experiment.running_experiment.clear()
1391 1391 running_experiment.save()
1392 1392
1393 1393 #--If campaign datetime is ok:
1394 1394 if today >= campaign.start_date and today <= campaign.end_date:
1395 1395 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1396 1396 for exp in experiments:
1397 1397 #--If experiment time is ok:
1398 1398 if now >= exp.start_time and now <= exp.end_time:
1399 1399 configurations = Configuration.objects.filter(experiment = exp)
1400 1400 for conf in configurations:
1401 1401 if 'cgs' in conf.device.device_type.name:
1402 1402 conf.status_device()
1403 1403 else:
1404 1404 answer = conf.start_device()
1405 1405 conf.status_device()
1406 1406 #--Running Experiment
1407 1407 old_running_experiment = RunningExperiment.objects.filter(radar=radar)
1408 1408 #--If RunningExperiment element exists
1409 1409 if old_running_experiment:
1410 1410 old_running_experiment = old_running_experiment[0]
1411 1411 old_running_experiment.running_experiment.add(exp)
1412 1412 old_running_experiment.status = 3
1413 1413 old_running_experiment.save()
1414 1414 #--Create a new Running_Experiment Object
1415 1415 else:
1416 1416 new_running_experiment = RunningExperiment(
1417 1417 radar = radar,
1418 1418 status = 3,
1419 1419 )
1420 1420 new_running_experiment.save()
1421 1421 new_running_experiment.running_experiment.add(exp)
1422 1422 new_running_experiment.save()
1423 1423
1424 1424 if answer:
1425 1425 messages.success(request, conf.message)
1426 1426 exp.status=2
1427 1427 exp.save()
1428 1428 else:
1429 1429 messages.error(request, conf.message)
1430 1430 else:
1431 1431 if exp.status == 1 or exp.status == 3:
1432 1432 exp.status=3
1433 1433 exp.save()
1434 1434
1435 1435
1436 1436 route = request.META['HTTP_REFERER']
1437 1437 route = str(route)
1438 1438 if 'search' in route:
1439 1439 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1440 1440 else:
1441 1441 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1442 1442
1443 1443
1444 1444 def radar_stop(request, id_camp, id_radar):
1445 1445 campaign = get_object_or_404(Campaign, pk = id_camp)
1446 1446 radar = get_object_or_404(Location, pk = id_radar)
1447 1447 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1448 1448
1449 1449 for exp in experiments:
1450 1450 configurations = Configuration.objects.filter(experiment = exp)
1451 1451 for conf in configurations:
1452 1452 if 'cgs' in conf.device.device_type.name:
1453 1453 conf.status_device()
1454 1454 else:
1455 1455 answer = conf.stop_device()
1456 1456 conf.status_device()
1457 1457
1458 1458 if answer:
1459 1459 messages.success(request, conf.message)
1460 1460 exp.status=1
1461 1461 exp.save()
1462 1462 else:
1463 1463 messages.error(request, conf.message)
1464 1464
1465 1465
1466 1466 route = request.META['HTTP_REFERER']
1467 1467 route = str(route)
1468 1468 if 'search' in route:
1469 1469 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1470 1470 else:
1471 1471 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1472 1472
1473 1473
1474 1474 def radar_refresh(request, id_camp, id_radar):
1475 1475
1476 1476 campaign = get_object_or_404(Campaign, pk = id_camp)
1477 1477 radar = get_object_or_404(Location, pk = id_radar)
1478 1478 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1479 1479 for exs in experiments:
1480 1480 exs.get_status()
1481 1481
1482 1482 route = request.META['HTTP_REFERER']
1483 1483 route = str(route)
1484 1484 if 'search' in route:
1485 1485 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1486 1486 else:
1487 1487 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
General Comments 0
You need to be logged in to leave comments. Login now