views.py
140 lines
| 4.4 KiB
| text/x-python
|
PythonLexer
|
r79 | ||
|
r23 | import json | |
from django.contrib import messages | |||
|
r45 | from django.utils.safestring import mark_safe | |
|
r25 | from django.shortcuts import render, redirect, get_object_or_404, HttpResponse | |
|
r316 | from django.contrib.auth.decorators import login_required | |
|
r23 | ||
|
r172 | from apps.main.models import Experiment, Device | |
|
r25 | from apps.main.views import sidebar | |
|
r23 | ||
r346 | from .models import USRPRXConfiguration | ||
from .forms import USRPRXConfigurationForm, USRPRXImportForm | |||
|
r23 | ||
r445 | def is_developer(user): | ||
groups = [str(g.name) for g in user.groups.all()] | |||
#return 'Developer' in groups or user.is_staff | |||
return 'Developer' in groups or user.is_superuser | |||
def is_operator(user): | |||
groups = [str(g.name) for g in user.groups.all()] | |||
#return 'Operator' in groups or user.is_staff | |||
return 'Operator' in groups or user.is_superuser | |||
|
r23 | ||
|
r45 | def conf(request, conf_id): | |
|
r23 | ||
r346 | conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) | ||
r345 | |||
|
r23 | kwargs = {} | |
kwargs['dev_conf'] = conf | |||
r413 | kwargs['dev_conf_keys'] = ['ip_address_rx', 'daughterboard_rx', 'antenna_rx', 'samplerate_rx', 'frequency_rx', 'datadir', 'clocksource', 'timesource', 'clockrate'] | ||
|
r172 | ||
|
r316 | kwargs['title'] = 'Configuration' | |
kwargs['suptitle'] = 'Detail' | |||
|
r172 | ||
|
r23 | kwargs['button'] = 'Edit Configuration' | |
r350 | |||
conf.status_device() | |||
|
r23 | ###### SIDEBAR ###### | |
|
r85 | kwargs.update(sidebar(conf=conf)) | |
|
r172 | ||
r345 | return render(request, 'usrp_rx_conf.html', kwargs) | ||
|
r23 | ||
|
r316 | @login_required | |
|
r45 | def conf_edit(request, conf_id): | |
r368 | |||
r346 | conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) | ||
r368 | |||
r445 | if not is_developer(request.user): | ||
messages.error(request, 'You must be an developer to edit this configuration') | |||
return redirect(conf.get_absolute_url()) | |||
|
r23 | if request.method=='GET': | |
r346 | form = USRPRXConfigurationForm(instance=conf) | ||
r368 | |||
|
r45 | elif request.method=='POST': | |
line_data = {} | |||
conf_data = {} | |||
|
r328 | clock_data = {} | |
|
r45 | extras = [] | |
r368 | |||
|
r45 | #classified post fields | |
for label,value in request.POST.items(): | |||
if label=='csrfmiddlewaretoken': | |||
continue | |||
|
r172 | ||
|
r45 | if label.count('|')==0: | |
r345 | if label in ('mode', 'multiplier', 'divisor', 'reference'): | ||
|
r328 | clock_data[label] = value | |
else: | |||
conf_data[label] = value | |||
|
r45 | continue | |
|
r172 | ||
elif label.split('|')[0]!='-1': | |||
|
r45 | extras.append(label) | |
|
r172 | continue | |
|
r338 | ||
|
r172 | x, pk, name = label.split('|') | |
|
r79 | if name=='codes': | |
value = [s for s in value.split('\r\n') if s] | |||
|
r172 | ||
|
r45 | if pk in line_data: | |
line_data[pk][name] = value | |||
else: | |||
line_data[pk] = {name:value} | |||
r345 | |||
r346 | form = USRPRXConfigurationForm(conf_data, instance=conf) | ||
|
r45 | ||
r345 | if form.is_valid(): | ||
|
r23 | form.save() | |
|
r172 | ||
r348 | messages.success(request, 'USRP Rx configuration successfully updated') | ||
|
r172 | ||
return redirect(conf.get_absolute_url()) | |||
|
r23 | kwargs = {} | |
|
r25 | kwargs['dev_conf'] = conf | |
|
r23 | kwargs['form'] = form | |
|
r45 | kwargs['edit'] = True | |
|
r172 | ||
r346 | kwargs['title'] = 'USRP Rx Configuration' | ||
|
r172 | kwargs['suptitle'] = 'Edit' | |
|
r23 | kwargs['button'] = 'Update' | |
|
r172 | ||
r345 | return render(request, 'usrp_rx_conf_edit.html', kwargs) | ||
|
r23 | ||
|
r45 | def import_file(request, conf_id): | |
|
r172 | ||
r346 | conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) | ||
|
r45 | if request.method=='POST': | |
r346 | form = USRPRXImportForm(request.POST, request.FILES) | ||
|
r172 | if form.is_valid(): | |
|
r121 | try: | |
|
r264 | data = conf.import_from_file(request.FILES['file_name']) | |
conf.dict_to_parms(data) | |||
conf.update_pulses() | |||
|
r45 | messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name']) | |
|
r111 | return redirect(conf.get_absolute_url_edit()) | |
|
r172 | ||
except Exception as e: | |||
|
r264 | messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], repr(e))) | |
|
r45 | else: | |
messages.warning(request, 'Your current configuration will be replaced') | |||
r346 | form = USRPRXImportForm() | ||
|
r172 | ||
|
r45 | kwargs = {} | |
kwargs['form'] = form | |||
r346 | kwargs['title'] = 'USRP Rx Configuration' | ||
|
r45 | kwargs['suptitle'] = 'Import file' | |
kwargs['button'] = 'Upload' | |||
kwargs['previous'] = conf.get_absolute_url() | |||
|
r172 | ||
r346 | return render(request, 'usrp_rx_import.html', kwargs) | ||
|
r316 | ||
def conf_raw(request, conf_id): | |||
r346 | conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) | ||
|
r316 | raw = conf.write_device(raw=True) | |
return HttpResponse(raw, content_type='application/json') |