views.py
310 lines
| 9.7 KiB
| text/x-python
|
PythonLexer
|
r27 | from django.shortcuts import redirect, render, get_object_or_404 | ||
|
r31 | from django.contrib import messages | ||
|
r4 | |||
|
r27 | from apps.main.models import Experiment, Configuration | ||
|
r6 | from .models import CGSConfiguration | ||
|
r31 | |||
|
r42 | from .forms import CGSConfigurationForm, UploadFileForm | ||
|
r31 | from apps.main.views import sidebar | ||
import requests | ||||
|
r38 | import json | ||
|
r39 | #from __builtin__ import None | ||
|
r0 | # Create your views here. | ||
|
r4 | |||
|
r27 | def cgs_conf(request, id_conf): | ||
conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||||
|
r31 | ip=conf.device.ip_address | ||
port=conf.device.port_address | ||||
|
r27 | kwargs = {} | ||
|
r36 | |||
if request.method=='GET': | ||||
#r: response = icon, status | ||||
|
r38 | try: | ||
route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548" | ||||
r = requests.get(route) | ||||
response = str(r.text) | ||||
response = response.split(";") | ||||
icon = response[0] | ||||
status = response[-1] | ||||
#print r.text | ||||
#"icon" could be: "alert" or "okay" | ||||
# Si hay alerta pero esta conectado | ||||
if "alert" in icon: | ||||
if "Starting Up" in status: #No Esta conectado | ||||
kwargs['connected'] = False | ||||
else: | ||||
kwargs['connected'] = True | ||||
elif "okay" in icon: | ||||
|
r37 | kwargs['connected'] = True | ||
|
r38 | else: | ||
kwargs['connected'] = False | ||||
except: | ||||
|
r37 | kwargs['connected'] = False | ||
|
r38 | status = "The Device is not connected." | ||
|
r36 | |||
if not kwargs['connected']: | ||||
messages.error(request, message=status) | ||||
|
r27 | kwargs['dev_conf'] = conf | ||
kwargs['dev_conf_keys'] = ['experiment', 'device', | ||||
'freq0', 'freq1', | ||||
'freq2', 'freq3'] | ||||
kwargs['title'] = 'CGS Configuration' | ||||
kwargs['suptitle'] = 'Details' | ||||
kwargs['button'] = 'Edit Configuration' | ||||
###### SIDEBAR ###### | ||||
|
r31 | kwargs.update(sidebar(conf)) | ||
|
r27 | |||
return render(request, 'cgs_conf.html', kwargs) | ||||
|
r4 | |||
|
r27 | def cgs_conf_edit(request, id_conf): | ||
conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||||
if request.method=='GET': | ||||
form = CGSConfigurationForm(instance=conf) | ||||
if request.method=='POST': | ||||
form = CGSConfigurationForm(request.POST, instance=conf) | ||||
|
r8 | if form.is_valid(): | ||
|
r31 | conf = form.save(commit=False) | ||
if conf.verify_frequencies(): | ||||
|
r38 | if conf.freq0 == None: conf.freq0 = 0 | ||
if conf.freq1 == None: conf.freq0 = 0 | ||||
if conf.freq2 == None: conf.freq0 = 0 | ||||
if conf.freq3 == None: conf.freq0 = 0 | ||||
data = {'f0': str(conf.freq0), 'f1': str(conf.freq1), | ||||
'f2': str(conf.freq2), 'f3': str(conf.freq3)} | ||||
json_data = json.dumps(data) | ||||
conf.parameters = json_data | ||||
|
r31 | conf.save() | ||
return redirect('url_cgs_conf', id_conf=conf.id) | ||||
##ERRORS | ||||
|
r27 | |||
kwargs = {} | ||||
|
r31 | kwargs['id_dev'] = conf.id | ||
|
r27 | kwargs['form'] = form | ||
kwargs['title'] = 'Device Configuration' | ||||
kwargs['suptitle'] = 'Edit' | ||||
|
r31 | kwargs['button'] = 'Save' | ||
|
r38 | |||
|
r31 | ###### SIDEBAR ###### | ||
kwargs.update(sidebar(conf)) | ||||
return render(request, 'cgs_conf_edit.html', kwargs) | ||||
def cgs_conf_write(request, id_conf): | ||||
conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||||
ip=conf.device.ip_address | ||||
port=conf.device.port_address | ||||
#Frequencies from form | ||||
|
r38 | if conf.freq0 == None: conf.freq0 = 0 | ||
if conf.freq1 == None: conf.freq0 = 0 | ||||
if conf.freq2 == None: conf.freq0 = 0 | ||||
if conf.freq3 == None: conf.freq0 = 0 | ||||
|
r35 | f0 = int(conf.freq0) | ||
f1 = int(conf.freq1) | ||||
f2 = int(conf.freq2) | ||||
f3 = int(conf.freq3) | ||||
|
r38 | |||
|
r40 | try: | ||
post_data = {"f0":f0, "f1":f1, "f2":f2, "f3":f3} | ||||
route = "http://" + str(ip) + ":" + str(port) + "/frequencies/" | ||||
r = requests.post(route, post_data) | ||||
text = r.text | ||||
text = text.split(',') | ||||
try: | ||||
if len(text)>1: | ||||
title = text[0] | ||||
status = text[1] | ||||
status_ok = r.status_code | ||||
if title == "okay": | ||||
messages.success(request, status) | ||||
else: | ||||
messages.error(request, status) | ||||
|
r38 | else: | ||
|
r40 | title = text[0] | ||
messages.error(request, title) | ||||
except: | ||||
messages.error(request, "An hardware error was found.") | ||||
|
r38 | |||
|
r35 | except: | ||
|
r40 | messages.error(request, "Could not write parameters.") | ||
|
r31 | |||
return redirect('url_cgs_conf', id_conf=conf.id) | ||||
def cgs_conf_read(request, id_conf): | ||||
conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||||
|
r38 | |||
|
r31 | ip=conf.device.ip_address | ||
port=conf.device.port_address | ||||
if request.method=='POST': | ||||
form = CGSConfigurationForm(request.POST, instance=conf) | ||||
if form.is_valid(): | ||||
cgs_model = form.save(commit=False) | ||||
if cgs_model.verify_frequencies(): | ||||
cgs_model.save() | ||||
return redirect('url_cgs_conf', id_conf=conf.id) | ||||
messages.error(request, "Parameters could not be saved. Invalid parameters") | ||||
data = {} | ||||
if request.method=='GET': | ||||
#r: response = icon, status | ||||
route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548" | ||||
|
r38 | try: | ||
r = requests.get(route) | ||||
response = str(r.text) | ||||
response = response.split(";") | ||||
icon = response[0] | ||||
status = response[-1] | ||||
print r.text | ||||
#"icon" could be: "alert" or "okay" | ||||
if "okay" in icon: | ||||
messages.success(request, status) | ||||
else: | ||||
messages.error(request, status) | ||||
#Get Frequencies | ||||
route = "http://" + str(ip) + ":" + str(port) + "/frequencies/" | ||||
#frequencies = requests.get('http://10.10.10.175:8080/frequencies/') | ||||
frequencies = requests.get(route) | ||||
frequencies = frequencies.json() | ||||
frequencies = frequencies.get("Frecuencias") | ||||
f0 = frequencies.get("f0") | ||||
f1 = frequencies.get("f1") | ||||
f2 = frequencies.get("f2") | ||||
f3 = frequencies.get("f3") | ||||
print f0,f1,f2,f3 | ||||
|
r31 | |||
|
r38 | |||
if not response: | ||||
messages.error(request, "Could not read parameters from Device") | ||||
return redirect('url_cgs_conf', id_conf=conf.id) | ||||
data = {'experiment' : conf.experiment.id, | ||||
'device' : conf.device.id, | ||||
'freq0' : f0, | ||||
'freq1' : f1, | ||||
'freq2' : f2, | ||||
'freq3' : f3, | ||||
} | ||||
except: | ||||
messages.error(request, "Could not read parameters from Device") | ||||
data = {'experiment' : conf.experiment.id, | ||||
'device' : conf.device.id, | ||||
'freq0' : None, | ||||
'freq1' : None, | ||||
'freq2' : None, | ||||
'freq3' : None, | ||||
} | ||||
|
r39 | return redirect('url_cgs_conf', id_conf=conf.id) | ||
|
r31 | |||
|
r33 | form = CGSConfigurationForm(initial = data) | ||
|
r31 | |||
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)) | ||||
|
r27 | |||
|
r34 | return render(request, 'cgs_conf_edit.html', kwargs) | ||
|
r42 | def cgs_conf_import(request, id_conf): | ||
conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||||
if request.method == 'POST': | ||||
file_form = UploadFileForm(request.POST, request.FILES) | ||||
if file_form.is_valid(): | ||||
try: | ||||
if conf.update_from_file(request.FILES['file']): | ||||
try: | ||||
conf.full_clean() | ||||
except ValidationError as e: | ||||
messages.error(request, e) | ||||
else: | ||||
conf.save() | ||||
messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name) | ||||
#messages.warning(request,"") | ||||
return redirect('url_cgs_conf', id_conf=conf.id) | ||||
except: | ||||
messages.error(request, "No JSON object could be decoded.") | ||||
messages.error(request, "Could not import parameters from file") | ||||
else: | ||||
file_form = UploadFileForm(initial={'title': '.json'}) | ||||
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)) | ||||
return render(request, 'cgs_conf_import.html', kwargs) | ||||
def handle_uploaded_file(f): | ||||
data = {'freq0' : 62500000, | ||||
'freq1' : 62500000, | ||||
'freq2' : 62500000, | ||||
'freq3' : 62500000, | ||||
} | ||||
return data | ||||
|
r38 | def cgs_conf_export(request, id_conf): | ||
|
r34 | |||
|
r38 | conf = get_object_or_404(CGSConfiguration, pk=id_conf) | ||
ip=conf.device.ip_address | ||||
port=conf.device.port_address | ||||
|
r34 | |||
|
r38 | if request.method=='POST': | ||
return HttpResponse(conf.parameters, content_type="application/json") | ||||
return render(request, 'cgs_conf.html') | ||||
#return redirect(conf.get_absolute_url()) | ||||