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