views.py
240 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 | ||
|
r135 | from .models import JARSConfiguration, JARSfilter | ||
|
r157 | from .forms import JARSConfigurationForm, JARSfilterForm, JARSImportForm | ||
|
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 | |||
|
r269 | filter_parms = eval(conf.filter_parms) | ||
if filter_parms.__class__.__name__=='str': | ||||
filter_parms = eval(filter_parms) | ||||
|
r209 | |||
|
r118 | kwargs = {} | ||
|
r269 | kwargs['filter'] = filter_parms | ||
kwargs['filter_keys'] = ['clock', 'mult', 'fch', 'fch_decimal', | ||||
'filter_fir', 'filter_2', 'filter_5'] | ||||
|
r293 | |||
|
r269 | filter_resolution=conf.filter_resolution() | ||
|
r270 | kwargs['resolution'] = '{} (MHz)'.format(filter_resolution) | ||
if filter_resolution < 1: | ||||
kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000) | ||||
|
r293 | |||
|
r118 | kwargs['status'] = conf.device.get_status_display() | ||
|
r209 | |||
|
r118 | kwargs['dev_conf'] = conf | ||
|
r138 | kwargs['dev_conf_keys'] = ['name', | ||
|
r136 | '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 | kwargs['button'] = 'Edit Configuration' | ||
|
r209 | |||
|
r157 | #kwargs['no_play'] = True | ||
|
r209 | |||
#kwargs['only_stop'] = True | ||||
|
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 | |||
|
r118 | conf = get_object_or_404(JARSConfiguration, pk=id_conf) | ||
|
r209 | |||
|
r269 | filter_parms = eval(conf.filter_parms) | ||
if filter_parms.__class__.__name__=='str': | ||||
filter_parms = eval(filter_parms) | ||||
|
r118 | if request.method=='GET': | ||
form = JARSConfigurationForm(instance=conf) | ||||
|
r269 | filter_form = JARSfilterForm(initial=filter_parms) | ||
|
r209 | |||
|
r118 | if request.method=='POST': | ||
form = JARSConfigurationForm(request.POST, instance=conf) | ||||
|
r269 | filter_form = JARSfilterForm(request.POST) | ||
if filter_form.is_valid(): | ||||
jars_filter = filter_form.cleaned_data | ||||
try: | ||||
jars_filter.pop('name') | ||||
except: | ||||
pass | ||||
|
r209 | |||
|
r118 | if form.is_valid(): | ||
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 | |||
|
r118 | kwargs['id_dev'] = conf.id | ||
kwargs['form'] = form | ||||
|
r269 | kwargs['filter_form'] = filter_form | ||
|
r118 | 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 = {} | ||
kwargs['form'] = form | ||||
kwargs['title'] = 'JARS Configuration' | ||||
kwargs['suptitle'] = 'Import file' | ||||
kwargs['button'] = 'Upload' | ||||
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 = {} | ||
kwargs['id_dev'] = conf.id | ||||
kwargs['filter_id'] = conf.filter.id | ||||
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) | ||
|
r269 | |||
def change_filter(request, conf_id, filter_id=None): | ||||
conf = get_object_or_404(JARSConfiguration, pk=conf_id) | ||||
|
r293 | |||
|
r269 | if filter_id: | ||
if filter_id.__class__.__name__ not in ['int', 'float']: | ||||
filter_id = eval(filter_id) | ||||
|
r293 | |||
|
r269 | if filter_id == 0: | ||
return redirect('url_change_jars_filter', conf_id=conf.id) | ||||
if request.method=='GET': | ||||
if not filter_id: | ||||
|
r272 | form = JARSfilterForm(initial={'filter_id': 0}) | ||
|
r269 | else: | ||
|
r272 | form = JARSfilterForm(initial={'filter_id': filter_id}) | ||
|
r269 | |||
|
r270 | if request.method=='POST': | ||
form = JARSfilterForm(request.POST) | ||||
if form.is_valid(): | ||||
jars_filter = form.cleaned_data | ||||
try: | ||||
jars_filter.pop('name') | ||||
except: | ||||
pass | ||||
conf.filter_parms = json.dumps(jars_filter) | ||||
conf.save() | ||||
return redirect('url_edit_jars_conf', id_conf=conf.id) | ||||
|
r271 | else: | ||
messages.error(request, "Select a Filter Template") | ||||
return redirect('url_change_jars_filter', conf_id=conf.id) | ||||
|
r270 | |||
|
r269 | kwargs = {} | ||
kwargs['title'] = 'JARS Configuration' | ||||
kwargs['suptitle'] = 'Change Filter' | ||||
kwargs['form'] = form | ||||
|
r270 | kwargs['button'] = 'Change' | ||
|
r269 | kwargs['conf_id'] = conf.id | ||
kwargs['filter_id'] = filter_id | ||||
return render(request, 'change_jars_filter.html', kwargs) | ||||
|
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: | ||||
message = 'Restarting Report.txt has been downloaded successfully.' | ||||
|
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 | ||