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