views.py
221 lines
| 7.7 KiB
| text/x-python
|
PythonLexer
|
r6 | from django.shortcuts import render_to_response | ||
from django.template import RequestContext | ||||
|
r118 | from django.shortcuts import redirect, render, get_object_or_404 | ||
|
r135 | from django.contrib import messages | ||
|
r274 | from django.http import HttpResponse | ||
|
r6 | |||
from apps.main.models import Device | ||||
|
r30 | from apps.main.views import sidebar | ||
|
r316 | from .models import JARSConfiguration, JARSFilter | ||
|
r345 | from .forms import JARSConfigurationForm, JARSFilterForm, JARSImportForm,JARSFilterFormNew | ||
|
r269 | |||
import json | ||||
|
r6 | # Create your views here. | ||
|
r118 | def jars_conf(request, id_conf): | ||
|
r209 | |||
|
r118 | conf = get_object_or_404(JARSConfiguration, pk=id_conf) | ||
|
r209 | |||
|
r316 | filter_parms = json.loads(conf.filter_parms) | ||
|
r209 | |||
|
r118 | kwargs = {} | ||
|
r345 | kwargs['filter'] = filter_parms | ||
kwargs['filter_obj'] = JARSFilter.objects.get(pk=1) | ||||
|
r316 | kwargs['filter_keys'] = ['clock', 'multiplier', 'frequency', 'f_decimal', | ||
'cic_2', 'scale_cic_2', 'cic_5', 'scale_cic_5', 'fir', | ||||
'scale_fir', 'number_taps', 'taps'] | ||||
|
r293 | |||
|
r345 | filter_resolution = conf.filter_resolution() | ||
kwargs['resolution'] = '{} (MHz)'.format(filter_resolution) | ||||
|
r270 | if filter_resolution < 1: | ||
kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000) | ||||
|
r293 | |||
|
r345 | kwargs['status'] = conf.device.get_status_display() | ||
kwargs['dev_conf'] = conf | ||||
|
r316 | kwargs['dev_conf_keys'] = ['cards_number', 'channels_number', 'channels', | ||
|
r293 | 'ftp_interval', 'data_type','acq_profiles', | ||
|
r275 | 'profiles_block', 'raw_data_blocks', 'ftp_interval', | ||
'cohe_integr_str', 'cohe_integr', 'decode_data', 'post_coh_int', | ||||
'incohe_integr', 'fftpoints', 'spectral_number', | ||||
|
r136 | 'spectral', 'create_directory', 'include_expname', | ||
|
r157 | 'save_ch_dc', 'save_data'] | ||
|
r209 | |||
|
r275 | if conf.exp_type == 0: | ||
for field in ['incohe_integr','fftpoints','spectral_number', 'spectral', 'save_ch_dc']: | ||||
kwargs['dev_conf_keys'].remove(field) | ||||
if conf.decode_data == 0: | ||||
kwargs['dev_conf_keys'].remove('decode_data') | ||||
kwargs['dev_conf_keys'].remove('post_coh_int') | ||||
|
r118 | kwargs['title'] = 'JARS Configuration' | ||
kwargs['suptitle'] = 'Details' | ||||
|
r209 | |||
|
r118 | ###### SIDEBAR ###### | ||
kwargs.update(sidebar(conf=conf)) | ||||
|
r209 | |||
|
r118 | return render(request, 'jars_conf.html', kwargs) | ||
|
r6 | |||
|
r118 | def jars_conf_edit(request, id_conf): | ||
|
r209 | |||
|
r345 | conf = get_object_or_404(JARSConfiguration, pk=id_conf) | ||
|
r316 | filter_parms = json.loads(conf.filter_parms) | ||
|
r118 | if request.method=='GET': | ||
|
r345 | form = JARSConfigurationForm(instance=conf) | ||
|
r316 | filter_form = JARSFilterForm(initial=filter_parms) | ||
|
r209 | |||
|
r118 | if request.method=='POST': | ||
|
r345 | form = JARSConfigurationForm(request.POST, instance=conf) | ||
|
r316 | filter_form = JARSFilterForm(request.POST) | ||
|
r269 | |||
if filter_form.is_valid(): | ||||
|
r345 | jars_filter = filter_form.cleaned_data | ||
|
r316 | jars_filter['id'] = request.POST['filter_template'] | ||
else: | ||||
messages.error(request, filter_form.errors) | ||||
|
r209 | |||
|
r118 | if form.is_valid(): | ||
|
r345 | conf = form.save(commit=False) | ||
|
r269 | conf.filter_parms = json.dumps(jars_filter) | ||
|
r123 | conf.save() | ||
|
r118 | return redirect('url_jars_conf', id_conf=conf.id) | ||
|
r209 | |||
|
r118 | kwargs = {} | ||
|
r209 | |||
|
r345 | kwargs['id_dev'] = conf.id | ||
kwargs['form'] = form | ||||
|
r269 | kwargs['filter_form'] = filter_form | ||
|
r316 | kwargs['filter_name'] = JARSFilter.objects.get(pk=filter_parms['id']).name | ||
|
r345 | kwargs['title'] = 'Device Configuration' | ||
kwargs['suptitle'] = 'Edit' | ||||
kwargs['button'] = 'Save' | ||||
|
r209 | |||
|
r135 | return render(request, 'jars_conf_edit.html', kwargs) | ||
|
r157 | def import_file(request, conf_id): | ||
|
r209 | |||
|
r157 | conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||
if request.method=='POST': | ||||
form = JARSImportForm(request.POST, request.FILES) | ||||
|
r209 | if form.is_valid(): | ||
|
r275 | try: | ||
|
r263 | data = conf.import_from_file(request.FILES['file_name']) | ||
conf.dict_to_parms(data) | ||||
messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name']) | ||||
return redirect(conf.get_absolute_url_edit()) | ||||
|
r293 | |||
|
r275 | except Exception as e: | ||
messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], repr(e))) | ||||
|
r157 | else: | ||
messages.warning(request, 'Your current configuration will be replaced') | ||||
|
r209 | form = JARSImportForm() | ||
|
r157 | kwargs = {} | ||
|
r345 | kwargs['form'] = form | ||
kwargs['title'] = 'JARS Configuration' | ||||
|
r157 | kwargs['suptitle'] = 'Import file' | ||
|
r345 | kwargs['button'] = 'Upload' | ||
|
r157 | kwargs['previous'] = conf.get_absolute_url() | ||
|
r209 | |||
|
r157 | return render(request, 'jars_import.html', kwargs) | ||
def read_conf(request, conf_id): | ||||
|
r209 | |||
|
r157 | conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||
#filter = get_object_or_404(JARSfilter, pk=filter_id) | ||||
|
r209 | |||
|
r157 | if request.method=='GET': | ||
|
r209 | |||
|
r157 | parms = conf.read_device() | ||
conf.status_device() | ||||
|
r209 | |||
|
r157 | if not parms: | ||
messages.error(request, conf.message) | ||||
return redirect(conf.get_absolute_url()) | ||||
|
r209 | |||
|
r157 | form = JARSConfigurationForm(initial=parms, instance=conf) | ||
|
r209 | |||
|
r157 | if request.method=='POST': | ||
form = JARSConfigurationForm(request.POST, instance=conf) | ||||
|
r209 | |||
|
r157 | if form.is_valid(): | ||
form.save() | ||||
return redirect(conf.get_absolute_url()) | ||||
|
r209 | |||
|
r157 | messages.error(request, "Parameters could not be saved") | ||
|
r209 | |||
|
r157 | kwargs = {} | ||
|
r345 | kwargs['id_dev'] = conf.id | ||
|
r157 | kwargs['filter_id'] = conf.filter.id | ||
|
r345 | kwargs['form'] = form | ||
kwargs['title'] = 'Device Configuration' | ||||
kwargs['suptitle'] = 'Parameters read from device' | ||||
kwargs['button'] = 'Save' | ||||
|
r209 | |||
|
r157 | ###### SIDEBAR ###### | ||
kwargs.update(sidebar(conf=conf)) | ||||
|
r209 | |||
|
r157 | return render(request, 'jars_conf_edit.html', kwargs) | ||
|
r345 | def new_filter(request, conf_id): | ||
conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||||
form = JARSFilterFormNew() | ||||
if request.method=='POST': | ||||
filter_form = JARSFilterFormNew(request.POST) | ||||
if filter_form.is_valid(): | ||||
jars_filter = filter_form.cleaned_data | ||||
jars_filter['id'] = request.POST['name'] | ||||
else: | ||||
messages.error(request, filter_form.errors) | ||||
#print(json.dumps(jars_filter)) | ||||
jars_filter_obj = JARSFilter() | ||||
jars_filter_obj.dict_to_parms_new(request.POST) | ||||
jars_filter_obj.save() | ||||
return redirect('url_edit_jars_conf', id_conf=conf.id) | ||||
kwargs = {} | ||||
kwargs['id_dev'] = conf.id | ||||
kwargs['form'] = form | ||||
kwargs['title'] = 'New JARS Filter' | ||||
kwargs['suptitle'] = 'Parameters' | ||||
kwargs['button'] = 'Save' | ||||
return render(request, 'jars_new_filter.html', kwargs) | ||||
|
r316 | def change_filter(request, conf_id, filter_id): | ||
|
r269 | |||
|
r345 | conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||
filter = get_object_or_404(JARSFilter, pk=filter_id) | ||||
|
r316 | conf.filter_parms = json.dumps(filter.jsonify()) | ||
conf.save() | ||||
|
r293 | |||
|
r316 | return redirect('url_edit_jars_conf', id_conf=conf.id) | ||
|
r274 | |||
def get_log(request, conf_id): | ||||
conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||||
response = conf.get_log() | ||||
if not response: | ||||
message = conf.message | ||||
messages.error(request, message) | ||||
return redirect('url_jars_conf', id_conf=conf.id) | ||||
|
r293 | |||
|
r274 | try: | ||
message = response.json()['message'] | ||||
messages.error(request, message) | ||||
return redirect('url_jars_conf', id_conf=conf.id) | ||||
except Exception as e: | ||||
|
r345 | message = 'Restarting Report.txt has been downloaded successfully.'+e | ||
|
r293 | |||
|
r274 | content = response | ||
filename = 'Log_%s_%s.txt' %(conf.experiment.name, conf.experiment.id) | ||||
response = HttpResponse(content,content_type='text/plain') | ||||
response['Content-Disposition'] = 'attachment; filename="%s"' %filename | ||||
|
r293 | return response | ||