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 RCConfiguration, RCLine, RCLineType, RCLineCode, RCClock from .forms import RCConfigurationForm, RCLineForm, RCLineViewForm, RCLineEditForm, RCImportForm, RCLineCodesForm, RCClockForm def conf(request, conf_id): conf = get_object_or_404(RCConfiguration, pk=conf_id) lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel') clk = RCClock.objects.filter(rc_configuration=conf).first() if clk is None: clk = RCClock(rc_configuration=conf) clk.save() 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['clock'] = clk kwargs['dev_conf'] = conf kwargs['rc_lines'] = lines kwargs['dev_conf_keys'] = ['ipp_unit', 'ntx', 'clock_divider', 'clock', 'time_before', 'time_after', 'sync', 'sampling_reference', 'control_tx', 'control_sw'] kwargs['title'] = 'Configuration' kwargs['suptitle'] = 'Detail' kwargs['button'] = 'Edit Configuration' ###### SIDEBAR ###### kwargs.update(sidebar(conf=conf)) return render(request, 'rc_conf.html', kwargs) @login_required def conf_edit(request, conf_id): conf = get_object_or_404(RCConfiguration, pk=conf_id) clock = RCClock.objects.get(rc_configuration=conf) lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel') for line in lines: params = json.loads(line.params) #print(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 print(params) print("fin de sub carga de params") #print("fin de carga de params") if request.method=='GET': print("GET case") form = RCConfigurationForm(instance=conf) form_clock = RCClockForm(instance=clock) elif request.method=='POST': #print("ingreso a post conf edit") line_data = {} conf_data = {} clock_data = {} extras = [] print("Inicio impresion POST#####") print(request.POST.items) print("Fin impresion de POST items#####") #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', 'frequency'): clock_data[label] = value else: conf_data[label] = value continue elif label.split('|')[0]!='-1': extras.append(label) continue #print(label) 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} #print(line_data[pk]) #update conf form_clock = RCClockForm(clock_data, instance=clock) form = RCConfigurationForm(conf_data, instance=conf) #print(request.POST.items()) if form_clock.is_valid() and form.is_valid(): form_clock.save() form.save() #update lines fields extras.sort() #print("Inicio extras") #print(extras) #print("Fin extras") 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'])