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