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 Experiment, Device from apps.main.views import sidebar from .models import RCConfiguration, RCLine, RCLineType, RCLineCode from .forms import RCConfigurationForm, RCLineForm, RCLineViewForm, RCLineEditForm, RCImportForm, RCLineCodesForm 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_unit', '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'])