import json from django.contrib import messages from django.utils.safestring import mark_safe from django.shortcuts import render, redirect, get_object_or_404, HttpResponse from django.contrib.auth.decorators import login_required from apps.main.models import Experiment, Device from apps.main.views import sidebar from .models import USRPRXConfiguration from .forms import USRPRXConfigurationForm, USRPRXImportForm def conf(request, conf_id): conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) kwargs = {} kwargs['dev_conf'] = conf kwargs['dev_conf_keys'] = ['ip_address_rx', 'daughterboard_rx', 'antenna_rx', 'samplerate_rx', 'frequency_rx', 'datadir', 'clocksource', 'timesource', 'clockrate'] kwargs['title'] = 'Configuration' kwargs['suptitle'] = 'Detail' kwargs['button'] = 'Edit Configuration' conf.status_device() ###### SIDEBAR ###### kwargs.update(sidebar(conf=conf)) return render(request, 'usrp_rx_conf.html', kwargs) @login_required def conf_edit(request, conf_id): conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) if request.method=='GET': form = USRPRXConfigurationForm(instance=conf) elif request.method=='POST': line_data = {} conf_data = {} clock_data = {} extras = [] #classified post fields for label,value in request.POST.items(): if label=='csrfmiddlewaretoken': continue if label.count('|')==0: if label in ('mode', 'multiplier', 'divisor', 'reference'): clock_data[label] = value else: conf_data[label] = value continue elif label.split('|')[0]!='-1': extras.append(label) continue x, pk, name = label.split('|') if name=='codes': value = [s for s in value.split('\r\n') if s] if pk in line_data: line_data[pk][name] = value else: line_data[pk] = {name:value} form = USRPRXConfigurationForm(conf_data, instance=conf) if form.is_valid(): form.save() messages.success(request, 'USRP Rx configuration successfully updated') return redirect(conf.get_absolute_url()) kwargs = {} kwargs['dev_conf'] = conf kwargs['form'] = form kwargs['edit'] = True kwargs['title'] = 'USRP Rx Configuration' kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Update' return render(request, 'usrp_rx_conf_edit.html', kwargs) def import_file(request, conf_id): conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) if request.method=='POST': form = USRPRXImportForm(request.POST, request.FILES) if form.is_valid(): try: data = conf.import_from_file(request.FILES['file_name']) conf.dict_to_parms(data) conf.update_pulses() 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'], repr(e))) else: messages.warning(request, 'Your current configuration will be replaced') form = USRPRXImportForm() kwargs = {} kwargs['form'] = form kwargs['title'] = 'USRP Rx Configuration' kwargs['suptitle'] = 'Import file' kwargs['button'] = 'Upload' kwargs['previous'] = conf.get_absolute_url() return render(request, 'usrp_rx_import.html', kwargs) def conf_raw(request, conf_id): conf = get_object_or_404(USRPRXConfiguration, pk=conf_id) raw = conf.write_device(raw=True) return HttpResponse(raw, content_type='application/json')