##// END OF EJS Templates
Fix prints for python 3...
Fix prints for python 3 git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@197 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r174:fe01c8eee39a
r174:fe01c8eee39a
Show More
views.py
1587 lines | 49.2 KiB | text/x-python | PythonLexer
from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
from django.utils.safestring import mark_safe
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib import messages
from django.http.request import QueryDict
from datetime import datetime
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
from .forms import OperationSearchForm, FilterForm
from apps.rc.forms import RCConfigurationForm
from apps.dds.forms import DDSConfigurationForm
from apps.jars.forms import JARSConfigurationForm
from apps.cgs.forms import CGSConfigurationForm
from apps.abs.forms import ABSConfigurationForm
from apps.usrp.forms import USRPConfigurationForm
from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
from apps.cgs.models import CGSConfiguration
from apps.jars.models import JARSConfiguration, EXPERIMENT_TYPE
from apps.usrp.models import USRPConfiguration
from apps.abs.models import ABSConfiguration
from apps.rc.models import RCConfiguration, RCLine, RCLineType
from apps.dds.models import DDSConfiguration
from django.http.request import QueryDict
#from __builtin__ import False
# Create your views here.
CONF_FORMS = {
'rc': RCConfigurationForm,
'dds': DDSConfigurationForm,
'jars': JARSConfigurationForm,
'cgs': CGSConfigurationForm,
'abs': ABSConfigurationForm,
'usrp': USRPConfigurationForm,
}
CONF_MODELS = {
'rc': RCConfiguration,
'dds': DDSConfiguration,
'jars': JARSConfiguration,
'cgs': CGSConfiguration,
'abs': ABSConfiguration,
'usrp': USRPConfiguration,
}
MIX_MODES = {
'0': 'P',
'1': 'S',
}
MIX_OPERATIONS = {
'0': 'OR',
'1': 'XOR',
'2': 'AND',
'3': 'NAND',
}
def index(request):
kwargs = {}
return render(request, 'index.html', kwargs)
def locations(request):
page = request.GET.get('page')
order = ('name',)
kwargs = get_paginator(Location, page, order)
kwargs['keys'] = ['name', 'description']
kwargs['title'] = 'Radar System'
kwargs['suptitle'] = 'List'
return render(request, 'base_list.html', kwargs)
def location(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
kwargs = {}
kwargs['location'] = location
kwargs['location_keys'] = ['name', 'description']
kwargs['title'] = 'Location'
kwargs['suptitle'] = 'Details'
return render(request, 'location.html', kwargs)
def location_new(request):
if request.method == 'GET':
form = LocationForm()
if request.method == 'POST':
form = LocationForm(request.POST)
if form.is_valid():
form.save()
return redirect('url_locations')
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Radar System'
kwargs['suptitle'] = 'New'
kwargs['button'] = 'Create'
return render(request, 'base_edit.html', kwargs)
def location_edit(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
if request.method=='GET':
form = LocationForm(instance=location)
if request.method=='POST':
form = LocationForm(request.POST, instance=location)
if form.is_valid():
form.save()
return redirect('url_locations')
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Location'
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
return render(request, 'base_edit.html', kwargs)
def location_delete(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
if request.method=='POST':
if request.user.is_staff:
location.delete()
return redirect('url_locations')
messages.error(request, 'Not enough permission to delete this object')
return redirect(location.get_absolute_url())
kwargs = {
'title': 'Delete',
'suptitle': 'Location',
'object': location,
'previous': location.get_absolute_url(),
'delete': True
}
return render(request, 'confirm.html', kwargs)
def devices(request):
page = request.GET.get('page')
order = ('device_type', 'name')
kwargs = get_paginator(Device, page, order)
kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type']
kwargs['title'] = 'Device'
kwargs['suptitle'] = 'List'
return render(request, 'base_list.html', kwargs)
def device(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
kwargs = {}
kwargs['device'] = device
kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
kwargs['title'] = 'Device'
kwargs['suptitle'] = 'Details'
return render(request, 'device.html', kwargs)
def device_new(request):
if request.method == 'GET':
form = DeviceForm()
if request.method == 'POST':
form = DeviceForm(request.POST)
if form.is_valid():
form.save()
return redirect('url_devices')
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Device'
kwargs['suptitle'] = 'New'
kwargs['button'] = 'Create'
return render(request, 'base_edit.html', kwargs)
def device_edit(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
if request.method=='GET':
form = DeviceForm(instance=device)
if request.method=='POST':
form = DeviceForm(request.POST, instance=device)
if form.is_valid():
form.save()
return redirect(device.get_absolute_url())
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Device'
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
return render(request, 'base_edit.html', kwargs)
def device_delete(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
if request.method=='POST':
if request.user.is_staff:
device.delete()
return redirect('url_devices')
messages.error(request, 'Not enough permission to delete this object')
return redirect(device.get_absolute_url())
kwargs = {
'title': 'Delete',
'suptitle': 'Device',
'object': device,
'previous': device.get_absolute_url(),
'delete': True
}
return render(request, 'confirm.html', kwargs)
def campaigns(request):
page = request.GET.get('page')
order = ('start_date',)
filters = request.GET.copy()
kwargs = get_paginator(Campaign, page, order, filters)
form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template'])
kwargs['keys'] = ['name', 'start_date', 'end_date']
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'List'
kwargs['form'] = form
filters.pop('page', None)
kwargs['q'] = urlencode(filters)
return render(request, 'base_list.html', kwargs)
def campaign(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
experiments = Experiment.objects.filter(campaign=campaign)
form = CampaignForm(instance=campaign)
kwargs = {}
kwargs['campaign'] = campaign
kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
kwargs['experiments'] = experiments
kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time']
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'Details'
kwargs['form'] = form
kwargs['button'] = 'Add Experiment'
return render(request, 'campaign.html', kwargs)
def campaign_new(request):
kwargs = {}
if request.method == 'GET':
if 'template' in request.GET:
if request.GET['template']=='0':
form = NewForm(initial={'create_from':2},
template_choices=Campaign.objects.filter(template=True).values_list('id', 'name'))
else:
kwargs['button'] = 'Create'
kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
camp = Campaign.objects.get(pk=request.GET['template'])
form = CampaignForm(instance=camp,
initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
'template':False})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
form = CampaignForm()
else:
form = NewForm()
if request.method == 'POST':
kwargs['button'] = 'Create'
post = request.POST.copy()
experiments = []
for id_exp in post.getlist('experiments'):
exp = Experiment.objects.get(pk=id_exp)
new_exp = exp.clone(template=False)
experiments.append(new_exp)
post.setlist('experiments', [])
form = CampaignForm(post)
if form.is_valid():
campaign = form.save()
for exp in experiments:
campaign.experiments.add(exp)
campaign.save()
return redirect('url_campaign', id_camp=campaign.id)
kwargs['form'] = form
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'New'
return render(request, 'campaign_edit.html', kwargs)
def campaign_edit(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
if request.method=='GET':
form = CampaignForm(instance=campaign)
if request.method=='POST':
exps = campaign.experiments.all().values_list('pk', flat=True)
post = request.POST.copy()
new_exps = post.getlist('experiments')
post.setlist('experiments', [])
form = CampaignForm(post, instance=campaign)
if form.is_valid():
camp = form.save()
for id_exp in new_exps:
if int(id_exp) in exps:
exps.pop(id_exp)
else:
exp = Experiment.objects.get(pk=id_exp)
if exp.template:
camp.experiments.add(exp.clone(template=False))
else:
camp.experiments.add(exp)
for id_exp in exps:
camp.experiments.remove(Experiment.objects.get(pk=id_exp))
return redirect('url_campaign', id_camp=id_camp)
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
return render(request, 'campaign_edit.html', kwargs)
def campaign_delete(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
if request.method=='POST':
if request.user.is_staff:
for exp in campaign.experiments.all():
for conf in Configuration.objects.filter(experiment=exp):
conf.delete()
exp.delete()
campaign.delete()
return redirect('url_campaigns')
messages.error(request, 'Not enough permission to delete this object')
return redirect(campaign.get_absolute_url())
kwargs = {
'title': 'Delete',
'suptitle': 'Campaign',
'object': campaign,
'previous': campaign.get_absolute_url(),
'delete': True
}
return render(request, 'confirm.html', kwargs)
def campaign_export(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
content = campaign.parms_to_dict()
content_type = 'application/json'
filename = '%s_%s.json' %(campaign.name, campaign.id)
response = HttpResponse(content_type=content_type)
response['Content-Disposition'] = 'attachment; filename="%s"' %filename
response.write(content)
return response
def campaign_import(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
if request.method == 'GET':
file_form = UploadFileForm()
if request.method == 'POST':
file_form = UploadFileForm(request.POST, request.FILES)
if file_form.is_valid():
parms = campaign.import_from_file(request.FILES['file'])
if parms:
parms['name'] = parms['campaign']
new_camp = campaign.dict_to_parms(parms, CONF_MODELS)
messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
return redirect(new_camp.get_absolute_url_edit())
messages.error(request, "Could not import parameters from file")
kwargs = {}
kwargs['title'] = 'Campaign'
kwargs['form'] = file_form
kwargs['suptitle'] = 'Importing file'
kwargs['button'] = 'Import'
return render(request, 'campaign_import.html', kwargs)
def experiments(request):
page = request.GET.get('page')
order = ('location',)
filters = request.GET.copy()
kwargs = get_paginator(Experiment, page, order, filters)
form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time']
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'List'
kwargs['form'] = form
filters.pop('page', None)
kwargs['q'] = urlencode(filters)
return render(request, 'base_list.html', kwargs)
def experiment(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
configurations = Configuration.objects.filter(experiment=experiment, type=0)
kwargs = {}
kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
kwargs['experiment'] = experiment
kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
kwargs['configurations'] = configurations
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'Details'
kwargs['button'] = 'Add Configuration'
###### SIDEBAR ######
kwargs.update(sidebar(experiment=experiment))
return render(request, 'experiment.html', kwargs)
def experiment_new(request, id_camp=None):
kwargs = {}
if request.method == 'GET':
if 'template' in request.GET:
if request.GET['template']=='0':
form = NewForm(initial={'create_from':2},
template_choices=Experiment.objects.filter(template=True).values_list('id', 'name'))
else:
kwargs['button'] = 'Create'
kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
exp=Experiment.objects.get(pk=request.GET['template'])
form = ExperimentForm(instance=exp,
initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
'template': False})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
form = ExperimentForm()
else:
form = NewForm()
if request.method == 'POST':
form = ExperimentForm(request.POST)
if form.is_valid():
experiment = form.save()
if 'template' in request.GET:
configurations = Configuration.objects.filter(experiment=request.GET['template'], type=0)
for conf in configurations:
conf.clone(experiment=experiment, template=False)
return redirect('url_experiment', id_exp=experiment.id)
kwargs['form'] = form
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'New'
return render(request, 'experiment_edit.html', kwargs)
def experiment_edit(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
if request.method == 'GET':
form = ExperimentForm(instance=experiment)
if request.method=='POST':
form = ExperimentForm(request.POST, instance=experiment)
if form.is_valid():
experiment = form.save()
return redirect('url_experiment', id_exp=experiment.id)
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
return render(request, 'experiment_edit.html', kwargs)
def experiment_delete(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
if request.method=='POST':
if request.user.is_staff:
for conf in Configuration.objects.filter(experiment=experiment):
conf.delete()
experiment.delete()
return redirect('url_experiments')
messages.error(request, 'Not enough permission to delete this object')
return redirect(experiment.get_absolute_url())
kwargs = {
'title': 'Delete',
'suptitle': 'Experiment',
'object': experiment,
'previous': experiment.get_absolute_url(),
'delete': True
}
return render(request, 'confirm.html', kwargs)
def experiment_export(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
content = experiment.parms_to_dict()
content_type = 'application/json'
filename = '%s_%s.json' %(experiment.name, experiment.id)
response = HttpResponse(content_type=content_type)
response['Content-Disposition'] = 'attachment; filename="%s"' %filename
response.write(content)
return response
def experiment_import(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
configurations = Configuration.objects.filter(experiment=experiment)
if request.method == 'GET':
file_form = UploadFileForm()
if request.method == 'POST':
file_form = UploadFileForm(request.POST, request.FILES)
if file_form.is_valid():
parms = experiment.import_from_file(request.FILES['file'])
if parms:
new_exp = experiment.dict_to_parms(parms, CONF_MODELS)
messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
return redirect(new_exp.get_absolute_url_edit())
messages.error(request, "Could not import parameters from file")
kwargs = {}
kwargs['title'] = 'Experiment'
kwargs['form'] = file_form
kwargs['suptitle'] = 'Importing file'
kwargs['button'] = 'Import'
kwargs.update(sidebar(experiment=experiment))
return render(request, 'experiment_import.html', kwargs)
def experiment_mix(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
rc_confs = [conf for conf in RCConfiguration.objects.filter(experiment=id_exp,
mix=False)]
if len(rc_confs)<2:
messages.warning(request, 'You need at least two RC Configurations to make a mix')
return redirect(experiment.get_absolute_url())
mix_confs = RCConfiguration.objects.filter(experiment=id_exp, mix=True)
if mix_confs:
mix = mix_confs[0]
else:
mix = RCConfiguration(experiment=experiment,
device=rc_confs[0].device,
ipp=rc_confs[0].ipp,
clock_in=rc_confs[0].clock_in,
clock_divider=rc_confs[0].clock_divider,
mix=True,
parameters='')
mix.save()
line_type = RCLineType.objects.get(name='mix')
for i in range(len(rc_confs[0].get_lines())):
line = RCLine(rc_configuration=mix, line_type=line_type, channel=i)
line.save()
initial = {'name': mix.name,
'result': parse_mix_result(mix.parameters),
'delay': 0,
'mask': [0,1,2,3,4,5,6,7]
}
if request.method=='GET':
form = RCMixConfigurationForm(confs=rc_confs, initial=initial)
if request.method=='POST':
result = mix.parameters
if '{}|'.format(request.POST['experiment']) in result:
messages.error(request, 'Configuration already added')
else:
if 'operation' in request.POST:
operation = MIX_OPERATIONS[request.POST['operation']]
else:
operation = ' '
mode = MIX_MODES[request.POST['mode']]
if result:
result = '{}-{}|{}|{}|{}|{}'.format(mix.parameters,
request.POST['experiment'],
mode,
operation,
float(request.POST['delay']),
parse_mask(request.POST.getlist('mask'))
)
else:
result = '{}|{}|{}|{}|{}'.format(request.POST['experiment'],
mode,
operation,
float(request.POST['delay']),
parse_mask(request.POST.getlist('mask'))
)
mix.parameters = result
mix.name = request.POST['name']
mix.save()
mix.update_pulses()
initial['result'] = parse_mix_result(result)
initial['name'] = mix.name
form = RCMixConfigurationForm(initial=initial, confs=rc_confs)
kwargs = {
'title': 'Experiment',
'suptitle': 'Mix Configurations',
'form' : form,
'extra_button': 'Delete',
'button': 'Add',
'cancel': 'Back',
'previous': experiment.get_absolute_url(),
'id_exp':id_exp,
}
return render(request, 'experiment_mix.html', kwargs)
def experiment_mix_delete(request, id_exp):
conf = RCConfiguration.objects.get(experiment=id_exp, mix=True)
values = conf.parameters.split('-')
conf.parameters = '-'.join(values[:-1])
conf.save()
return redirect('url_mix_experiment', id_exp=id_exp)
def experiment_summary(request, id_exp):
import json
import ast
experiment = get_object_or_404(Experiment, pk=id_exp)
experiment_data = json.loads(experiment.parms_to_dict())
configurations = Configuration.objects.filter(experiment=experiment, type=0)
kwargs = {}
kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
kwargs['experiment'] = experiment
kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
kwargs['configurations'] = configurations
kwargs['experiment_data'] = experiment_data
kwargs['title'] = 'Experiment Summary'
kwargs['suptitle'] = 'Details'
kwargs['button'] = 'Verify Parameters'
jars_conf = False
rc_conf = False
for configuration in configurations:
#-------------------- JARS -----------------------:
if configuration.device.device_type.name == 'jars':
jars_conf = True
kwargs['jars_conf'] = jars_conf
kwargs['exp_type'] = EXPERIMENT_TYPE[configuration.exp_type][1]
channels_number = configuration.channels_number
exp_type = configuration.exp_type
fftpoints = configuration.fftpoints
filter_parms = configuration.filter_parms
filter_parms = ast.literal_eval(filter_parms)
spectral_number = configuration.spectral_number
#--------------------- RC ----------------------:
if configuration.device.device_type.name == 'rc':
rc_conf = True
kwargs['rc_conf'] = rc_conf
rc_lines = experiment_data['configurations']['rc']['lines']
ipp = configuration.ipp
if experiment_data['configurations']['rc']['mix'] == 'True':
tx = ''
code = ''
window = ''
else:
code = rc_lines[3]['code']
window_data = rc_lines[6]['params'][0]
h0 = str(window_data['first_height'])
dh = str(window_data['resolution'])
nsa = str(window_data['number_of_samples'])
window = 'Ho='+h0+'km\nDH='+dh+'km\nNSA='+nsa
tx = ''
if float(rc_lines[1]['delays']) == 0:
tx = rc_lines[2]['pulse_width']
elif float(rc_lines[2]['delays']) == 0:
tx = rc_lines[1]['pulse_width']
else:
tx = rc_lines[1]['pulse_width']+' | '+rc_lines[2]['pulse_width']
kwargs['tx'] = tx
kwargs['code'] = code
kwargs['window'] = window
#-------------------- DDS -----------------------:
if configuration.device.device_type.name == 'dds':
dds_conf = True
kwargs['dds_conf'] = dds_conf
#------ RC & JARS ------:
ipp = 937.5 #
nsa = 200#
dh = 1.5 #
channels_number = 5 #
if rc_conf and jars_conf:
if exp_type == 0: #Short
bytes = 2
b = nsa*2*bytes*channels_number
else: #Float
bytes = 4
channels = channels_number + spectral_number
b = nsa*2*bytes*fftpoints*channels
ipps = (ipp*pow(10,-6))/0.15
GB = 1048576.0*1024.0
Hour = 3600
rate = b/ipps
rate = rate *(1/GB)*(Hour)
kwargs['rate'] = str(rate)+" GB/h"
else:
kwargs['rate'] = ''
###### SIDEBAR ######
kwargs.update(sidebar(experiment=experiment))
return render(request, 'experiment_summary.html', kwargs)
def experiment_verify(request, id_exp):
import json
import ast
experiment = get_object_or_404(Experiment, pk=id_exp)
experiment_data = json.loads(experiment.parms_to_dict())
configurations = Configuration.objects.filter(experiment=experiment, type=0)
kwargs = {}
kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
kwargs['experiment'] = experiment
kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
kwargs['configurations'] = configurations
kwargs['experiment_data'] = experiment_data
kwargs['title'] = 'Verify Experiment'
kwargs['suptitle'] = 'Parameters'
kwargs['button'] = 'Update'
jars_conf = False
rc_conf = False
dds_conf = False
for configuration in configurations:
#-------------------- JARS -----------------------:
if configuration.device.device_type.name == 'jars':
jars_conf = True
kwargs['jars_conf'] = jars_conf
filter_parms = configuration.filter_parms
filter_parms = ast.literal_eval(filter_parms)
kwargs['filter_parms'] = filter_parms
#--Sampling Frequency
clock = filter_parms['clock']
filter_2 = filter_parms['filter_2']
filter_5 = filter_parms['filter_5']
filter_fir = filter_parms['filter_fir']
samp_freq_jars = clock/filter_2/filter_5/filter_fir
kwargs['samp_freq_jars'] = samp_freq_jars
kwargs['jars'] = configuration
#--------------------- RC ----------------------:
if configuration.device.device_type.name == 'rc':
rc_conf = True
rc_parms = configuration.parms_to_dict()
if rc_parms['mix'] == 'True':
pass
else:
rc_lines = rc_parms['lines']
dh = rc_lines[6]['params'][0]['resolution']
#--Sampling Frequency
samp_freq_rc = 0.15/dh
kwargs['samp_freq_rc'] = samp_freq_rc
kwargs['rc_conf'] = rc_conf
kwargs['rc'] = configuration
#-------------------- DDS ----------------------:
if configuration.device.device_type.name == 'dds':
dds_conf = True
dds_parms = configuration.parms_to_dict()
kwargs['dds_conf'] = dds_conf
kwargs['dds'] = configuration
#------------Validation------------:
#Clock
if dds_conf and rc_conf and jars_conf:
if filter_parms['clock'] != rc_parms['clock_in'] and rc_parms['clock_in'] != dds_parms['clock']:
messages.warning(request, "Devices don't have the same clock.")
elif rc_conf and jars_conf:
if filter_parms['clock'] != rc_parms['clock_in']:
messages.warning(request, "Devices don't have the same clock.")
elif rc_conf and dds_conf:
if rc_parms['clock_in'] != dds_parms['clock']:
messages.warning(request, "Devices don't have the same clock.")
if float(samp_freq_rc) != float(dds_parms['frequencyA']):
messages.warning(request, "Devices don't have the same Frequency A.")
###### SIDEBAR ######
kwargs.update(sidebar(experiment=experiment))
return render(request, 'experiment_verify.html', kwargs)
def parse_mix_result(s):
values = s.split('-')
html = 'EXP MOD OPE DELAY MASK\r\n'
if not values or values[0] in ('', ' '):
return mark_safe(html)
for i, value in enumerate(values):
if not value:
continue
pk, mode, operation, delay, mask = value.split('|')
conf = RCConfiguration.objects.get(pk=pk)
if i==0:
html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
conf.name,
mode,
' ',
delay,
mask)
else:
html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
conf.name,
mode,
operation,
delay,
mask)
return mark_safe(html)
def parse_mask(l):
values = []
for x in range(8):
if '{}'.format(x) in l:
values.append(1)
else:
values.append(0)
values.reverse()
return int(''.join([str(x) for x in values]), 2)
def dev_confs(request):
page = request.GET.get('page')
order = ('type', 'device__device_type', 'experiment')
filters = request.GET.copy()
kwargs = get_paginator(Configuration, page, order, filters)
form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
kwargs['title'] = 'Configuration'
kwargs['suptitle'] = 'List'
kwargs['form'] = form
filters.pop('page', None)
kwargs['q'] = urlencode(filters)
return render(request, 'base_list.html', kwargs)
def dev_conf(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
return redirect(conf.get_absolute_url())
def dev_conf_new(request, id_exp=0, id_dev=0):
initial = {}
kwargs = {}
if id_exp!=0:
initial['experiment'] = id_exp
if id_dev!=0:
initial['device'] = id_dev
if request.method == 'GET':
if id_dev:
kwargs['button'] = 'Create'
device = Device.objects.get(pk=id_dev)
DevConfForm = CONF_FORMS[device.device_type.name]
initial['name'] = request.GET['name']
form = DevConfForm(initial=initial)
else:
if 'template' in request.GET:
if request.GET['template']=='0':
choices = [(conf.pk, '{}'.format(conf)) for conf in Configuration.objects.filter(template=True)]
form = NewForm(initial={'create_from':2},
template_choices=choices)
else:
kwargs['button'] = 'Create'
conf = Configuration.objects.get(pk=request.GET['template'])
id_dev = conf.device.pk
DevConfForm = CONF_FORMS[conf.device.device_type.name]
form = DevConfForm(instance=conf,
initial={'name': '{} [{:%Y/%m/%d}]'.format(conf.name, datetime.now()),
'template': False,
'experiment':id_exp})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
form = ConfigurationForm(initial=initial)
else:
form = NewForm()
if request.method == 'POST':
device = Device.objects.get(pk=request.POST['device'])
DevConfForm = CONF_FORMS[device.device_type.name]
form = DevConfForm(request.POST)
kwargs['button'] = 'Create'
if form.is_valid():
conf = form.save()
if 'template' in request.GET and conf.device.device_type.name=='rc':
lines = RCLine.objects.filter(rc_configuration=request.GET['template'])
for line in lines:
line.clone(rc_configuration=conf)
if conf.device.device_type.name=='jars':
conf.add_parms_to_filter()
return redirect('url_dev_conf', id_conf=conf.pk)
kwargs['id_exp'] = id_exp
kwargs['form'] = form
kwargs['title'] = 'Configuration'
kwargs['suptitle'] = 'New'
if id_dev != 0:
device = Device.objects.get(pk=id_dev)
kwargs['device'] = device.device_type.name
return render(request, 'dev_conf_edit.html', kwargs)
def dev_conf_edit(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
DevConfForm = CONF_FORMS[conf.device.device_type.name]
if request.method=='GET':
form = DevConfForm(instance=conf)
if request.method=='POST':
form = DevConfForm(request.POST, instance=conf)
if form.is_valid():
form.save()
return redirect('url_dev_conf', id_conf=id_conf)
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'Device Configuration'
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
###### SIDEBAR ######
kwargs.update(sidebar(conf=conf))
return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
def dev_conf_start(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
if conf.start_device():
messages.success(request, conf.message)
else:
messages.error(request, conf.message)
conf.status_device()
return redirect(conf.get_absolute_url())
def dev_conf_stop(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
if conf.stop_device():
messages.success(request, conf.message)
else:
messages.error(request, conf.message)
conf.status_device()
return redirect(conf.get_absolute_url())
def dev_conf_status(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
if conf.status_device():
messages.success(request, conf.message)
else:
messages.error(request, conf.message)
return redirect(conf.get_absolute_url())
def dev_conf_write(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
answer = conf.write_device()
conf.status_device()
if answer:
messages.success(request, conf.message)
#Creating a historical configuration
conf.clone(type=1, template=False)
#Original configuration
conf = DevConfModel.objects.get(pk=id_conf)
else:
messages.error(request, conf.message)
return redirect(conf.get_absolute_url())
def dev_conf_read(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
DevConfForm = CONF_FORMS[conf.device.device_type.name]
if request.method=='GET':
parms = conf.read_device()
conf.status_device()
if not parms:
messages.error(request, conf.message)
return redirect(conf.get_absolute_url())
form = DevConfForm(initial=parms, instance=conf)
if request.method=='POST':
form = DevConfForm(request.POST, instance=conf)
if form.is_valid():
form.save()
return redirect(conf.get_absolute_url())
messages.error(request, "Parameters could not be saved")
kwargs = {}
kwargs['id_dev'] = conf.id
kwargs['form'] = form
kwargs['title'] = 'Device Configuration'
kwargs['suptitle'] = 'Parameters read from device'
kwargs['button'] = 'Save'
###### SIDEBAR ######
kwargs.update(sidebar(conf=conf))
return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
def dev_conf_import(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
DevConfForm = CONF_FORMS[conf.device.device_type.name]
if request.method == 'GET':
file_form = UploadFileForm()
if request.method == 'POST':
file_form = UploadFileForm(request.POST, request.FILES)
if file_form.is_valid():
parms = conf.import_from_file(request.FILES['file'])
if parms:
messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
form = DevConfForm(initial=parms, instance=conf)
kwargs = {}
kwargs['id_dev'] = conf.id
kwargs['form'] = form
kwargs['title'] = 'Device Configuration'
kwargs['suptitle'] = 'Parameters imported'
kwargs['button'] = 'Save'
kwargs['action'] = conf.get_absolute_url_edit()
kwargs['previous'] = conf.get_absolute_url()
###### SIDEBAR ######
kwargs.update(sidebar(conf=conf))
return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
messages.error(request, "Could not import parameters from file")
kwargs = {}
kwargs['id_dev'] = conf.id
kwargs['title'] = 'Device Configuration'
kwargs['form'] = file_form
kwargs['suptitle'] = 'Importing file'
kwargs['button'] = 'Import'
kwargs.update(sidebar(conf=conf))
return render(request, 'dev_conf_import.html', kwargs)
def dev_conf_export(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
if request.method == 'GET':
file_form = DownloadFileForm(conf.device.device_type.name)
if request.method == 'POST':
file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
if file_form.is_valid():
fields = conf.export_to_file(format = file_form.cleaned_data['format'])
response = HttpResponse(content_type=fields['content_type'])
response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
response.write(fields['content'])
return response
messages.error(request, "Could not export parameters")
kwargs = {}
kwargs['id_dev'] = conf.id
kwargs['title'] = 'Device Configuration'
kwargs['form'] = file_form
kwargs['suptitle'] = 'Exporting file'
kwargs['button'] = 'Export'
return render(request, 'dev_conf_export.html', kwargs)
def dev_conf_delete(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
if request.method=='POST':
if request.user.is_staff:
conf.delete()
return redirect('url_dev_confs')
messages.error(request, 'Not enough permission to delete this object')
return redirect(conf.get_absolute_url())
kwargs = {
'title': 'Delete',
'suptitle': 'Experiment',
'object': conf,
'previous': conf.get_absolute_url(),
'delete': True
}
return render(request, 'confirm.html', kwargs)
def sidebar(**kwargs):
side_data = {}
conf = kwargs.get('conf', None)
experiment = kwargs.get('experiment', None)
if not experiment:
experiment = conf.experiment
if experiment:
side_data['experiment'] = experiment
campaign = experiment.campaign_set.all()
if campaign:
side_data['campaign'] = campaign[0]
experiments = campaign[0].experiments.all()
else:
experiments = [experiment]
configurations = experiment.configuration_set.filter(type=0)
side_data['side_experiments'] = experiments
side_data['side_configurations'] = configurations
return side_data
def get_paginator(model, page, order, filters={}, n=10):
kwargs = {}
query = Q()
if isinstance(filters, QueryDict):
filters = filters.dict()
[filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
filters.pop('page', None)
if 'start_date' in filters:
filters['start_date__gte'] = filters.pop('start_date')
if 'end_date' in filters:
filters['start_date__lte'] = filters.pop('end_date')
if 'tags' in filters:
tags = filters.pop('tags')
if 'tags' in model._meta.get_all_field_names():
query = query | Q(tags__icontains=tags)
if 'name' in model._meta.get_all_field_names():
query = query | Q(name__icontains=tags)
if 'location' in model._meta.get_all_field_names():
query = query | Q(location__name__icontains=tags)
if 'device' in model._meta.get_all_field_names():
query = query | Q(device__name__icontains=tags)
object_list = model.objects.filter(query, **filters).order_by(*order)
paginator = Paginator(object_list, n)
try:
objects = paginator.page(page)
except PageNotAnInteger:
objects = paginator.page(1)
except EmptyPage:
objects = paginator.page(paginator.num_pages)
kwargs['objects'] = objects
kwargs['offset'] = (int(page)-1)*n if page else 0
return kwargs
def operation(request, id_camp=None):
kwargs = {}
campaigns = Campaign.objects.filter(start_date__lte=datetime.now(),
end_date__gte=datetime.now()).order_by('-start_date')
if id_camp:
campaign = get_object_or_404(Campaign, pk = id_camp)
form = OperationForm(initial={'campaign': campaign.id}, campaigns=campaigns)
kwargs['campaign'] = campaign
else:
form = OperationForm(campaigns=campaigns)
kwargs['form'] = form
return render(request, 'operation.html', kwargs)
#---Experiment
keys = ['id', 'name', 'start_time', 'end_time', 'status']
kwargs['experiment_keys'] = keys[1:]
kwargs['experiments'] = experiments
#---Radar
kwargs['locations'] = campaign.get_experiments_by_location()
#---Else
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = campaign.name
kwargs['form'] = form
return render(request, 'operation.html', kwargs)
def operation_search(request, id_camp=None):
if not id_camp:
campaigns = Campaign.objects.all().order_by('-start_date')
if not campaigns:
return render(request, 'operation.html', {})
id_camp = campaigns[0].id
campaign = get_object_or_404(Campaign, pk = id_camp)
if request.method=='GET':
form = OperationSearchForm(initial={'campaign': campaign.id})
if request.method=='POST':
form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
if form.is_valid():
return redirect('url_operation', id_camp=campaign.id)
#locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
experiments = Experiment.objects.filter(campaign__pk=campaign.id)
#for exs in experiments:
# exs.get_status()
locations= Location.objects.filter(experiment=experiments).distinct()
form = OperationSearchForm(initial={'campaign': campaign.id})
kwargs = {}
#---Campaign
kwargs['campaign'] = campaign
kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
#---Experiment
keys = ['id', 'name', 'start_time', 'end_time', 'status']
kwargs['experiment_keys'] = keys[1:]
kwargs['experiments'] = experiments
#---Radar
kwargs['locations'] = locations
#---Else
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = campaign.name
kwargs['form'] = form
kwargs['button'] = 'Select'
kwargs['details'] = True
kwargs['search_button'] = False
return render(request, 'operation.html', kwargs)
def radar_play(request, id_camp, id_radar):
campaign = get_object_or_404(Campaign, pk = id_camp)
radar = get_object_or_404(Location, pk = id_radar)
today = datetime.today()
now = today.time()
#--Clear Old Experiments From RunningExperiment Object
running_experiment = RunningExperiment.objects.filter(radar=radar)
if running_experiment:
running_experiment = running_experiment[0]
running_experiment.running_experiment.clear()
running_experiment.save()
#--If campaign datetime is ok:
if today >= campaign.start_date and today <= campaign.end_date:
experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
for exp in experiments:
#--If experiment time is ok:
if now >= exp.start_time and now <= exp.end_time:
configurations = Configuration.objects.filter(experiment = exp)
for conf in configurations:
if 'cgs' in conf.device.device_type.name:
conf.status_device()
else:
answer = conf.start_device()
conf.status_device()
#--Running Experiment
old_running_experiment = RunningExperiment.objects.filter(radar=radar)
#--If RunningExperiment element exists
if old_running_experiment:
old_running_experiment = old_running_experiment[0]
old_running_experiment.running_experiment.add(exp)
old_running_experiment.status = 3
old_running_experiment.save()
#--Create a new Running_Experiment Object
else:
new_running_experiment = RunningExperiment(
radar = radar,
status = 3,
)
new_running_experiment.save()
new_running_experiment.running_experiment.add(exp)
new_running_experiment.save()
if answer:
messages.success(request, conf.message)
exp.status=2
exp.save()
else:
messages.error(request, conf.message)
else:
if exp.status == 1 or exp.status == 3:
exp.status=3
exp.save()
route = request.META['HTTP_REFERER']
route = str(route)
if 'search' in route:
return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
else:
return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
def radar_stop(request, id_camp, id_radar):
campaign = get_object_or_404(Campaign, pk = id_camp)
radar = get_object_or_404(Location, pk = id_radar)
experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
for exp in experiments:
configurations = Configuration.objects.filter(experiment = exp)
for conf in configurations:
if 'cgs' in conf.device.device_type.name:
conf.status_device()
else:
answer = conf.stop_device()
conf.status_device()
if answer:
messages.success(request, conf.message)
exp.status=1
exp.save()
else:
messages.error(request, conf.message)
route = request.META['HTTP_REFERER']
route = str(route)
if 'search' in route:
return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
else:
return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
def radar_refresh(request, id_camp, id_radar):
campaign = get_object_or_404(Campaign, pk = id_camp)
radar = get_object_or_404(Location, pk = id_radar)
experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
for exs in experiments:
exs.get_status()
route = request.META['HTTP_REFERER']
route = str(route)
if 'search' in route:
return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
else:
return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))