##// END OF EJS Templates
Task #487: Operation. Views: radar_play y radar_stop. Models: RunningExperiment. Attributes: status. Methods: get_status(), status_color()...
Task #487: Operation. Views: radar_play y radar_stop. Models: RunningExperiment. Attributes: status. Methods: get_status(), status_color() git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@105 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r79:46ff8f6d35d9
r84:9dc5446d0d71
Show More
forms.py
335 lines | 14.0 KiB | text/x-python | PythonLexer
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 import os
Juan C. Espinoza
- Update rc app...
r79 import ast
Juan C. Espinoza
Add rc config mods...
r23 import json
Miguel Urco
Campaign has been added to RadarSys Model...
r13 from django import forms
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 from django.utils.safestring import mark_safe
from apps.main.models import Device
from apps.main.forms import add_empty_choice
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 from .models import RCConfiguration, RCLine, RCLineType, RCLineCode
Juan C. Espinoza
- Update rc app...
r79 from .widgets import KmUnitWidget, KmUnitHzWidget, KmUnitDcWidget, UnitKmWidget, DefaultWidget, CodesWidget, HiddenWidget
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
- Update rc app...
r79 def create_choices_from_model(model, conf_id, all=False):
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
if model=='RCLine':
instance = RCConfiguration.objects.get(pk=conf_id)
Juan C. Espinoza
- Update rc app...
r79 choices = [(line.pk, line.get_name()) for line in instance.get_lines(type='tx')]
choices = add_empty_choice(choices, label='All')
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 else:
instance = globals()[model]
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 choices = instance.objects.all().values_list('pk', 'name')
Juan C. Espinoza
- Update rc app...
r79 return choices
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
class ExtFileField(forms.FileField):
"""
Same as forms.FileField, but you can specify a file extension whitelist.
>>> from django.core.files.uploadedfile import SimpleUploadedFile
>>>
>>> t = ExtFileField(ext_whitelist=(".pdf", ".txt"))
>>>
>>> t.clean(SimpleUploadedFile('filename.pdf', 'Some File Content'))
>>> t.clean(SimpleUploadedFile('filename.txt', 'Some File Content'))
>>>
>>> t.clean(SimpleUploadedFile('filename.exe', 'Some File Content'))
Traceback (most recent call last):
...
ValidationError: [u'Not allowed filetype!']
"""
def __init__(self, *args, **kwargs):
extensions = kwargs.pop("extensions")
self.extensions = [i.lower() for i in extensions]
super(ExtFileField, self).__init__(*args, **kwargs)
def clean(self, *args, **kwargs):
data = super(ExtFileField, self).clean(*args, **kwargs)
filename = data.name
ext = os.path.splitext(filename)[1]
ext = ext.lower()
if ext not in self.extensions:
Juan C. Espinoza
- Update rc app...
r79 raise forms.ValidationError('Not allowed file type: %s' % ext)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Miguel Urco
Campaign has been added to RadarSys Model...
r13 class RCConfigurationForm(forms.ModelForm):
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def __init__(self, *args, **kwargs):
super(RCConfigurationForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
devices = Device.objects.filter(device_type__name='rc')
Juan C. Espinoza
- Update rc app...
r79 if instance.experiment:
self.fields['experiment'].widget.attrs['readonly'] = True
self.fields['experiment'].widget.choices = [(instance.experiment.id, instance.experiment)]
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 self.fields['device'].widget.choices = [(device.id, device) for device in devices]
Juan C. Espinoza
- Update rc app...
r79 self.fields['ipp'].widget = KmUnitHzWidget(attrs={'km2unit':instance.km2unit})
self.fields['clock'].widget.attrs['readonly'] = True
self.fields['time_before'].label = mark_safe(self.fields['time_before'].label)
self.fields['time_after'].label = mark_safe(self.fields['time_after'].label)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Miguel Urco
Campaign has been added to RadarSys Model...
r13 class Meta:
model = RCConfiguration
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 exclude = ('type', 'parameters', 'status')
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
- Update rc app...
r79 def clean(self):
form_data = super(RCConfigurationForm, self).clean()
if 'clock_divider' in form_data:
if form_data['clock_divider']<1:
self.add_error('clock_divider', 'Invalid Value')
else:
if form_data['ipp']*(20./3*(form_data['clock_in']/form_data['clock_divider']))%10<>0:
self.add_error('ipp', 'Invalid IPP units={}'.format(form_data['ipp']*(20./3*(form_data['clock_in']/form_data['clock_divider']))))
return form_data
Juan C. Espinoza
Add rc config mods...
r23
class RCLineForm(forms.ModelForm):
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 def __init__(self, *args, **kwargs):
self.extra_fields = kwargs.pop('extra_fields', [])
super(RCLineForm, self).__init__(*args, **kwargs)
Juan C. Espinoza
- Update rc app...
r79
if 'initial' in kwargs and 'line_type' in kwargs['initial']:
line_type = RCLineType.objects.get(pk=kwargs['initial']['line_type'])
if 'code_id' in kwargs['initial']:
model_initial = kwargs['initial']['code_id']
else:
model_initial = 0
params = json.loads(line_type.params)
for label, value in self.extra_fields.items():
if label=='params':
continue
if 'model' in params[label]:
self.fields[label] = forms.ChoiceField(choices=create_choices_from_model(params[label]['model'],
kwargs['initial']['rc_configuration']),
initial=model_initial)
else:
if label=='codes' and 'code_id' in kwargs['initial']:
self.fields[label] = forms.CharField(initial=RCLineCode.objects.get(pk=kwargs['initial']['code_id']).codes)
else:
self.fields[label] = forms.CharField(initial=value['value'])
if label=='codes':
self.fields[label].widget = CodesWidget()
if self.data:
line_type = RCLineType.objects.get(pk=self.data['line_type'])
if 'code_id' in self.data:
model_initial = self.data['code_id']
else:
model_initial = 0
params = json.loads(line_type.params)
for label, value in self.extra_fields.items():
if label=='params':
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 continue
Juan C. Espinoza
- Update rc app...
r79
if 'model' in params[label]:
self.fields[label] = forms.ChoiceField(choices=create_choices_from_model(params[label]['model'],
self.data['rc_configuration']),
initial=model_initial)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 else:
Juan C. Espinoza
- Update rc app...
r79 if label=='codes' and 'code' in self.data:
self.fields[label] = forms.CharField(initial=self.data['codes'])
else:
self.fields[label] = forms.CharField(initial=self.data[label])
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
- Update rc app...
r79 if label=='codes':
self.fields[label].widget = CodesWidget()
Juan C. Espinoza
Add rc config mods...
r23 class Meta:
model = RCLine
fields = ('rc_configuration', 'line_type', 'channel')
widgets = {
'channel': forms.HiddenInput(),
}
Juan C. Espinoza
- Update rc app...
r79
def clean(self):
form_data = self.cleaned_data
if 'code' in self.data and self.data['TX_ref']=="0":
self.add_error('TX_ref', 'Choose a valid TX reference')
return form_data
Juan C. Espinoza
Add rc config mods...
r23 def save(self):
line = super(RCLineForm, self).save()
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Add rc config mods...
r23 #auto add channel
line.channel = RCLine.objects.filter(rc_configuration=line.rc_configuration).count()-1
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Add rc config mods...
r23 #auto add position for TX, TR & CODE
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if line.line_type.name in ('tx', ):
Juan C. Espinoza
Add rc config mods...
r23 line.position = RCLine.objects.filter(rc_configuration=line.rc_configuration, line_type=line.line_type).count()-1
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
#save extra fields in params
Juan C. Espinoza
Add rc config mods...
r23 params = {}
Juan C. Espinoza
- Update rc app...
r79 for label, value in self.extra_fields.items():
if label=='params':
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 params['params'] = []
Juan C. Espinoza
- Update rc app...
r79 elif label=='codes':
params[label] = [s for s in self.data[label].split('\r\n') if s]
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 else:
Juan C. Espinoza
- Update rc app...
r79 params[label] = self.data[label]
Juan C. Espinoza
Add rc config mods...
r23 line.params = json.dumps(params)
line.save()
return
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
Add rc config mods...
r23 class RCLineViewForm(forms.Form):
def __init__(self, *args, **kwargs):
Juan C. Espinoza
- Update rc app...
r79
Juan C. Espinoza
Add rc config mods...
r23 extra_fields = kwargs.pop('extra_fields')
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 line = kwargs.pop('line')
subform = kwargs.pop('subform', False)
Juan C. Espinoza
Add rc config mods...
r23 super(RCLineViewForm, self).__init__(*args, **kwargs)
Juan C. Espinoza
- Update rc app...
r79
if subform:
params = json.loads(line.line_type.params)['params']
else:
params = json.loads(line.line_type.params)
Juan C. Espinoza
Add rc config mods...
r23 for label, value in extra_fields.items():
Juan C. Espinoza
- Update rc app...
r79
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if label=='params':
continue
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 if 'ref' in label:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if value in (0, '0'):
value = 'All'
else:
value = RCLine.objects.get(pk=value).get_name()
Juan C. Espinoza
- Update rc app...
r79 elif label=='code':
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 value = RCLineCode.objects.get(pk=value).name
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
- Update rc app...
r79 self.fields[label] = forms.CharField(initial=value)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
if 'widget' in params[label]:
Juan C. Espinoza
- Update rc app...
r79 km2unit = line.rc_configuration.km2unit
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if params[label]['widget']=='km':
Juan C. Espinoza
- Update rc app...
r79 self.fields[label].widget = KmUnitWidget(attrs={'line':line, 'km2unit':km2unit, 'disabled':True})
elif params[label]['widget']=='unit':
self.fields[label].widget = UnitKmWidget(attrs={'line':line, 'km2unit':km2unit, 'disabled':True})
elif params[label]['widget']=='dc':
self.fields[label].widget = KmUnitDcWidget(attrs={'line':line, 'km2unit':km2unit, 'disabled':True})
elif params[label]['widget']=='codes':
self.fields[label].widget = CodesWidget(attrs={'line':line, 'km2unit':km2unit, 'disabled':True})
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 else:
Juan C. Espinoza
- Update rc app...
r79 self.fields[label].widget = DefaultWidget(attrs={'disabled':True})
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
class RCLineEditForm(forms.ModelForm):
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
def __init__(self, *args, **kwargs):
Juan C. Espinoza
- Update rc app...
r79
extra_fields = kwargs.pop('extra_fields', [])
conf = kwargs.pop('conf', False)
line = kwargs.pop('line')
subform = kwargs.pop('subform', False)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 super(RCLineEditForm, self).__init__(*args, **kwargs)
Juan C. Espinoza
- Update rc app...
r79
if subform is not False:
params = json.loads(line.line_type.params)['params']
count = subform
else:
params = json.loads(line.line_type.params)
count = -1
for label, value in extra_fields.items():
if label in ('params',):
continue
if 'help' in params[label]:
help_text = params[label]['help']
else:
help_text = ''
if 'model' in params[label]:
self.fields[label] = forms.ChoiceField(choices=create_choices_from_model(params[label]['model'], conf.id),
initial=value,
widget=forms.Select(attrs={'name':'%s|%s|%s' % (count, line.id, label)}),
help_text=help_text)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
- Update rc app...
r79 else:
self.fields[label] = forms.CharField(initial=value, help_text=help_text)
if label in ('code', ):
self.fields[label].widget = HiddenWidget(attrs={'name':'%s|%s|%s' % (count, line.id, label)})
elif 'widget' in params[label]:
km2unit = line.rc_configuration.km2unit
if params[label]['widget']=='km':
self.fields[label].widget = KmUnitWidget(attrs={'line':line, 'km2unit':km2unit, 'name':'%s|%s|%s' % (count, line.id, label)})
elif params[label]['widget']=='unit':
self.fields[label].widget = UnitKmWidget(attrs={'line':line, 'km2unit':km2unit, 'name':'%s|%s|%s' % (count, line.id, label)})
elif params[label]['widget']=='dc':
self.fields[label].widget = KmUnitDcWidget(attrs={'line':line, 'km2unit':km2unit, 'name':'%s|%s|%s' % (count, line.id, label)})
elif params[label]['widget']=='codes':
self.fields[label].widget = CodesWidget(attrs={'line':line, 'km2unit':km2unit, 'name':'%s|%s|%s' % (count, line.id, label)})
else:
self.fields[label].widget = DefaultWidget(attrs={'name':'%s|%s|%s' % (count, line.id, label)})
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 class Meta:
model = RCLine
exclude = ('rc_configuration', 'line_type', 'channel', 'position', 'params', 'pulses')
class RCSubLineEditForm(forms.Form):
def __init__(self, *args, **kwargs):
extra_fields = kwargs.pop('extra_fields')
count = kwargs.pop('count')
line = kwargs.pop('line')
super(RCSubLineEditForm, self).__init__(*args, **kwargs)
for label, value in extra_fields.items():
self.fields[label] = forms.CharField(initial=value,
widget=forms.TextInput(attrs={'name':'%s|%s|%s' % (count, line, label)}))
class RCImportForm(forms.Form):
file_name = ExtFileField(extensions=['.racp', '.json', '.dat'])
Juan C. Espinoza
- Update rc app...
r79
class RCLineCodesForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(RCLineCodesForm, self).__init__(*args, **kwargs)
if 'initial' in kwargs:
self.fields['code'] = forms.ChoiceField(choices=RCLineCode.objects.all().values_list('pk', 'name'),
initial=kwargs['initial']['code'])
if 'instance' in kwargs:
self.fields['code'] = forms.ChoiceField(choices=RCLineCode.objects.all().values_list('pk', 'name'),
initial=kwargs['instance'].pk)
self.fields['codes'].widget = CodesWidget()
class Meta:
model = RCLineCode
exclude = ('name',)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25