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 apps.main.models import Configuration, Experiment, Device from apps.main.views import sidebar from .models import RCConfiguration, RCLine, RCLineType, RCLineCode from .forms import RCConfigurationForm, RCLineForm, RCLineViewForm, RCLineEditForm, RCImportForm, RCLineCodesForm from .utils import plot_pulses def conf(request, conf_id): conf = get_object_or_404(RCConfiguration, pk=conf_id) lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel') for line in lines: params = json.loads(line.params) line.form = RCLineViewForm(extra_fields=params, line=line) if 'params' in params: line.subforms = [RCLineViewForm(extra_fields=fields, line=line, subform=True) for fields in params['params']] kwargs = {} kwargs['dev_conf'] = conf kwargs['rc_lines'] = lines kwargs['dev_conf_keys'] = ['name', 'ipp', 'ntx', 'clock_in', 'clock_divider', 'clock', 'time_before', 'time_after', 'sync', 'sampling_reference', 'control_tx', 'control_sw'] kwargs['title'] = 'RC Configuration' kwargs['suptitle'] = 'Details' kwargs['button'] = 'Edit Configuration' ###### SIDEBAR ###### kwargs.update(sidebar(conf=conf)) return render(request, 'rc_conf.html', kwargs) def conf_edit(request, conf_id): conf = get_object_or_404(RCConfiguration, pk=conf_id) lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel') for line in lines: params = json.loads(line.params) line.form = RCLineEditForm(conf=conf, line=line, extra_fields=params) line.subform = False if 'params' in params: line.subforms = [RCLineEditForm(extra_fields=fields, line=line, subform=i) for i, fields in enumerate(params['params'])] line.subform = True if request.method=='GET': form = RCConfigurationForm(instance=conf) elif request.method=='POST': line_data = {} conf_data = {} extras = [] #classified post fields for label,value in request.POST.items(): if label=='csrfmiddlewaretoken': continue if label.count('|')==0: 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} #update conf form = RCConfigurationForm(conf_data, instance=conf) if form.is_valid(): form.save() #update lines fields extras.sort() for label in extras: x, pk, name = label.split('|') if pk not in line_data: line_data[pk] = {} if 'params' not in line_data[pk]: line_data[pk]['params'] = [] if len(line_data[pk]['params'])