views.py
482 lines
| 13.4 KiB
| text/x-python
|
PythonLexer
|
r166 | from django.shortcuts import render_to_response | ||
from django.template import RequestContext | ||||
from django.shortcuts import redirect, render, get_object_or_404 | ||||
from django.contrib import messages | ||||
|
r177 | from django.conf import settings | ||
from django.http import HttpResponse | ||||
from datetime import datetime | ||||
from time import sleep | ||||
import os | ||||
|
r0 | |||
|
r166 | from apps.main.models import Device, Configuration | ||
from apps.main.views import sidebar | ||||
from .models import ABSConfiguration, ABSBeam | ||||
from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm | ||||
|
r177 | |||
from .utils.overJroShow import overJroShow | ||||
from .utils.OverJRO import OverJRO | ||||
|
r0 | # Create your views here. | ||
|
r166 | import json, ast | ||
def get_values_from_form(form_data): | ||||
sublistup = [] | ||||
sublistdown = [] | ||||
subtxlistup = [] | ||||
subtxlistdown = [] | ||||
subrxlistup = [] | ||||
subrxlistdown = [] | ||||
up_values_list = [] | ||||
down_values_list = [] | ||||
up_txvalues_list = [] | ||||
down_txvalues_list = [] | ||||
up_rxvalues_list = [] | ||||
down_rxvalues_list = [] | ||||
values_list = {} | ||||
cont = 1 | ||||
for i in range(1,65): | ||||
x = float(form_data['abs_up'+str(i)]) | ||||
y = float(form_data['abs_down'+str(i)]) | ||||
sublistup.append(x) | ||||
sublistdown.append(y) | ||||
if str(i) in form_data.getlist('uptx_checks'): | ||||
subtxlistup.append(1) | ||||
else: | ||||
subtxlistup.append(0) | ||||
if str(i) in form_data.getlist('downtx_checks'): | ||||
subtxlistdown.append(1) | ||||
else: | ||||
subtxlistdown.append(0) | ||||
if str(i) in form_data.getlist('uprx_checks'): | ||||
subrxlistup.append(1) | ||||
else: | ||||
subrxlistup.append(0) | ||||
if str(i) in form_data.getlist('downrx_checks'): | ||||
subrxlistdown.append(1) | ||||
else: | ||||
subrxlistdown.append(0) | ||||
cont = cont+1 | ||||
if cont == 9: | ||||
up_values_list.append(sublistup) | ||||
down_values_list.append(sublistdown) | ||||
sublistup = [] | ||||
sublistdown = [] | ||||
up_txvalues_list.append(subtxlistup) | ||||
down_txvalues_list.append(subtxlistdown) | ||||
subtxlistup = [] | ||||
subtxlistdown = [] | ||||
up_rxvalues_list.append(subrxlistup) | ||||
down_rxvalues_list.append(subrxlistdown) | ||||
subrxlistup = [] | ||||
subrxlistdown = [] | ||||
cont = 1 | ||||
list_uesup = [] | ||||
list_uesdown = [] | ||||
for i in range(1,5): | ||||
if form_data['ues_up'+str(i)] == '': | ||||
list_uesup.append(0.0) | ||||
else: | ||||
list_uesup.append(float(form_data['ues_up'+str(i)])) | ||||
if form_data['ues_down'+str(i)] == '': | ||||
list_uesdown.append(0.0) | ||||
else: | ||||
list_uesdown.append(float(form_data['ues_down'+str(i)])) | ||||
onlyrx_list = form_data.getlist('onlyrx') | ||||
only_rx = {} | ||||
if '1' in onlyrx_list: | ||||
only_rx['up'] = True | ||||
else: | ||||
only_rx['up'] = False | ||||
if '2' in onlyrx_list: | ||||
only_rx['down'] = True | ||||
else: | ||||
only_rx['down'] = False | ||||
antenna = {'antenna_up': up_values_list, 'antenna_down': down_values_list} | ||||
tx = {'up': up_txvalues_list, 'down': down_txvalues_list} | ||||
rx = {'up': up_rxvalues_list, 'down': down_rxvalues_list} | ||||
ues = {'up': list_uesup, 'down': list_uesdown} | ||||
name = str(form_data['beam_name']) | ||||
beam_data = {'name': name, 'antenna': antenna, 'tx': tx, 'rx': rx, 'ues': ues, 'only_rx': only_rx} | ||||
return beam_data | ||||
def abs_conf(request, id_conf): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beams_dict = ast.literal_eval(conf.beams) | ||||
beams = [] | ||||
for beam_id in range(1,len(beams_dict)+1): | ||||
beam = ABSBeam.objects.get(pk=beams_dict['beam'+str(beam_id)]) | ||||
beams.append(beam) | ||||
beams_id = ast.literal_eval(conf.beams) | ||||
ip=conf.device.ip_address | ||||
port=conf.device.port_address | ||||
kwargs = {} | ||||
kwargs['status'] = conf.device.get_status_display() | ||||
kwargs['dev_conf'] = conf | ||||
kwargs['dev_conf_keys'] = ['name',] | ||||
kwargs['title'] = 'ABS Configuration' | ||||
kwargs['suptitle'] = 'Details' | ||||
kwargs['no_play'] = True | ||||
kwargs['button'] = 'Edit Configuration' | ||||
#kwargs['no_play'] = True | ||||
kwargs['beams_id'] = beams_id | ||||
kwargs['beams'] = beams | ||||
kwargs['beam_selector'] = 0 | ||||
#kwargs['my_data'] = simplejson.dumps(beams) | ||||
kwargs['only_stop'] = True | ||||
###### SIDEBAR ###### | ||||
kwargs.update(sidebar(conf=conf)) | ||||
return render(request, 'abs_conf.html', kwargs) | ||||
def abs_conf_edit(request, id_conf): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beams_list = ast.literal_eval(conf.beams) | ||||
i = 1 | ||||
beams = [] | ||||
for b in beams_list: | ||||
beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)]) | ||||
beams.append(beam) | ||||
i=i+1 | ||||
if request.method=='GET': | ||||
form = ABSConfigurationForm(instance=conf) | ||||
if request.method=='POST': | ||||
form = ABSConfigurationForm(request.POST, instance=conf) | ||||
if form.is_valid(): | ||||
conf = form.save(commit=False) | ||||
conf.save() | ||||
return redirect('url_abs_conf', id_conf=conf.id) | ||||
###### SIDEBAR ###### | ||||
kwargs = {} | ||||
kwargs['dev_conf'] = conf | ||||
#kwargs['id_dev'] = conf.id | ||||
kwargs['id_conf'] = conf.id | ||||
kwargs['form'] = form | ||||
kwargs['abs_beams'] = beams | ||||
kwargs['title'] = 'Device Configuration' | ||||
kwargs['suptitle'] = 'Edit' | ||||
kwargs['button'] = 'Save' | ||||
kwargs['edit'] = True | ||||
return render(request, 'abs_conf_edit.html', kwargs) | ||||
def add_beam(request, id_conf): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
confs = Configuration.objects.all() | ||||
if request.method=='GET': | ||||
#form = ABSBeamEditForm() | ||||
form = ABSBeamAddForm() | ||||
if request.method=='POST': | ||||
form = ABSBeamAddForm(request.POST) | ||||
beam_data = get_values_from_form(request.POST) | ||||
new_beam = ABSBeam( | ||||
name =beam_data['name'], | ||||
antenna =json.dumps(beam_data['antenna']), | ||||
abs_conf=conf, | ||||
tx =json.dumps(beam_data['tx']), | ||||
rx =json.dumps(beam_data['rx']), | ||||
ues =json.dumps(beam_data['ues']), | ||||
only_rx =json.dumps(beam_data['only_rx']) | ||||
) | ||||
new_beam.save() | ||||
#---Update 6bits configuration and add beam to abs configuration beams list. | ||||
new_beam.modules_6bits() | ||||
new_beam.add_beam2list() | ||||
messages.success(request, 'Beam: "%s" has been added.' % new_beam.name) | ||||
return redirect('url_edit_abs_conf', conf.id) | ||||
###### SIDEBAR ###### | ||||
kwargs = {} | ||||
#kwargs['dev_conf'] = conf.device | ||||
#kwargs['id_dev'] = conf.device | ||||
kwargs['id_conf'] = conf.id | ||||
kwargs['form'] = form | ||||
kwargs['title'] = 'ABS Beams' | ||||
kwargs['suptitle'] = 'Add Beam' | ||||
kwargs['button'] = 'Add' | ||||
kwargs['no_sidebar'] = True | ||||
#kwargs['previous'] = conf.get_absolute_url_edit() | ||||
kwargs['edit'] = True | ||||
return render(request, 'abs_add_beam.html', kwargs) | ||||
def edit_beam(request, id_conf, id_beam): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
if request.method=='GET': | ||||
form = ABSBeamEditForm(initial={'beam': beam}) | ||||
if request.method=='POST': | ||||
form = ABSBeamEditForm(request.POST) | ||||
beam_data = get_values_from_form(request.POST) | ||||
beam.dict_to_parms(beam_data) | ||||
beam.save() | ||||
messages.success(request, 'Beam: "%s" has been updated.' % beam.name) | ||||
return redirect('url_edit_abs_conf', conf.id) | ||||
###### SIDEBAR ###### | ||||
kwargs = {} | ||||
kwargs['id_conf'] = conf.id | ||||
kwargs['form'] = form | ||||
kwargs['title'] = 'ABS Beams' | ||||
kwargs['suptitle'] = 'Edit Beam' | ||||
kwargs['button'] = 'Save' | ||||
kwargs['no_sidebar'] = True | ||||
#kwargs['previous'] = conf.get_absolute_url_edit() | ||||
kwargs['edit'] = True | ||||
|
r168 | return render(request, 'abs_edit_beam.html', kwargs) | ||
|
r166 | |||
def remove_beam(request, id_conf, id_beam): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
if request.method=='POST': | ||||
if beam: | ||||
try: | ||||
beam.remove_beamfromlist() | ||||
beam.delete() | ||||
messages.success(request, 'Beam: "%s" has been deleted.' % beam) | ||||
except: | ||||
messages.error(request, 'Unable to delete beam: "%s".' % beam) | ||||
return redirect('url_edit_abs_conf', conf.id) | ||||
###### SIDEBAR ###### | ||||
kwargs = {} | ||||
kwargs['object'] = beam | ||||
kwargs['delete'] = True | ||||
kwargs['title'] = 'Delete' | ||||
kwargs['suptitle'] = 'Beam' | ||||
kwargs['previous'] = conf.get_absolute_url_edit() | ||||
return render(request, 'confirm.html', kwargs) | ||||
|
r177 | |||
def plot_patterns(request, id_conf): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beams_list = ast.literal_eval(conf.beams) | ||||
i = 1 | ||||
beams = [] | ||||
for b in beams_list: | ||||
beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)]) | ||||
beams.append(beam) | ||||
i=i+1 | ||||
###### SIDEBAR ###### | ||||
kwargs = {} | ||||
kwargs['dev_conf'] = conf.device | ||||
kwargs['id_dev'] = conf.device | ||||
kwargs['id_conf'] = conf.id | ||||
kwargs['abs_beams'] = beams | ||||
kwargs['title'] = 'ABS Patterns' | ||||
kwargs['suptitle'] = conf.name | ||||
kwargs['no_sidebar'] = True | ||||
return render(request, 'abs_patterns.html', kwargs) | ||||
def plot_pattern(request, id_conf, id_beam): | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
#Lista de Beams de la configuracion con su respectivo ID | ||||
beams_list = ast.literal_eval(conf.beams) | ||||
i = 1 | ||||
#Lista de Objetos ABSBeams en el 0rden de su respectiva configuracion | ||||
beams = [] | ||||
for b in beams_list: | ||||
beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)]) | ||||
beams.append(beam) | ||||
i=i+1 | ||||
###### SIDEBAR ###### | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
kwargs = {} | ||||
kwargs['dev_conf'] = conf.device | ||||
kwargs['id_dev'] = conf.device | ||||
kwargs['id_conf'] = conf.id | ||||
kwargs['abs_beams'] = beams | ||||
kwargs['beam'] = beam | ||||
kwargs['title'] = 'ABS Patterns' | ||||
kwargs['suptitle'] = conf.name | ||||
kwargs['no_sidebar'] = True | ||||
return render(request, 'abs_patterns.html', kwargs) | ||||
def plot_uppattern(request, id_conf, id_beam): | ||||
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
exp_name = conf.experiment.name | ||||
just_rx = 0 | ||||
only_rx = json.loads(beam.only_rx) | ||||
if only_rx['up'] == True: | ||||
just_rx = 1 | ||||
antenna = ast.literal_eval(beam.antenna) | ||||
objAntenna = json.dumps(antenna['antenna_up']) | ||||
antenna_up = ''.join(str(i) for i in objAntenna) | ||||
phase_tx = antenna_up.replace(' ','') | ||||
tx = ast.literal_eval(beam.tx) | ||||
tx = json.dumps(tx['up']) | ||||
tx = ''.join(str(i) for i in tx) | ||||
gain_tx = tx.replace(' ','') | ||||
rx = ast.literal_eval(beam.rx) | ||||
rx = json.dumps(rx['up']) | ||||
rx = ''.join(str(i) for i in rx) | ||||
gain_rx = rx.replace(' ','') | ||||
ues = json.dumps(beam.get_up_ues) | ||||
ues = ''.join(str(i) for i in ues) | ||||
ues_tx = ues.replace(' ','') | ||||
#sleep(1) | ||||
overjro = OverJRO() | ||||
overjro.setParameters(settings.MEDIA_ROOT, exp_name, phase_tx, gain_tx, gain_rx, ues_tx, just_rx) | ||||
contentFile = overjro.setTextContent() | ||||
finalpath = overjro.saveFile(contentFile) | ||||
currentdate = datetime.today() | ||||
newOverJro = overJroShow() | ||||
newOverJro.setInputParameters(settings.MEDIA_ROOT, currentdate, finalpath) | ||||
newOverJro.setupParameters() | ||||
newOverJro.execute() | ||||
path = newOverJro.getPlot() | ||||
path= "apps/abs/media/"+path | ||||
canvas=FigureCanvas(newOverJro.figure) | ||||
response=HttpResponse(content_type='image/png') | ||||
canvas.print_png(response) | ||||
return response | ||||
def plot_downpattern(request, id_conf, id_beam): | ||||
sleep(4) | ||||
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | ||||
conf = get_object_or_404(ABSConfiguration, pk=id_conf) | ||||
beam = get_object_or_404(ABSBeam, pk=id_beam) | ||||
exp_name = conf.experiment.name | ||||
just_rx = 0 | ||||
only_rx = json.loads(beam.only_rx) | ||||
if only_rx['down'] == True: | ||||
just_rx = 1 | ||||
antenna = ast.literal_eval(beam.antenna) | ||||
objAntenna = json.dumps(antenna['antenna_down']) | ||||
antenna_down = ''.join(str(i) for i in objAntenna) | ||||
phase_tx = antenna_down.replace(' ','') | ||||
tx = ast.literal_eval(beam.tx) | ||||
tx = json.dumps(tx['down']) | ||||
tx = ''.join(str(i) for i in tx) | ||||
gain_tx = tx.replace(' ','') | ||||
rx = ast.literal_eval(beam.rx) | ||||
rx = json.dumps(rx['down']) | ||||
rx = ''.join(str(i) for i in rx) | ||||
gain_rx = rx.replace(' ','') | ||||
ues = json.dumps(beam.get_down_ues) | ||||
ues = ''.join(str(i) for i in ues) | ||||
ues_tx = ues.replace(' ','') | ||||
overjro = OverJRO() | ||||
overjro.setParameters(settings.MEDIA_ROOT, exp_name, phase_tx, gain_tx, gain_rx, ues_tx, just_rx) | ||||
contentFile = overjro.setTextContent() | ||||
finalpath = overjro.saveFile(contentFile) | ||||
currentdate = datetime.today() | ||||
newOverJro = overJroShow() | ||||
newOverJro.setInputParameters(settings.MEDIA_ROOT, currentdate, finalpath) | ||||
newOverJro.setupParameters() | ||||
newOverJro.execute() | ||||
path = newOverJro.getPlot() | ||||
path= "apps/abs/media/"+path | ||||
canvas=FigureCanvas(newOverJro.figure) | ||||
response=HttpResponse(content_type='image/png') | ||||
canvas.print_png(response) | ||||
return response | ||||