##// END OF EJS Templates
Task # 487: Operation View: radar_play. Clear Old Experiments from Running Experiment Object...
Fiorella Quino -
r93:f53e208b54c7
parent child
Show More
@@ -1,1066 +1,1076
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2 from django.http import HttpResponseRedirect
3 3 from django.core.urlresolvers import reverse
4 4 from django.contrib import messages
5 5 from datetime import datetime
6 6
7 7 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
8 8 from .forms import OperationSearchForm
9 9 from apps.cgs.forms import CGSConfigurationForm
10 10 from apps.jars.forms import JARSConfigurationForm
11 11 from apps.usrp.forms import USRPConfigurationForm
12 12 from apps.abs.forms import ABSConfigurationForm
13 13 from apps.rc.forms import RCConfigurationForm
14 14 from apps.dds.forms import DDSConfigurationForm
15 15
16 16 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
17 17 from apps.cgs.models import CGSConfiguration
18 18 from apps.jars.models import JARSConfiguration
19 19 from apps.usrp.models import USRPConfiguration
20 20 from apps.abs.models import ABSConfiguration
21 21 from apps.rc.models import RCConfiguration
22 22 from apps.dds.models import DDSConfiguration
23 23
24 24 # Create your views here.
25 25
26 26 CONF_FORMS = {
27 27 'rc': RCConfigurationForm,
28 28 'dds': DDSConfigurationForm,
29 29 'jars': JARSConfigurationForm,
30 30 'cgs': CGSConfigurationForm,
31 31 'abs': ABSConfigurationForm,
32 32 'usrp': USRPConfigurationForm,
33 33 }
34 34
35 35 CONF_MODELS = {
36 36 'rc': RCConfiguration,
37 37 'dds': DDSConfiguration,
38 38 'jars': JARSConfiguration,
39 39 'cgs': CGSConfiguration,
40 40 'abs': ABSConfiguration,
41 41 'usrp': USRPConfiguration,
42 42 }
43 43
44 44
45 45 def index(request):
46 46 kwargs = {}
47 47
48 48 return render(request, 'index.html', kwargs)
49 49
50 50
51 51 def locations(request):
52 52
53 53 locations = Location.objects.all().order_by('name')
54 54
55 55 keys = ['id', 'name', 'description']
56 56
57 57 kwargs = {}
58 58 kwargs['location_keys'] = keys[1:]
59 59 kwargs['locations'] = locations
60 60 kwargs['title'] = 'Location'
61 61 kwargs['suptitle'] = 'List'
62 62 kwargs['button'] = 'New Location'
63 63
64 64 return render(request, 'locations.html', kwargs)
65 65
66 66
67 67 def location(request, id_loc):
68 68
69 69 location = get_object_or_404(Location, pk=id_loc)
70 70
71 71 kwargs = {}
72 72 kwargs['location'] = location
73 73 kwargs['location_keys'] = ['name', 'description']
74 74
75 75 kwargs['title'] = 'Location'
76 76 kwargs['suptitle'] = 'Details'
77 77
78 78 return render(request, 'location.html', kwargs)
79 79
80 80
81 81 def location_new(request):
82 82
83 83 if request.method == 'GET':
84 84 form = LocationForm()
85 85
86 86 if request.method == 'POST':
87 87 form = LocationForm(request.POST)
88 88
89 89 if form.is_valid():
90 90 form.save()
91 91 return redirect('url_locations')
92 92
93 93 kwargs = {}
94 94 kwargs['form'] = form
95 95 kwargs['title'] = 'Location'
96 96 kwargs['suptitle'] = 'New'
97 97 kwargs['button'] = 'Create'
98 98
99 99 return render(request, 'location_edit.html', kwargs)
100 100
101 101
102 102 def location_edit(request, id_loc):
103 103
104 104 location = get_object_or_404(Location, pk=id_loc)
105 105
106 106 if request.method=='GET':
107 107 form = LocationForm(instance=location)
108 108
109 109 if request.method=='POST':
110 110 form = LocationForm(request.POST, instance=location)
111 111
112 112 if form.is_valid():
113 113 form.save()
114 114 return redirect('url_locations')
115 115
116 116 kwargs = {}
117 117 kwargs['form'] = form
118 118 kwargs['title'] = 'Location'
119 119 kwargs['suptitle'] = 'Edit'
120 120 kwargs['button'] = 'Update'
121 121
122 122 return render(request, 'location_edit.html', kwargs)
123 123
124 124
125 125 def location_delete(request, id_loc):
126 126
127 127 location = get_object_or_404(Location, pk=id_loc)
128 128
129 129 if request.method=='POST':
130 130
131 131 if request.user.is_staff:
132 132 location.delete()
133 133 return redirect('url_locations')
134 134
135 135 messages.error(request, 'Not enough permission to delete this object')
136 136 return redirect(location.get_absolute_url())
137 137
138 138 kwargs = {
139 139 'title': 'Delete',
140 140 'suptitle': 'Location',
141 141 'object': location,
142 142 'previous': location.get_absolute_url(),
143 143 'delete': True
144 144 }
145 145
146 146 return render(request, 'confirm.html', kwargs)
147 147
148 148
149 149 def devices(request):
150 150
151 151 devices = Device.objects.all().order_by('device_type__name')
152 152
153 153 # keys = ['id', 'device_type__name', 'name', 'ip_address']
154 154 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
155 155
156 156 kwargs = {}
157 157 kwargs['device_keys'] = keys[1:]
158 158 kwargs['devices'] = devices#.values(*keys)
159 159 kwargs['title'] = 'Device'
160 160 kwargs['suptitle'] = 'List'
161 161 kwargs['button'] = 'New Device'
162 162
163 163 return render(request, 'devices.html', kwargs)
164 164
165 165
166 166 def device(request, id_dev):
167 167
168 168 device = get_object_or_404(Device, pk=id_dev)
169 169
170 170 kwargs = {}
171 171 kwargs['device'] = device
172 172 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
173 173
174 174 kwargs['title'] = 'Device'
175 175 kwargs['suptitle'] = 'Details'
176 176
177 177 return render(request, 'device.html', kwargs)
178 178
179 179
180 180 def device_new(request):
181 181
182 182 if request.method == 'GET':
183 183 form = DeviceForm()
184 184
185 185 if request.method == 'POST':
186 186 form = DeviceForm(request.POST)
187 187
188 188 if form.is_valid():
189 189 form.save()
190 190 return redirect('url_devices')
191 191
192 192 kwargs = {}
193 193 kwargs['form'] = form
194 194 kwargs['title'] = 'Device'
195 195 kwargs['suptitle'] = 'New'
196 196 kwargs['button'] = 'Create'
197 197
198 198 return render(request, 'device_edit.html', kwargs)
199 199
200 200
201 201 def device_edit(request, id_dev):
202 202
203 203 device = get_object_or_404(Device, pk=id_dev)
204 204
205 205 if request.method=='GET':
206 206 form = DeviceForm(instance=device)
207 207
208 208 if request.method=='POST':
209 209 form = DeviceForm(request.POST, instance=device)
210 210
211 211 if form.is_valid():
212 212 form.save()
213 213 return redirect(device.get_absolute_url())
214 214
215 215 kwargs = {}
216 216 kwargs['form'] = form
217 217 kwargs['title'] = 'Device'
218 218 kwargs['suptitle'] = 'Edit'
219 219 kwargs['button'] = 'Update'
220 220
221 221 return render(request, 'device_edit.html', kwargs)
222 222
223 223
224 224 def device_delete(request, id_dev):
225 225
226 226 device = get_object_or_404(Device, pk=id_dev)
227 227
228 228 if request.method=='POST':
229 229
230 230 if request.user.is_staff:
231 231 device.delete()
232 232 return redirect('url_devices')
233 233
234 234 messages.error(request, 'Not enough permission to delete this object')
235 235 return redirect(device.get_absolute_url())
236 236
237 237 kwargs = {
238 238 'title': 'Delete',
239 239 'suptitle': 'Device',
240 240 'object': device,
241 241 'previous': device.get_absolute_url(),
242 242 'delete': True
243 243 }
244 244
245 245 return render(request, 'confirm.html', kwargs)
246 246
247 247
248 248 def campaigns(request):
249 249
250 250 campaigns = Campaign.objects.all().order_by('start_date')
251 251
252 252 keys = ['id', 'name', 'start_date', 'end_date']
253 253
254 254 kwargs = {}
255 255 kwargs['campaign_keys'] = keys[1:]
256 256 kwargs['campaigns'] = campaigns#.values(*keys)
257 257 kwargs['title'] = 'Campaign'
258 258 kwargs['suptitle'] = 'List'
259 259 kwargs['button'] = 'New Campaign'
260 260
261 261 return render(request, 'campaigns.html', kwargs)
262 262
263 263
264 264 def campaign(request, id_camp):
265 265
266 266 campaign = get_object_or_404(Campaign, pk=id_camp)
267 267 experiments = Experiment.objects.filter(campaign=campaign)
268 268
269 269 form = CampaignForm(instance=campaign)
270 270
271 271 kwargs = {}
272 272 kwargs['campaign'] = campaign
273 273 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
274 274
275 275 kwargs['experiments'] = experiments
276 276 kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time']
277 277
278 278 kwargs['title'] = 'Campaign'
279 279 kwargs['suptitle'] = 'Details'
280 280
281 281 kwargs['form'] = form
282 282 kwargs['button'] = 'Add Experiment'
283 283
284 284 return render(request, 'campaign.html', kwargs)
285 285
286 286
287 287 def campaign_new(request):
288 288
289 289 kwargs = {}
290 290
291 291 if request.method == 'GET':
292 292
293 293 if 'template' in request.GET:
294 294 if request.GET['template']=='0':
295 295 form = NewForm(initial={'create_from':2},
296 296 template_choices=Campaign.objects.filter(template=True).values_list('id', 'name'))
297 297 else:
298 298 kwargs['button'] = 'Create'
299 299 kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
300 300 kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
301 301 camp = Campaign.objects.get(pk=request.GET['template'])
302 302 form = CampaignForm(instance=camp,
303 303 initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
304 304 'template':False})
305 305 elif 'blank' in request.GET:
306 306 kwargs['button'] = 'Create'
307 307 form = CampaignForm()
308 308 else:
309 309 form = NewForm()
310 310
311 311 if request.method == 'POST':
312 312 kwargs['button'] = 'Create'
313 313 post = request.POST.copy()
314 314 experiments = []
315 315
316 316 for id_exp in post.getlist('experiments'):
317 317 exp = Experiment.objects.get(pk=id_exp)
318 318 new_exp = exp.clone(template=False)
319 319 experiments.append(new_exp)
320 320
321 321 post.setlist('experiments', [])
322 322
323 323 form = CampaignForm(post)
324 324
325 325 if form.is_valid():
326 326 campaign = form.save()
327 327 for exp in experiments:
328 328 campaign.experiments.add(exp)
329 329 campaign.save()
330 330 return redirect('url_campaign', id_camp=campaign.id)
331 331
332 332 kwargs['form'] = form
333 333 kwargs['title'] = 'Campaign'
334 334 kwargs['suptitle'] = 'New'
335 335
336 336 return render(request, 'campaign_edit.html', kwargs)
337 337
338 338
339 339 def campaign_edit(request, id_camp):
340 340
341 341 campaign = get_object_or_404(Campaign, pk=id_camp)
342 342
343 343 if request.method=='GET':
344 344 form = CampaignForm(instance=campaign)
345 345
346 346 if request.method=='POST':
347 347 exps = campaign.experiments.all().values_list('pk', flat=True)
348 348 post = request.POST.copy()
349 349 new_exps = post.getlist('experiments')
350 350 post.setlist('experiments', [])
351 351 form = CampaignForm(post, instance=campaign)
352 352
353 353 if form.is_valid():
354 354 camp = form.save()
355 355 for id_exp in new_exps:
356 356 if int(id_exp) in exps:
357 357 exps.pop(id_exp)
358 358 else:
359 359 exp = Experiment.objects.get(pk=id_exp)
360 360 if exp.template:
361 361 camp.experiments.add(exp.clone(template=False))
362 362 else:
363 363 camp.experiments.add(exp)
364 364
365 365 for id_exp in exps:
366 366 camp.experiments.remove(Experiment.objects.get(pk=id_exp))
367 367
368 368 return redirect('url_campaign', id_camp=id_camp)
369 369
370 370 kwargs = {}
371 371 kwargs['form'] = form
372 372 kwargs['title'] = 'Campaign'
373 373 kwargs['suptitle'] = 'Edit'
374 374 kwargs['button'] = 'Update'
375 375
376 376 return render(request, 'campaign_edit.html', kwargs)
377 377
378 378
379 379 def campaign_delete(request, id_camp):
380 380
381 381 campaign = get_object_or_404(Campaign, pk=id_camp)
382 382
383 383 if request.method=='POST':
384 384 if request.user.is_staff:
385 385
386 386 for exp in campaign.experiments.all():
387 387 for conf in Configuration.objects.filter(experiment=exp):
388 388 conf.delete()
389 389 exp.delete()
390 390 campaign.delete()
391 391
392 392 return redirect('url_campaigns')
393 393
394 394 messages.error(request, 'Not enough permission to delete this object')
395 395 return redirect(campaign.get_absolute_url())
396 396
397 397 kwargs = {
398 398 'title': 'Delete',
399 399 'suptitle': 'Campaign',
400 400 'object': campaign,
401 401 'previous': campaign.get_absolute_url(),
402 402 'delete': True
403 403 }
404 404
405 405 return render(request, 'confirm.html', kwargs)
406 406
407 407
408 408 def experiments(request):
409 409
410 410 experiment_list = Experiment.objects.all()
411 411
412 412 keys = ['id', 'name', 'start_time', 'end_time']
413 413
414 414 kwargs = {}
415 415
416 416 kwargs['experiment_keys'] = keys[1:]
417 417 kwargs['experiments'] = experiment_list
418 418
419 419 kwargs['title'] = 'Experiment'
420 420 kwargs['suptitle'] = 'List'
421 421 kwargs['button'] = 'New Experiment'
422 422
423 423 return render(request, 'experiments.html', kwargs)
424 424
425 425
426 426 def experiment(request, id_exp):
427 427
428 428 experiment = get_object_or_404(Experiment, pk=id_exp)
429 429
430 430 configurations = Configuration.objects.filter(experiment=experiment, type=0)
431 431
432 432 kwargs = {}
433 433
434 434 kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time']
435 435 kwargs['experiment'] = experiment
436 436
437 437 kwargs['configuration_keys'] = ['device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
438 438 kwargs['configurations'] = configurations
439 439
440 440 kwargs['title'] = 'Experiment'
441 441 kwargs['suptitle'] = 'Details'
442 442
443 443 kwargs['button'] = 'Add Configuration'
444 444
445 445 ###### SIDEBAR ######
446 446 kwargs.update(sidebar(experiment=experiment))
447 447
448 448 return render(request, 'experiment.html', kwargs)
449 449
450 450
451 451 def experiment_new(request, id_camp=None):
452 452
453 453 kwargs = {}
454 454
455 455 if request.method == 'GET':
456 456 if 'template' in request.GET:
457 457 if request.GET['template']=='0':
458 458 form = NewForm(initial={'create_from':2},
459 459 template_choices=Experiment.objects.filter(template=True).values_list('id', 'name'))
460 460 else:
461 461 kwargs['button'] = 'Create'
462 462 kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
463 463 kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
464 464 exp=Experiment.objects.get(pk=request.GET['template'])
465 465 form = ExperimentForm(instance=exp,
466 466 initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
467 467 'template': False})
468 468 elif 'blank' in request.GET:
469 469 kwargs['button'] = 'Create'
470 470 form = ExperimentForm()
471 471 else:
472 472 form = NewForm()
473 473
474 474 if request.method == 'POST':
475 475 form = ExperimentForm(request.POST)
476 476 if form.is_valid():
477 477 experiment = form.save()
478 478
479 479 if 'template' in request.GET:
480 480 configurations = Configuration.objects.filter(experiment=request.GET['template'], type=0)
481 481 for conf in configurations:
482 482 conf.clone(experiment=experiment, template=False)
483 483
484 484 return redirect('url_experiment', id_exp=experiment.id)
485 485
486 486 kwargs['form'] = form
487 487 kwargs['title'] = 'Experiment'
488 488 kwargs['suptitle'] = 'New'
489 489
490 490 return render(request, 'experiment_edit.html', kwargs)
491 491
492 492
493 493 def experiment_edit(request, id_exp):
494 494
495 495 experiment = get_object_or_404(Experiment, pk=id_exp)
496 496
497 497 if request.method == 'GET':
498 498 form = ExperimentForm(instance=experiment)
499 499
500 500 if request.method=='POST':
501 501 form = ExperimentForm(request.POST, instance=experiment)
502 502
503 503 if form.is_valid():
504 504 experiment = form.save()
505 505 return redirect('url_experiment', id_exp=experiment.id)
506 506
507 507 kwargs = {}
508 508 kwargs['form'] = form
509 509 kwargs['title'] = 'Experiment'
510 510 kwargs['suptitle'] = 'Edit'
511 511 kwargs['button'] = 'Update'
512 512
513 513 return render(request, 'experiment_edit.html', kwargs)
514 514
515 515
516 516 def experiment_delete(request, id_exp):
517 517
518 518 experiment = get_object_or_404(Experiment, pk=id_exp)
519 519
520 520 if request.method=='POST':
521 521 if request.user.is_staff:
522 522 for conf in Configuration.objects.filter(experiment=experiment):
523 523 conf.delete()
524 524 experiment.delete()
525 525 return redirect('url_experiments')
526 526
527 527 messages.error(request, 'Not enough permission to delete this object')
528 528 return redirect(experiment.get_absolute_url())
529 529
530 530 kwargs = {
531 531 'title': 'Delete',
532 532 'suptitle': 'Experiment',
533 533 'object': experiment,
534 534 'previous': experiment.get_absolute_url(),
535 535 'delete': True
536 536 }
537 537
538 538 return render(request, 'confirm.html', kwargs)
539 539
540 540
541 541 def dev_confs(request):
542 542
543 543 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
544 544
545 545 kwargs = {}
546 546
547 547 kwargs['configuration_keys'] = ['device', 'experiment', 'type', 'programmed_date']
548 548 kwargs['configurations'] = configurations
549 549
550 550 kwargs['title'] = 'Configuration'
551 551 kwargs['suptitle'] = 'List'
552 552
553 553 return render(request, 'dev_confs.html', kwargs)
554 554
555 555
556 556 def dev_conf(request, id_conf):
557 557
558 558 conf = get_object_or_404(Configuration, pk=id_conf)
559 559
560 560 return redirect(conf.get_absolute_url())
561 561
562 562
563 563 def dev_conf_new(request, id_exp=0, id_dev=0):
564 564
565 565 initial = {}
566 566
567 567 if id_exp<>0:
568 568 initial['experiment'] = id_exp
569 569
570 570 if id_dev<>0:
571 571 initial['device'] = id_dev
572 572
573 573 if request.method == 'GET':
574 574 if id_dev==0:
575 575 form = ConfigurationForm(initial=initial)
576 576 else:
577 577 device = Device.objects.get(pk=id_dev)
578 578 DevConfForm = CONF_FORMS[device.device_type.name]
579 579
580 580 form = DevConfForm(initial=initial)
581 581
582 582 if request.method == 'POST':
583 583
584 584 device = Device.objects.get(pk=request.POST['device'])
585 585 DevConfForm = CONF_FORMS[device.device_type.name]
586 586
587 587 form = DevConfForm(request.POST)
588 588
589 589 if form.is_valid():
590 590 dev_conf = form.save()
591 591
592 592 return redirect('url_dev_confs')
593 593
594 594 kwargs = {}
595 595 kwargs['id_exp'] = id_exp
596 596 kwargs['form'] = form
597 597 kwargs['title'] = 'Configuration'
598 598 kwargs['suptitle'] = 'New'
599 599 kwargs['button'] = 'Create'
600 600
601 601 return render(request, 'dev_conf_edit.html', kwargs)
602 602
603 603
604 604 def dev_conf_edit(request, id_conf):
605 605
606 606 conf = get_object_or_404(Configuration, pk=id_conf)
607 607
608 608 DevConfModel = CONF_MODELS[conf.device.device_type.name]
609 609 DevConfForm = CONF_FORMS[conf.device.device_type.name]
610 610
611 611 dev_conf = DevConfModel.objects.get(pk=id_conf)
612 612
613 613 if request.method=='GET':
614 614 form = DevConfForm(instance=dev_conf)
615 615
616 616 if request.method=='POST':
617 617 form = DevConfForm(request.POST, instance=dev_conf)
618 618
619 619 if form.is_valid():
620 620 form.save()
621 621 return redirect('url_dev_conf', id_conf=id_conf)
622 622
623 623 kwargs = {}
624 624 kwargs['form'] = form
625 625 kwargs['title'] = 'Device Configuration'
626 626 kwargs['suptitle'] = 'Edit'
627 627 kwargs['button'] = 'Update'
628 628
629 629 ###### SIDEBAR ######
630 630 kwargs.update(sidebar(conf=conf))
631 631
632 632 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
633 633
634 634
635 635 def dev_conf_start(request, id_conf):
636 636
637 637 conf = get_object_or_404(Configuration, pk=id_conf)
638 638
639 639 DevConfModel = CONF_MODELS[conf.device.device_type.name]
640 640
641 641 conf = DevConfModel.objects.get(pk=id_conf)
642 642
643 643 if conf.start_device():
644 644 messages.success(request, conf.message)
645 645 else:
646 646 messages.error(request, conf.message)
647 647
648 648 conf.status_device()
649 649
650 650 return redirect(conf.get_absolute_url())
651 651
652 652
653 653 def dev_conf_stop(request, id_conf):
654 654
655 655 conf = get_object_or_404(Configuration, pk=id_conf)
656 656
657 657 DevConfModel = CONF_MODELS[conf.device.device_type.name]
658 658
659 659 conf = DevConfModel.objects.get(pk=id_conf)
660 660
661 661 if conf.stop_device():
662 662 messages.success(request, conf.message)
663 663 else:
664 664 messages.error(request, conf.message)
665 665
666 666 conf.status_device()
667 667
668 668 return redirect(conf.get_absolute_url())
669 669
670 670
671 671 def dev_conf_status(request, id_conf):
672 672
673 673 conf = get_object_or_404(Configuration, pk=id_conf)
674 674
675 675 DevConfModel = CONF_MODELS[conf.device.device_type.name]
676 676
677 677 conf = DevConfModel.objects.get(pk=id_conf)
678 678
679 679 if conf.status_device():
680 680 messages.success(request, conf.message)
681 681 else:
682 682 messages.error(request, conf.message)
683 683
684 684 return redirect(conf.get_absolute_url())
685 685
686 686
687 687 def dev_conf_write(request, id_conf):
688 688
689 689 conf = get_object_or_404(Configuration, pk=id_conf)
690 690
691 691 DevConfModel = CONF_MODELS[conf.device.device_type.name]
692 692
693 693 conf = DevConfModel.objects.get(pk=id_conf)
694 694
695 695 answer = conf.write_device()
696 696 conf.status_device()
697 697
698 698 if answer:
699 699 messages.success(request, conf.message)
700 700
701 701 #Creating a historical configuration
702 702 conf.clone(type=0, template=False)
703 703
704 704 #Original configuration
705 705 conf = DevConfModel.objects.get(pk=id_conf)
706 706 else:
707 707 messages.error(request, conf.message)
708 708
709 709 return redirect(conf.get_absolute_url())
710 710
711 711
712 712 def dev_conf_read(request, id_conf):
713 713
714 714 conf = get_object_or_404(Configuration, pk=id_conf)
715 715
716 716 DevConfModel = CONF_MODELS[conf.device.device_type.name]
717 717 DevConfForm = CONF_FORMS[conf.device.device_type.name]
718 718
719 719 conf = DevConfModel.objects.get(pk=id_conf)
720 720
721 721 if request.method=='GET':
722 722
723 723 parms = conf.read_device()
724 724 conf.status_device()
725 725
726 726 if not parms:
727 727 messages.error(request, conf.message)
728 728 return redirect(conf.get_absolute_url())
729 729
730 730 form = DevConfForm(initial=parms, instance=conf)
731 731
732 732 if request.method=='POST':
733 733 form = DevConfForm(request.POST, instance=conf)
734 734
735 735 if form.is_valid():
736 736 form.save()
737 737 return redirect(conf.get_absolute_url())
738 738
739 739 messages.error(request, "Parameters could not be saved")
740 740
741 741 kwargs = {}
742 742 kwargs['id_dev'] = conf.id
743 743 kwargs['form'] = form
744 744 kwargs['title'] = 'Device Configuration'
745 745 kwargs['suptitle'] = 'Parameters read from device'
746 746 kwargs['button'] = 'Save'
747 747
748 748 ###### SIDEBAR ######
749 749 kwargs.update(sidebar(conf=conf))
750 750
751 751 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
752 752
753 753
754 754 def dev_conf_import(request, id_conf):
755 755
756 756 conf = get_object_or_404(Configuration, pk=id_conf)
757 757
758 758 DevConfModel = CONF_MODELS[conf.device.device_type.name]
759 759 DevConfForm = CONF_FORMS[conf.device.device_type.name]
760 760 conf = DevConfModel.objects.get(pk=id_conf)
761 761
762 762 if request.method == 'GET':
763 763 file_form = UploadFileForm()
764 764
765 765 if request.method == 'POST':
766 766 file_form = UploadFileForm(request.POST, request.FILES)
767 767
768 768 if file_form.is_valid():
769 769
770 770 parms = conf.import_from_file(request.FILES['file'])
771 771
772 772 if parms:
773 773 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
774 774 form = DevConfForm(initial=parms, instance=conf)
775 775
776 776 kwargs = {}
777 777 kwargs['id_dev'] = conf.id
778 778 kwargs['form'] = form
779 779 kwargs['title'] = 'Device Configuration'
780 780 kwargs['suptitle'] = 'Parameters imported'
781 781 kwargs['button'] = 'Save'
782 782 kwargs['action'] = conf.get_absolute_url_edit()
783 783 kwargs['previous'] = conf.get_absolute_url()
784 784
785 785 ###### SIDEBAR ######
786 786 kwargs.update(sidebar(conf=conf))
787 787
788 788 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
789 789
790 790 messages.error(request, "Could not import parameters from file")
791 791
792 792 kwargs = {}
793 793 kwargs['id_dev'] = conf.id
794 794 kwargs['title'] = 'Device Configuration'
795 795 kwargs['form'] = file_form
796 796 kwargs['suptitle'] = 'Importing file'
797 797 kwargs['button'] = 'Import'
798 798
799 799 kwargs.update(sidebar(conf=conf))
800 800
801 801 return render(request, 'dev_conf_import.html', kwargs)
802 802
803 803
804 804 def dev_conf_export(request, id_conf):
805 805
806 806 conf = get_object_or_404(Configuration, pk=id_conf)
807 807
808 808 DevConfModel = CONF_MODELS[conf.device.device_type.name]
809 809
810 810 conf = DevConfModel.objects.get(pk=id_conf)
811 811
812 812 if request.method == 'GET':
813 813 file_form = DownloadFileForm(conf.device.device_type.name)
814 814
815 815 if request.method == 'POST':
816 816 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
817 817
818 818 if file_form.is_valid():
819 819 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
820 820
821 821 response = HttpResponse(content_type=fields['content_type'])
822 822 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
823 823 response.write(fields['content'])
824 824
825 825 return response
826 826
827 827 messages.error(request, "Could not export parameters")
828 828
829 829 kwargs = {}
830 830 kwargs['id_dev'] = conf.id
831 831 kwargs['title'] = 'Device Configuration'
832 832 kwargs['form'] = file_form
833 833 kwargs['suptitle'] = 'Exporting file'
834 834 kwargs['button'] = 'Export'
835 835
836 836 return render(request, 'dev_conf_export.html', kwargs)
837 837
838 838
839 839 def dev_conf_delete(request, id_conf):
840 840
841 841 conf = get_object_or_404(Configuration, pk=id_conf)
842 842
843 843 if request.method=='POST':
844 844 if request.user.is_staff:
845 845 conf.delete()
846 846 return redirect('url_dev_confs')
847 847
848 848 messages.error(request, 'Not enough permission to delete this object')
849 849 return redirect(conf.get_absolute_url())
850 850
851 851 kwargs = {
852 852 'title': 'Delete',
853 853 'suptitle': 'Experiment',
854 854 'object': conf,
855 855 'previous': conf.get_absolute_url(),
856 856 'delete': True
857 857 }
858 858
859 859 return render(request, 'confirm.html', kwargs)
860 860
861 861
862 862 def sidebar(**kwargs):
863 863
864 864 side_data = {}
865 865
866 866 conf = kwargs.get('conf', None)
867 867 experiment = kwargs.get('experiment', None)
868 868
869 869 if not experiment:
870 870 experiment = conf.experiment
871 871
872 872 if experiment:
873 873 side_data['experiment'] = experiment
874 874 campaign = experiment.campaign_set.all()
875 875 if campaign:
876 876 side_data['campaign'] = campaign[0]
877 877 experiments = campaign[0].experiments.all()
878 878 else:
879 879 experiments = [experiment]
880 880 configurations = experiment.configuration_set.filter(type=0)
881 881 side_data['side_experiments'] = experiments
882 882 side_data['side_configurations'] = configurations
883 883
884 884 return side_data
885 885
886 886
887 887 def operation(request, id_camp=None):
888 888
889 889 if not id_camp:
890 890 campaigns = Campaign.objects.all().order_by('-start_date')
891 891
892 892 if not campaigns:
893 893 kwargs = {}
894 894 kwargs['title'] = 'No Campaigns'
895 895 kwargs['suptitle'] = 'Empty'
896 896 return render(request, 'operation.html', kwargs)
897 897
898 898 id_camp = campaigns[0].id
899 899
900 900 campaign = get_object_or_404(Campaign, pk = id_camp)
901 901
902 902 if request.method=='GET':
903 903 form = OperationForm(initial={'campaign': campaign.id}, length = 5)
904 904
905 905 if request.method=='POST':
906 906 form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5)
907 907
908 908 if form.is_valid():
909 909 return redirect('url_operation', id_camp=campaign.id)
910 910 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
911 911 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
912 912 #for exs in experiments:
913 913 # exs.get_status()
914 914 locations= Location.objects.filter(experiment=experiments).distinct()
915 915 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
916 916 kwargs = {}
917 917 #---Campaign
918 918 kwargs['campaign'] = campaign
919 919 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
920 920 #---Experiment
921 921 keys = ['id', 'name', 'start_time', 'end_time', 'status']
922 922 kwargs['experiment_keys'] = keys[1:]
923 923 kwargs['experiments'] = experiments
924 924 #---Radar
925 925 kwargs['locations'] = locations
926 926 #---Else
927 927 kwargs['title'] = 'Campaign'
928 928 kwargs['suptitle'] = campaign.name
929 929 kwargs['form'] = form
930 930 kwargs['button'] = 'Search'
931 931 kwargs['details'] = True
932 932 kwargs['search_button'] = True
933 933
934 934 return render(request, 'operation.html', kwargs)
935 935
936 936
937 937 def operation_search(request, id_camp=None):
938 938
939 939
940 940 if not id_camp:
941 941 campaigns = Campaign.objects.all().order_by('-start_date')
942 942
943 943 if not campaigns:
944 944 return render(request, 'operation.html', {})
945 945
946 946 id_camp = campaigns[0].id
947 947 campaign = get_object_or_404(Campaign, pk = id_camp)
948 948
949 949 if request.method=='GET':
950 950 form = OperationSearchForm(initial={'campaign': campaign.id})
951 951
952 952 if request.method=='POST':
953 953 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
954 954
955 955 if form.is_valid():
956 956 return redirect('url_operation', id_camp=campaign.id)
957 957
958 958 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
959 959 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
960 960 #for exs in experiments:
961 961 # exs.get_status()
962 962 locations= Location.objects.filter(experiment=experiments).distinct()
963 963 form = OperationSearchForm(initial={'campaign': campaign.id})
964 964
965 965 kwargs = {}
966 966 #---Campaign
967 967 kwargs['campaign'] = campaign
968 968 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
969 969 #---Experiment
970 970 keys = ['id', 'name', 'start_time', 'end_time', 'status']
971 971 kwargs['experiment_keys'] = keys[1:]
972 972 kwargs['experiments'] = experiments
973 973 #---Radar
974 974 kwargs['locations'] = locations
975 975 #---Else
976 976 kwargs['title'] = 'Campaign'
977 977 kwargs['suptitle'] = campaign.name
978 978 kwargs['form'] = form
979 979 kwargs['button'] = 'Select'
980 980 kwargs['details'] = True
981 981 kwargs['search_button'] = False
982 982
983 983 return render(request, 'operation.html', kwargs)
984 984
985 985
986 986 def radar_play(request, id_camp, id_radar):
987 987 campaign = get_object_or_404(Campaign, pk = id_camp)
988 988 radar = get_object_or_404(Location, pk = id_radar)
989 989 today = datetime.today()
990 990 now = today.time()
991 991
992 #--Clear Old Experiments From RunningExperiment Object
993 running_experiment = RunningExperiment.objects.get(radar=radar)
994 if running_experiment:
995 running_experiment.running_experiment.clear()
996 running_experiment.save()
997
992 998 #--If campaign datetime is ok:
993 999 if today >= campaign.start_date and today <= campaign.end_date:
994 1000 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
995 1001 for exp in experiments:
996 1002 #--If experiment time is ok:
997 1003 if now >= exp.start_time and now <= exp.end_time:
998 1004 configurations = Configuration.objects.filter(experiment = exp)
999 1005 for conf in configurations:
1000 1006 if 'cgs' in conf.device.device_type.name:
1001 1007 conf.status_device()
1002 1008 else:
1003 1009 answer = conf.start_device()
1004 1010 conf.status_device()
1005 1011 #--Running Experiment
1006 r_e = RunningExperiment.objects.filter(radar=radar)
1012 old_running_experiment = RunningExperiment.objects.get(radar=radar)
1007 1013 #--If RunningExperiment element exists
1008 if r_e:
1009 r_e = r_e[0]
1010 r_e.running_experiment = exp
1011 r_e.status = 3
1012 r_e.save()
1014 if old_running_experiment:
1015 old_running_experiment.running_experiment.add(exp)
1016 old_running_experiment.status = 3
1017 old_running_experiment.save()
1018 #--Create a new Running_Experiment Object
1013 1019 else:
1014 running_experiment = RunningExperiment(
1020 new_running_experiment = RunningExperiment(
1015 1021 radar = radar,
1016 1022 status = 3,
1017 1023 )
1018 running_experiment.save()
1019 running_experiment.running_experiment.add(exp)
1020 running_experiment.save()
1024 new_running_experiment.save()
1025 new_running_experiment.running_experiment.add(exp)
1026 new_running_experiment.save()
1021 1027
1022 1028 if answer:
1023 1029 messages.success(request, conf.message)
1024 1030 exp.status=2
1025 1031 exp.save()
1026 1032 else:
1027 1033 messages.error(request, conf.message)
1028 1034 else:
1029 1035 if exp.status == 1 or exp.status == 3:
1030 1036 exp.status=3
1031 1037 exp.save()
1032 1038
1033 1039
1034 1040 route = request.META['HTTP_REFERER']
1035 1041 route = str(route)
1036 1042 if 'search' in route:
1037 1043 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1038 1044 else:
1039 1045 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1040 1046
1041 1047
1042 1048 def radar_stop(request, id_camp, id_radar):
1049 campaign = get_object_or_404(Campaign, pk = id_camp)
1050 radar = get_object_or_404(Location, pk = id_radar)
1051 today = datetime.today()
1052 now = today.time()
1043 1053
1044 1054 route = request.META['HTTP_REFERER']
1045 1055 route = str(route)
1046 1056 if 'search' in route:
1047 1057 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1048 1058 else:
1049 1059 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1050 1060
1051 1061
1052 1062 def radar_refresh(request, id_camp, id_radar):
1053 1063
1054 1064 campaign = get_object_or_404(Campaign, pk = id_camp)
1055 1065 radar = get_object_or_404(Location, pk = id_radar)
1056 1066 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1057 1067 for exs in experiments:
1058 1068 exs.get_status()
1059 1069
1060 1070 route = request.META['HTTP_REFERER']
1061 1071 route = str(route)
1062 1072 if 'search' in route:
1063 1073 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1064 1074 else:
1065 1075 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1066 1076
General Comments 0
You need to be logged in to leave comments. Login now