views.py
1099 lines
| 34.1 KiB
| text/x-python
|
PythonLexer
|
r20 | from django.shortcuts import render, redirect, get_object_or_404, HttpResponse | ||
|
r84 | from django.http import HttpResponseRedirect | ||
from django.core.urlresolvers import reverse | ||||
|
r30 | from django.contrib import messages | ||
|
r88 | from datetime import datetime | ||
|
r6 | |||
|
r85 | from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm | ||
|
r69 | from .forms import OperationSearchForm | ||
|
r13 | from apps.cgs.forms import CGSConfigurationForm | ||
from apps.jars.forms import JARSConfigurationForm | ||||
from apps.usrp.forms import USRPConfigurationForm | ||||
from apps.abs.forms import ABSConfigurationForm | ||||
from apps.rc.forms import RCConfigurationForm | ||||
from apps.dds.forms import DDSConfigurationForm | ||||
|
r84 | from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment | ||
|
r6 | from apps.cgs.models import CGSConfiguration | ||
from apps.jars.models import JARSConfiguration | ||||
|
r13 | from apps.usrp.models import USRPConfiguration | ||
|
r6 | from apps.abs.models import ABSConfiguration | ||
from apps.rc.models import RCConfiguration | ||||
from apps.dds.models import DDSConfiguration | ||||
|
r0 | |||
# Create your views here. | ||||
|
r13 | CONF_FORMS = { | ||
'rc': RCConfigurationForm, | ||||
'dds': DDSConfigurationForm, | ||||
'jars': JARSConfigurationForm, | ||||
'cgs': CGSConfigurationForm, | ||||
'abs': ABSConfigurationForm, | ||||
'usrp': USRPConfigurationForm, | ||||
} | ||||
CONF_MODELS = { | ||||
|
r6 | 'rc': RCConfiguration, | ||
'dds': DDSConfiguration, | ||||
'jars': JARSConfiguration, | ||||
'cgs': CGSConfiguration, | ||||
'abs': ABSConfiguration, | ||||
|
r13 | 'usrp': USRPConfiguration, | ||
|
r6 | } | ||
|
r89 | |||
|
r6 | def index(request): | ||
|
r0 | kwargs = {} | ||
|
r6 | |||
|
r13 | return render(request, 'index.html', kwargs) | ||
|
r89 | |||
|
r41 | def locations(request): | ||
locations = Location.objects.all().order_by('name') | ||||
keys = ['id', 'name', 'description'] | ||||
kwargs = {} | ||||
kwargs['location_keys'] = keys[1:] | ||||
kwargs['locations'] = locations | ||||
kwargs['title'] = 'Location' | ||||
kwargs['suptitle'] = 'List' | ||||
kwargs['button'] = 'New Location' | ||||
return render(request, 'locations.html', kwargs) | ||||
|
r89 | |||
|
r41 | 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) | ||||
|
r69 | |||
|
r41 | 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'] = 'Location' | ||||
kwargs['suptitle'] = 'New' | ||||
kwargs['button'] = 'Create' | ||||
return render(request, 'location_edit.html', kwargs) | ||||
|
r89 | |||
|
r41 | 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, 'location_edit.html', kwargs) | ||||
|
r89 | |||
|
r41 | 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') | ||||
|
r89 | messages.error(request, 'Not enough permission to delete this object') | ||
return redirect(location.get_absolute_url()) | ||||
|
r41 | |||
|
r89 | kwargs = { | ||
'title': 'Delete', | ||||
'suptitle': 'Location', | ||||
'object': location, | ||||
'previous': location.get_absolute_url(), | ||||
'delete': True | ||||
} | ||||
|
r41 | |||
|
r89 | return render(request, 'confirm.html', kwargs) | ||
|
r41 | |||
|
r13 | def devices(request): | ||
devices = Device.objects.all().order_by('device_type__name') | ||||
|
r22 | # keys = ['id', 'device_type__name', 'name', 'ip_address'] | ||
|
r41 | keys = ['id', 'name', 'ip_address', 'port_address', 'device_type'] | ||
|
r13 | |||
kwargs = {} | ||||
kwargs['device_keys'] = keys[1:] | ||||
|
r22 | kwargs['devices'] = devices#.values(*keys) | ||
|
r13 | kwargs['title'] = 'Device' | ||
kwargs['suptitle'] = 'List' | ||||
kwargs['button'] = 'New Device' | ||||
return render(request, 'devices.html', kwargs) | ||||
|
r2 | |||
|
r89 | |||
|
r13 | def device(request, id_dev): | ||
|
r20 | device = get_object_or_404(Device, pk=id_dev) | ||
|
r13 | |||
|
r2 | kwargs = {} | ||
|
r13 | 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) | ||||
|
r89 | |||
|
r19 | def device_new(request): | ||
|
r13 | |||
if request.method == 'GET': | ||||
form = DeviceForm() | ||||
if request.method == 'POST': | ||||
form = DeviceForm(request.POST) | ||||
|
r6 | |||
|
r13 | if form.is_valid(): | ||
form.save() | ||||
return redirect('url_devices') | ||||
|
r6 | |||
|
r13 | kwargs = {} | ||
kwargs['form'] = form | ||||
kwargs['title'] = 'Device' | ||||
kwargs['suptitle'] = 'New' | ||||
kwargs['button'] = 'Create' | ||||
|
r6 | |||
|
r13 | return render(request, 'device_edit.html', kwargs) | ||
|
r6 | |||
|
r89 | |||
|
r19 | def device_edit(request, id_dev): | ||
|
r13 | |||
|
r20 | device = get_object_or_404(Device, pk=id_dev) | ||
|
r13 | |||
if request.method=='GET': | ||||
form = DeviceForm(instance=device) | ||||
|
r6 | if request.method=='POST': | ||
|
r13 | form = DeviceForm(request.POST, instance=device) | ||
|
r2 | if form.is_valid(): | ||
form.save() | ||||
|
r89 | return redirect(device.get_absolute_url()) | ||
|
r13 | |||
kwargs = {} | ||||
kwargs['form'] = form | ||||
kwargs['title'] = 'Device' | ||||
kwargs['suptitle'] = 'Edit' | ||||
kwargs['button'] = 'Update' | ||||
return render(request, 'device_edit.html', kwargs) | ||||
|
r6 | |||
|
r89 | |||
|
r19 | def device_delete(request, id_dev): | ||
|
r18 | |||
|
r20 | device = get_object_or_404(Device, pk=id_dev) | ||
|
r18 | |||
if request.method=='POST': | ||||
if request.user.is_staff: | ||||
device.delete() | ||||
return redirect('url_devices') | ||||
|
r89 | messages.error(request, 'Not enough permission to delete this object') | ||
return redirect(device.get_absolute_url()) | ||||
|
r18 | |||
|
r89 | kwargs = { | ||
'title': 'Delete', | ||||
'suptitle': 'Device', | ||||
'object': device, | ||||
'previous': device.get_absolute_url(), | ||||
'delete': True | ||||
} | ||||
|
r18 | |||
|
r89 | return render(request, 'confirm.html', kwargs) | ||
|
r18 | |||
|
r13 | def campaigns(request): | ||
campaigns = Campaign.objects.all().order_by('start_date') | ||||
keys = ['id', 'name', 'start_date', 'end_date'] | ||||
kwargs = {} | ||||
kwargs['campaign_keys'] = keys[1:] | ||||
|
r22 | kwargs['campaigns'] = campaigns#.values(*keys) | ||
|
r13 | kwargs['title'] = 'Campaign' | ||
kwargs['suptitle'] = 'List' | ||||
kwargs['button'] = 'New Campaign' | ||||
return render(request, 'campaigns.html', kwargs) | ||||
|
r89 | |||
|
r13 | def campaign(request, id_camp): | ||
|
r20 | campaign = get_object_or_404(Campaign, pk=id_camp) | ||
|
r53 | experiments = Experiment.objects.filter(campaign=campaign) | ||
|
r13 | form = CampaignForm(instance=campaign) | ||
kwargs = {} | ||||
kwargs['campaign'] = campaign | ||||
|
r89 | kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description'] | ||
|
r13 | |||
|
r89 | kwargs['experiments'] = experiments | ||
kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time'] | ||||
|
r13 | |||
kwargs['title'] = 'Campaign' | ||||
kwargs['suptitle'] = 'Details' | ||||
kwargs['form'] = form | ||||
kwargs['button'] = 'Add Experiment' | ||||
return render(request, 'campaign.html', kwargs) | ||||
|
r89 | |||
|
r19 | def campaign_new(request): | ||
|
r13 | |||
|
r85 | kwargs = {} | ||
|
r13 | if request.method == 'GET': | ||
|
r85 | |||
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'] | ||||
|
r91 | camp = Campaign.objects.get(pk=request.GET['template']) | ||
form = CampaignForm(instance=camp, | ||||
initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()), | ||||
'template':False}) | ||||
|
r85 | elif 'blank' in request.GET: | ||
kwargs['button'] = 'Create' | ||||
form = CampaignForm() | ||||
else: | ||||
form = NewForm() | ||||
|
r13 | |||
if request.method == 'POST': | ||||
|
r85 | 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) | ||||
|
r13 | |||
if form.is_valid(): | ||||
campaign = form.save() | ||||
|
r85 | for exp in experiments: | ||
campaign.experiments.add(exp) | ||||
campaign.save() | ||||
|
r13 | return redirect('url_campaign', id_camp=campaign.id) | ||
kwargs['form'] = form | ||||
kwargs['title'] = 'Campaign' | ||||
kwargs['suptitle'] = 'New' | ||||
return render(request, 'campaign_edit.html', kwargs) | ||||
|
r89 | |||
|
r19 | def campaign_edit(request, id_camp): | ||
|
r13 | |||
|
r20 | campaign = get_object_or_404(Campaign, pk=id_camp) | ||
|
r13 | |||
if request.method=='GET': | ||||
form = CampaignForm(instance=campaign) | ||||
|
r6 | if request.method=='POST': | ||
|
r91 | 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) | ||||
|
r13 | |||
if form.is_valid(): | ||||
|
r91 | 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)) | ||||
|
r13 | 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) | ||||
|
r6 | |||
|
r89 | |||
|
r19 | def campaign_delete(request, id_camp): | ||
|
r18 | |||
|
r20 | campaign = get_object_or_404(Campaign, pk=id_camp) | ||
|
r18 | |||
if request.method=='POST': | ||||
if request.user.is_staff: | ||||
|
r85 | |||
for exp in campaign.experiments.all(): | ||||
for conf in Configuration.objects.filter(experiment=exp): | ||||
conf.delete() | ||||
exp.delete() | ||||
|
r18 | campaign.delete() | ||
|
r85 | |||
|
r18 | return redirect('url_campaigns') | ||
|
r89 | messages.error(request, 'Not enough permission to delete this object') | ||
return redirect(campaign.get_absolute_url()) | ||||
|
r18 | |||
|
r89 | kwargs = { | ||
'title': 'Delete', | ||||
'suptitle': 'Campaign', | ||||
'object': campaign, | ||||
'previous': campaign.get_absolute_url(), | ||||
'delete': True | ||||
} | ||||
|
r18 | |||
|
r89 | return render(request, 'confirm.html', kwargs) | ||
|
r18 | |||
|
r13 | def experiments(request): | ||
|
r85 | experiment_list = Experiment.objects.all() | ||
|
r13 | |||
|
r85 | keys = ['id', 'name', 'start_time', 'end_time'] | ||
|
r13 | |||
|
r6 | kwargs = {} | ||
|
r13 | |||
kwargs['experiment_keys'] = keys[1:] | ||||
|
r85 | kwargs['experiments'] = experiment_list | ||
|
r13 | |||
kwargs['title'] = 'Experiment' | ||||
kwargs['suptitle'] = 'List' | ||||
kwargs['button'] = 'New Experiment' | ||||
return render(request, 'experiments.html', kwargs) | ||||
|
r89 | |||
|
r13 | def experiment(request, id_exp): | ||
|
r20 | experiment = get_object_or_404(Experiment, pk=id_exp) | ||
|
r13 | |||
|
r41 | configurations = Configuration.objects.filter(experiment=experiment, type=0) | ||
|
r13 | |||
kwargs = {} | ||||
|
r91 | kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time'] | ||
|
r13 | kwargs['experiment'] = experiment | ||
|
r91 | kwargs['configuration_keys'] = ['device__name', 'device__device_type', 'device__ip_address', 'device__port_address'] | ||
kwargs['configurations'] = configurations | ||||
|
r13 | |||
kwargs['title'] = 'Experiment' | ||||
kwargs['suptitle'] = 'Details' | ||||
|
r45 | kwargs['button'] = 'Add Configuration' | ||
|
r13 | |||
|
r85 | ###### SIDEBAR ###### | ||
kwargs.update(sidebar(experiment=experiment)) | ||||
|
r13 | return render(request, 'experiment.html', kwargs) | ||
|
r85 | |||
|
r79 | def experiment_new(request, id_camp=None): | ||
|
r13 | |||
|
r85 | kwargs = {} | ||
|
r13 | if request.method == 'GET': | ||
|
r85 | 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'] | ||||
|
r91 | exp=Experiment.objects.get(pk=request.GET['template']) | ||
form = ExperimentForm(instance=exp, | ||||
initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()), | ||||
'template': False}) | ||||
|
r85 | elif 'blank' in request.GET: | ||
kwargs['button'] = 'Create' | ||||
form = ExperimentForm() | ||||
else: | ||||
form = NewForm() | ||||
|
r13 | |||
|
r6 | if request.method == 'POST': | ||
|
r85 | form = ExperimentForm(request.POST) | ||
|
r6 | if form.is_valid(): | ||
experiment = form.save() | ||||
|
r85 | |||
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) | ||||
|
r13 | return redirect('url_experiment', id_exp=experiment.id) | ||
|
r85 | |||
|
r13 | kwargs['form'] = form | ||
|
r6 | kwargs['title'] = 'Experiment' | ||
kwargs['suptitle'] = 'New' | ||||
|
r13 | |||
return render(request, 'experiment_edit.html', kwargs) | ||||
|
r6 | |||
|
r89 | |||
|
r19 | def experiment_edit(request, id_exp): | ||
|
r13 | |||
|
r20 | experiment = get_object_or_404(Experiment, pk=id_exp) | ||
|
r13 | |||
if request.method == 'GET': | ||||
form = ExperimentForm(instance=experiment) | ||||
|
r6 | if request.method=='POST': | ||
|
r13 | form = ExperimentForm(request.POST, instance=experiment) | ||
|
r6 | if form.is_valid(): | ||
|
r13 | 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) | ||||
|
r2 | |||
|
r89 | |||
|
r19 | def experiment_delete(request, id_exp): | ||
|
r18 | |||
|
r20 | experiment = get_object_or_404(Experiment, pk=id_exp) | ||
|
r18 | |||
if request.method=='POST': | ||||
if request.user.is_staff: | ||||
|
r91 | for conf in Configuration.objects.filter(experiment=experiment): | ||
conf.delete() | ||||
|
r18 | experiment.delete() | ||
|
r85 | return redirect('url_experiments') | ||
|
r18 | |||
|
r91 | messages.error(request, 'Not enough permission to delete this object') | ||
return redirect(experiment.get_absolute_url()) | ||||
|
r18 | |||
|
r91 | kwargs = { | ||
'title': 'Delete', | ||||
'suptitle': 'Experiment', | ||||
'object': experiment, | ||||
'previous': experiment.get_absolute_url(), | ||||
'delete': True | ||||
} | ||||
|
r18 | |||
|
r91 | return render(request, 'confirm.html', kwargs) | ||
|
r18 | |||
|
r89 | |||
|
r13 | def dev_confs(request): | ||
|
r41 | configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment') | ||
|
r22 | |||
|
r13 | kwargs = {} | ||
|
r91 | kwargs['configuration_keys'] = ['device', 'experiment', 'type', 'programmed_date'] | ||
kwargs['configurations'] = configurations | ||||
|
r13 | |||
|
r14 | kwargs['title'] = 'Configuration' | ||
|
r13 | kwargs['suptitle'] = 'List' | ||
return render(request, 'dev_confs.html', kwargs) | ||||
|
r89 | |||
|
r13 | def dev_conf(request, id_conf): | ||
|
r20 | conf = get_object_or_404(Configuration, pk=id_conf) | ||
|
r13 | |||
|
r79 | return redirect(conf.get_absolute_url()) | ||
|
r13 | |||
|
r79 | |||
def dev_conf_new(request, id_exp=0, id_dev=0): | ||||
|
r13 | |||
|
r79 | initial = {} | ||
|
r13 | |||
|
r85 | if id_exp<>0: | ||
|
r79 | initial['experiment'] = id_exp | ||
|
r17 | |||
|
r79 | if id_dev<>0: | ||
initial['device'] = id_dev | ||||
|
r13 | |||
if request.method == 'GET': | ||||
|
r79 | if id_dev==0: | ||
form = ConfigurationForm(initial=initial) | ||||
else: | ||||
device = Device.objects.get(pk=id_dev) | ||||
DevConfForm = CONF_FORMS[device.device_type.name] | ||||
form = DevConfForm(initial=initial) | ||||
|
r13 | |||
|
r6 | if request.method == 'POST': | ||
|
r47 | |||
|
r79 | device = Device.objects.get(pk=request.POST['device']) | ||
|
r47 | DevConfForm = CONF_FORMS[device.device_type.name] | ||
|
r79 | |||
form = DevConfForm(request.POST) | ||||
|
r13 | |||
|
r6 | if form.is_valid(): | ||
|
r47 | dev_conf = form.save() | ||
|
r79 | return redirect('url_dev_confs') | ||
|
r13 | |||
kwargs = {} | ||||
|
r79 | kwargs['id_exp'] = id_exp | ||
|
r6 | kwargs['form'] = form | ||
|
r13 | kwargs['title'] = 'Configuration' | ||
|
r6 | kwargs['suptitle'] = 'New' | ||
|
r13 | kwargs['button'] = 'Create' | ||
|
r99 | if id_dev != 0: | ||
device = Device.objects.get(pk=id_dev) | ||||
if 'dds' in device.device_type.name: | ||||
kwargs['dds_device'] = True | ||||
|
r13 | return render(request, 'dev_conf_edit.html', kwargs) | ||
|
r89 | |||
|
r19 | def dev_conf_edit(request, id_conf): | ||
|
r13 | |||
|
r20 | conf = get_object_or_404(Configuration, pk=id_conf) | ||
|
r13 | |||
DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||||
DevConfForm = CONF_FORMS[conf.device.device_type.name] | ||||
dev_conf = DevConfModel.objects.get(pk=id_conf) | ||||
if request.method=='GET': | ||||
form = DevConfForm(instance=dev_conf) | ||||
if request.method=='POST': | ||||
form = DevConfForm(request.POST, instance=dev_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' | ||||
|
r30 | ###### SIDEBAR ###### | ||
|
r85 | kwargs.update(sidebar(conf=conf)) | ||
|
r30 | |||
|
r91 | return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs) | ||
|
r13 | |||
|
r89 | |||
|
r53 | def dev_conf_start(request, id_conf): | ||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
if conf.start_device(): | ||||
messages.success(request, conf.message) | ||||
else: | ||||
messages.error(request, conf.message) | ||||
|
r57 | |||
conf.status_device() | ||||
|
r53 | return redirect(conf.get_absolute_url()) | ||
|
r89 | |||
|
r53 | def dev_conf_stop(request, id_conf): | ||
|
r30 | |||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
|
r53 | DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
if conf.stop_device(): | ||||
messages.success(request, conf.message) | ||||
else: | ||||
messages.error(request, conf.message) | ||||
|
r57 | conf.status_device() | ||
|
r53 | return redirect(conf.get_absolute_url()) | ||
|
r89 | |||
|
r53 | def dev_conf_status(request, id_conf): | ||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
if conf.status_device(): | ||||
messages.success(request, conf.message) | ||||
else: | ||||
messages.error(request, conf.message) | ||||
|
r30 | |||
|
r53 | return redirect(conf.get_absolute_url()) | ||
|
r30 | |||
def dev_conf_write(request, id_conf): | ||||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
|
r53 | DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
answer = conf.write_device() | ||||
|
r57 | conf.status_device() | ||
|
r53 | |||
if answer: | ||||
messages.success(request, conf.message) | ||||
|
r85 | #Creating a historical configuration | ||
conf.clone(type=0, template=False) | ||||
|
r53 | |||
|
r57 | #Original configuration | ||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
|
r53 | else: | ||
messages.error(request, conf.message) | ||||
|
r30 | |||
|
r53 | return redirect(conf.get_absolute_url()) | ||
|
r89 | |||
|
r53 | def dev_conf_read(request, id_conf): | ||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||||
DevConfForm = CONF_FORMS[conf.device.device_type.name] | ||||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
if request.method=='GET': | ||||
parms = conf.read_device() | ||||
|
r57 | conf.status_device() | ||
|
r53 | |||
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(): | ||||
|
r57 | form.save() | ||
return redirect(conf.get_absolute_url()) | ||||
|
r53 | |||
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 ###### | ||||
|
r85 | kwargs.update(sidebar(conf=conf)) | ||
|
r53 | |||
|
r57 | return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs) | ||
|
r30 | |||
|
r89 | |||
|
r30 | def dev_conf_import(request, id_conf): | ||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
|
r53 | DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||
|
r85 | DevConfForm = CONF_FORMS[conf.device.device_type.name] | ||
|
r53 | conf = DevConfModel.objects.get(pk=id_conf) | ||
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 ###### | ||||
|
r85 | kwargs.update(sidebar(conf=conf)) | ||
|
r53 | |||
|
r79 | return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs) | ||
|
r53 | |||
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' | ||||
|
r85 | kwargs.update(sidebar(conf=conf)) | ||
|
r53 | |||
return render(request, 'dev_conf_import.html', kwargs) | ||||
|
r30 | |||
|
r89 | |||
|
r30 | def dev_conf_export(request, id_conf): | ||
conf = get_object_or_404(Configuration, pk=id_conf) | ||||
|
r53 | DevConfModel = CONF_MODELS[conf.device.device_type.name] | ||
conf = DevConfModel.objects.get(pk=id_conf) | ||||
if request.method == 'GET': | ||||
|
r57 | file_form = DownloadFileForm(conf.device.device_type.name) | ||
|
r53 | |||
if request.method == 'POST': | ||||
|
r57 | file_form = DownloadFileForm(conf.device.device_type.name, request.POST) | ||
|
r53 | |||
if file_form.is_valid(): | ||||
|
r57 | fields = conf.export_to_file(format = file_form.cleaned_data['format']) | ||
|
r53 | |||
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' | ||||
|
r30 | |||
|
r53 | return render(request, 'dev_conf_export.html', kwargs) | ||
|
r30 | |||
|
r89 | |||
|
r19 | def dev_conf_delete(request, id_conf): | ||
|
r18 | |||
|
r20 | conf = get_object_or_404(Configuration, pk=id_conf) | ||
|
r18 | |||
if request.method=='POST': | ||||
if request.user.is_staff: | ||||
conf.delete() | ||||
|
r91 | return redirect('url_dev_confs') | ||
|
r18 | |||
|
r91 | messages.error(request, 'Not enough permission to delete this object') | ||
return redirect(conf.get_absolute_url()) | ||||
|
r18 | |||
|
r91 | kwargs = { | ||
'title': 'Delete', | ||||
'suptitle': 'Experiment', | ||||
'object': conf, | ||||
'previous': conf.get_absolute_url(), | ||||
'delete': True | ||||
} | ||||
|
r18 | |||
|
r91 | return render(request, 'confirm.html', kwargs) | ||
|
r25 | |||
|
r85 | |||
def sidebar(**kwargs): | ||||
|
r25 | |||
|
r85 | side_data = {} | ||
conf = kwargs.get('conf', None) | ||||
experiment = kwargs.get('experiment', None) | ||||
|
r26 | |||
|
r85 | 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 | ||||
|
r25 | |||
|
r85 | return side_data | ||
|
r46 | |||
|
r50 | def operation(request, id_camp=None): | ||
|
r53 | if not id_camp: | ||
campaigns = Campaign.objects.all().order_by('-start_date') | ||||
if not campaigns: | ||||
|
r76 | kwargs = {} | ||
|
r75 | kwargs['title'] = 'No Campaigns' | ||
kwargs['suptitle'] = 'Empty' | ||||
|
r77 | return render(request, 'operation.html', kwargs) | ||
|
r50 | |||
|
r53 | id_camp = campaigns[0].id | ||
campaign = get_object_or_404(Campaign, pk = id_camp) | ||||
|
r50 | if request.method=='GET': | ||
|
r69 | form = OperationForm(initial={'campaign': campaign.id}, length = 5) | ||
|
r50 | |||
|
r53 | if request.method=='POST': | ||
|
r69 | form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5) | ||
|
r53 | |||
|
r50 | if form.is_valid(): | ||
return redirect('url_operation', id_camp=campaign.id) | ||||
|
r81 | #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct() | ||
|
r69 | experiments = Experiment.objects.filter(campaign__pk=campaign.id) | ||
|
r88 | #for exs in experiments: | ||
# exs.get_status() | ||||
|
r81 | locations= Location.objects.filter(experiment=experiments).distinct() | ||
|
r69 | #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations] | ||
|
r50 | kwargs = {} | ||
#---Campaign | ||||
kwargs['campaign'] = campaign | ||||
kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description'] | ||||
|
r69 | #---Experiment | ||
|
r81 | keys = ['id', 'name', 'start_time', 'end_time', 'status'] | ||
|
r50 | kwargs['experiment_keys'] = keys[1:] | ||
kwargs['experiments'] = experiments | ||||
#---Radar | ||||
|
r53 | kwargs['locations'] = locations | ||
|
r50 | #---Else | ||
|
r53 | kwargs['title'] = 'Campaign' | ||
|
r50 | kwargs['suptitle'] = campaign.name | ||
kwargs['form'] = form | ||||
|
r69 | kwargs['button'] = 'Search' | ||
|
r71 | kwargs['details'] = True | ||
|
r69 | kwargs['search_button'] = True | ||
return render(request, 'operation.html', kwargs) | ||||
|
r89 | |||
|
r84 | def operation_search(request, id_camp=None): | ||
|
r69 | |||
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 | ||||
|
r84 | campaign = get_object_or_404(Campaign, pk = id_camp) | ||
|
r69 | |||
|
r84 | if request.method=='GET': | ||
|
r69 | form = OperationSearchForm(initial={'campaign': campaign.id}) | ||
if request.method=='POST': | ||||
form = OperationSearchForm(request.POST, initial={'campaign':campaign.id}) | ||||
if form.is_valid(): | ||||
|
r84 | return redirect('url_operation', id_camp=campaign.id) | ||
|
r69 | |||
|
r84 | #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct() | ||
experiments = Experiment.objects.filter(campaign__pk=campaign.id) | ||||
|
r88 | #for exs in experiments: | ||
# exs.get_status() | ||||
|
r84 | 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): | ||||
|
r88 | campaign = get_object_or_404(Campaign, pk = id_camp) | ||
radar = get_object_or_404(Location, pk = id_radar) | ||||
|
r90 | today = datetime.today() | ||
now = today.time() | ||||
|
r93 | #--Clear Old Experiments From RunningExperiment Object | ||
|
r95 | running_experiment = RunningExperiment.objects.filter(radar=radar) | ||
|
r93 | if running_experiment: | ||
|
r95 | running_experiment = running_experiment[0] | ||
|
r93 | running_experiment.running_experiment.clear() | ||
running_experiment.save() | ||||
|
r90 | #--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 | ||||
|
r95 | old_running_experiment = RunningExperiment.objects.filter(radar=radar) | ||
|
r90 | #--If RunningExperiment element exists | ||
|
r93 | if old_running_experiment: | ||
|
r95 | old_running_experiment = old_running_experiment[0] | ||
|
r93 | old_running_experiment.running_experiment.add(exp) | ||
old_running_experiment.status = 3 | ||||
old_running_experiment.save() | ||||
#--Create a new Running_Experiment Object | ||||
|
r90 | else: | ||
|
r93 | new_running_experiment = RunningExperiment( | ||
|
r90 | radar = radar, | ||
status = 3, | ||||
) | ||||
|
r93 | new_running_experiment.save() | ||
new_running_experiment.running_experiment.add(exp) | ||||
new_running_experiment.save() | ||||
|
r90 | |||
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() | ||||
|
r50 | |||
|
r84 | 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])) | ||||
|
r88 | |||
|
r84 | def radar_stop(request, id_camp, id_radar): | ||
|
r93 | campaign = get_object_or_404(Campaign, pk = id_camp) | ||
radar = get_object_or_404(Location, pk = id_radar) | ||||
|
r94 | 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) | ||||
|
r85 | |||
|
r84 | route = request.META['HTTP_REFERER'] | ||
route = str(route) | ||||
if 'search' in route: | ||||
return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp])) | ||||
else: | ||||
|
r85 | return HttpResponseRedirect(reverse('url_operation', args=[id_camp])) | ||
|
r88 | |||
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])) | ||||