##// END OF EJS Templates
Task #716: ABS Views...
Task #716: ABS Views git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@202 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r177:ad2e7677ed4e
r179:127ca1c0468c
Show More
views.py
482 lines | 13.4 KiB | text/x-python | PythonLexer
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
from django.conf import settings
from django.http import HttpResponse
from datetime import datetime
from time import sleep
import os
from apps.main.models import Device, Configuration
from apps.main.views import sidebar
from .models import ABSConfiguration, ABSBeam
from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm
from .utils.overJroShow import overJroShow
from .utils.OverJRO import OverJRO
# Create your views here.
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
return render(request, 'abs_edit_beam.html', kwargs)
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)
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