##// END OF EJS Templates
Check the readme.md for the bokeh version notes and requeriments.
Check the readme.md for the bokeh version notes and requeriments.

File last commit:

r338:7377db7c77e8
r344:ada396c7b35b
Show More
views.py
446 lines | 13.3 KiB | text/x-python | PythonLexer
Fiorella Quino
Task #714: Modulo web del ABS ...
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
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177 from django.conf import settings
from django.http import HttpResponse
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r338 from django.urls import reverse
Update abs operations
r313 from django.views.decorators.csrf import csrf_exempt
Juan C. Espinoza
Add support to read abs module status
r326 from django.utils.safestring import mark_safe
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177
from datetime import datetime
from time import sleep
import os
Juan C. Espinoza
Fix abs plotting patterns
r309 import io
Juan C. Espinoza
Proyecto base en Django (refs #259) ...
r0
Fiorella Quino
Task #769: Implementacion Scheduler para ABS, Task #717: Implementacion de start_device() y stop_device()...
r205 from apps.main.models import Device, Configuration, Experiment
Fiorella Quino
Task #714: Modulo web del ABS ...
r166 from apps.main.views import sidebar
from .models import ABSConfiguration, ABSBeam
Fiorella Quino
Task #716: Vista ABS: import function...
r190 from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm, ABSImportForm
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177
from .utils.overJroShow import overJroShow
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r338 #from .utils.OverJRO import OverJRO
Juan C. Espinoza
Proyecto base en Django (refs #259) ...
r0 # Create your views here.
Fiorella Quino
Task #714: Modulo web del ABS ...
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
Juan C. Espinoza
Review & fix ABS module
r307 def abs_conf(request, id_conf):
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
Juan C. Espinoza
Review & fix ABS module
r307 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
beams = ABSBeam.objects.filter(abs_conf=conf)
Fiorella Quino
Task #714: Modulo Web ABS...
r182 #------------Colors for Active Beam:-------------
Juan C. Espinoza
Review & fix ABS module
r307 all_status = {}
Fiorella Quino
Task #715: API ABS, "/status" route and function was developed in Restful Server....
r203 module_messages = json.loads(conf.module_messages)
Fiorella Quino
Task #714: Modulo Web ABS...
r182
color_status = {}
Juan C. Espinoza
Review & fix ABS module
r307 for i, status in enumerate(conf.module_status):
if status == '3': #Running background-color: #00cc00;
all_status['{}'.format(i+1)] = 2
color_status['{}'.format(i+1)] = 'class=text-success'#'bgcolor=#00cc00'
Juan C. Espinoza
Add support to read abs module status
r326 elif status == '2':
all_status['{}'.format(i+1)] = 1
color_status['{}'.format(i+1)] = 'class=text-info'
Juan C. Espinoza
Review & fix ABS module
r307 elif status == '1': #Connected background-color: #ee902c;
all_status['{}'.format(i+1)] = 1
color_status['{}'.format(i+1)] = 'class=text-warning'#'bgcolor=#ee902c'
else: #Disconnected background-color: #ff0000;
all_status['{}'.format(i+1)] = 0
color_status['{}'.format(i+1)] = 'class=text-danger'#'bgcolor=#FF0000'
Fiorella Quino
Task #714: Modulo Web ABS...
r182 #------------------------------------------------
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
kwargs = {}
Fiorella Quino
Task #714: Modulo ABS...
r199 kwargs['connected_modules'] = str(conf.connected_modules())+'/64'
Fiorella Quino
Task #714: Modulo web del ABS ...
r166 kwargs['dev_conf'] = conf
Juan C. Espinoza
Review & fix ABS module
r307
Fiorella Quino
Task #716: Vista ABS, change_beam button is disabled if operation_mode is automatic, main abs view show current active beam...
r206 if conf.operation_mode == 0:
Juan C. Espinoza
Update Views y several improvements
r316 kwargs['dev_conf_keys'] = ['label', 'operation_mode']
Fiorella Quino
Task #716: Vista ABS, change_beam button is disabled if operation_mode is automatic, main abs view show current active beam...
r206 else:
Juan C. Espinoza
Update Views y several improvements
r316 kwargs['dev_conf_keys'] = ['label', 'operation_mode', 'operation_value']
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
kwargs['title'] = 'ABS Configuration'
kwargs['suptitle'] = 'Details'
kwargs['button'] = 'Edit Configuration'
Juan C. Espinoza
Review & fix ABS module
r307
if conf.active_beam != 0:
kwargs['active_beam'] = int(conf.active_beam)
kwargs['beams'] = beams
kwargs['modules_status'] = all_status
Fiorella Quino
Task #714: Modulo Web ABS...
r182 kwargs['color_status'] = color_status
Fiorella Quino
Task #715: API ABS, "/status" route and function was developed in Restful Server....
r203 kwargs['module_messages'] = module_messages
Fiorella Quino
Task #714: Modulo web del ABS ...
r166 ###### SIDEBAR ######
kwargs.update(sidebar(conf=conf))
return render(request, 'abs_conf.html', kwargs)
Fiorella Quino
Task #961: Actualizar status de modulos ABS con subproceso...
r258
Fiorella Quino
Task #714: Modulo web del ABS ...
r166 def abs_conf_edit(request, id_conf):
conf = get_object_or_404(ABSConfiguration, pk=id_conf)
Fiorella Quino
Task #716: Vista ABS: import function...
r190
Fiorella Quino
Task #714: Modulo Web ABS...
r181 beams = ABSBeam.objects.filter(abs_conf=conf)
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
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)
Update abs operations
r313 @csrf_exempt
def abs_conf_alert(request):
if request.method == 'POST':
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r338 print (request.POST)
Update abs operations
r313 return HttpResponse(json.dumps({'result':1}), content_type='application/json')
else:
return redirect('index')
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
Fiorella Quino
Task #716: Vista ABS: import function...
r190 def import_file(request, id_conf):
conf = get_object_or_404(ABSConfiguration, pk=id_conf)
if request.method=='POST':
form = ABSImportForm(request.POST, request.FILES)
if form.is_valid():
try:
parms = conf.import_from_file(request.FILES['file_name'])
if parms:
conf.update_from_file(parms)
messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
return redirect(conf.get_absolute_url_edit())
except Exception as e:
messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
else:
messages.warning(request, 'Your current configuration will be replaced')
form = ABSImportForm()
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'ABS Configuration'
kwargs['suptitle'] = 'Import file'
kwargs['button'] = 'Upload'
kwargs['previous'] = conf.get_absolute_url()
return render(request, 'abs_import.html', kwargs)
Fiorella Quino
Task #714: Modulo Web ABS: send beam position function (models, views, urls, abs_conf) ...
r183 def send_beam(request, id_conf, id_beam):
conf = get_object_or_404(ABSConfiguration, pk=id_conf)
Juan C. Espinoza
Add support to read abs module status
r326
Juan C. Espinoza
Check for active configuration for status update
r329 abs = Configuration.objects.filter(pk=conf.device.conf_active).first()
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r338 if abs!=conf:
Juan C. Espinoza
Add support to read abs module status
r326 url = '#' if abs is None else abs.get_absolute_url()
label = 'None' if abs is None else abs.label
messages.warning(
request,
mark_safe('The current configuration has not been written in the modules, the active configuration is <a href="{}">{}</a>'.format(
url,
label
))
)
return redirect(conf.get_absolute_url())
Fiorella Quino
Task #714: Modulo Web ABS: send beam position function (models, views, urls, abs_conf) ...
r183 beam = get_object_or_404(ABSBeam, pk=id_beam)
Juan C. Espinoza
Review & fix ABS module
r307
Juan C. Espinoza
Add view confirmation for write/chng beam methods
r333 if request.method == 'POST':
beams_list = ABSBeam.objects.filter(abs_conf=conf)
conf.active_beam = id_beam
i = 0
for b in beams_list:
if b.id == int(id_beam):
break
else:
i += 1
beam_pos = i + 1 #Estandarizar
Nueva plantilla, prueba comunicacion y nuevos campos ddsrest
r338 print ('%s Position: %s') % (beam.name, str(beam_pos))
Juan C. Espinoza
Add view confirmation for write/chng beam methods
r333 conf.send_beam(beam_pos)
return redirect('url_abs_conf', conf.id)
kwargs = {
'title': 'ABS',
'suptitle': conf.label,
'message': 'Are you sure you want to change ABS Beam to: {}?'.format(beam.name),
'delete': False
}
kwargs['menu_configurations'] = 'active'
return render(request, 'confirm.html', kwargs)
Fiorella Quino
Task #714: Modulo web del ABS ...
r166
def add_beam(request, id_conf):
conf = get_object_or_404(ABSConfiguration, pk=id_conf)
confs = Configuration.objects.all()
if request.method=='GET':
form = ABSBeamAddForm()
if request.method=='POST':
form = ABSBeamAddForm(request.POST)
beam_data = get_values_from_form(request.POST)
new_beam = ABSBeam(
Juan C. Espinoza
Review & fix ABS module
r307 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'])
Fiorella Quino
Task #714: Modulo web del ABS ...
r166 )
new_beam.save()
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
Fiorella Quino
Task #716: ABS View...
r168 return render(request, 'abs_edit_beam.html', kwargs)
Fiorella Quino
Task #714: Modulo web del ABS ...
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.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)
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 def plot_patterns(request, id_conf, id_beam=None):
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177
kwargs = {}
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
beams = ABSBeam.objects.filter(abs_conf=conf)
Fiorella Quino
Task #716: Vista ABS: import function...
r190
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 if id_beam:
beam = get_object_or_404(ABSBeam, pk=id_beam)
Juan C. Espinoza
Fix abs plotting patterns
r309 kwargs['beam'] = beam
Fiorella Quino
Task #716: Vista ABS: import function...
r190
###### SIDEBAR ######
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177
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)
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 def plot_pattern(request, id_conf, id_beam, antenna):
Fiorella Quino
Task #716: Vista ABS: import function...
r190
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 if antenna=='down':
sleep(3)
Fiorella Quino
Task #716: Vista ABS: import function...
r190
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
beam = get_object_or_404(ABSBeam, pk=id_beam)
Fiorella Quino
Task #716: Vista ABS: import function...
r190 just_rx = 1 if json.loads(beam.only_rx)[antenna] else 0
Juan C. Espinoza
Improve abs pattern views, templates and plots....
r180 phases = json.loads(beam.antenna)['antenna_{}'.format(antenna)]
gain_tx = json.loads(beam.tx)[antenna]
gain_rx = json.loads(beam.rx)[antenna]
ues = json.loads(beam.ues)[antenna]
Juan C. Espinoza
Fix abs plotting patterns
r309 newOverJro = overJroShow(beam.name)
Fiorella Quino
Task #716: Vista ABS: import function...
r190 fig = newOverJro.plotPattern2(datetime.today(), phases, gain_tx, gain_rx, ues, just_rx)
Juan C. Espinoza
Fix abs plotting patterns
r309 buf = io.BytesIO()
fig.savefig(buf, format='png')
response = HttpResponse(buf.getvalue(), content_type='image/png')
Fiorella Quino
Task #716: Vista ABS (urls.py for plot beams patterns)...
r177 return response
Update abs operations
r313