##// END OF EJS Templates
Task #487: Vista de Operation...
Task #487: Vista de Operation git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@99 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r45:f516e8aeadc3
r78:9f9aafc9f148
Show More
forms.py
222 lines | 8.5 KiB | text/x-python | PythonLexer
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 import os
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
def create_choices_from_model(model, conf_id):
if model=='RCLine':
instance = RCConfiguration.objects.get(pk=conf_id)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 choices = instance.get_refs_lines()
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')
return add_empty_choice(choices, label='All')
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:
raise forms.ValidationError('Not allowed filetype: %s' % ext)
class KmUnitWidget(forms.widgets.TextInput):
def render(self, name, value, attrs=None):
if isinstance(value, (int, float)):
unit = int(value*attrs['line'].km2unit)
elif isinstance(value, basestring):
units = []
values = [s for s in value.split(',') if s]
for val in values:
units.append('{0:.0f}'.format(float(val)*attrs['line'].km2unit))
unit = ','.join(units)
html = '<div class="col-md-4"><input disabled type="text" class="form-control" id="id_{0}" value="{1}"></div><div class="col-md-1">Km</div><div class="col-md-4"><input disabled type="text" class="form-control" value="{2}"></div><div class="col-md-1">Units</div>'.format(name, value, unit)
return mark_safe(html)
class DefaultWidget(forms.widgets.TextInput):
def render(self, name, value, attrs=None):
html = '<div class="col-md-4"><input disabled type="text" class="form-control" id="id_{0}" value="{1}"></div>'.format(name, value)
return mark_safe(html)
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')
self.fields['experiment'].widget.attrs['readonly'] = True
self.fields['experiment'].widget.choices = [(instance.experiment.id, instance.experiment)]
self.fields['device'].widget.choices = [(device.id, device) for device in devices]
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 models, views, templates & statics...
r45
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)
if 'initial'in kwargs:
for item in self.extra_fields:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if item['name']=='params':
continue
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 if 'model' in item:
self.fields[item['name']] = forms.ChoiceField(choices=create_choices_from_model(item['model'],
kwargs['initial']['rc_configuration']))
else:
self.fields[item['name']] = forms.CharField(initial=item['value'])
Juan C. Espinoza
Add rc config mods...
r23 class Meta:
model = RCLine
fields = ('rc_configuration', 'line_type', 'channel')
widgets = {
'channel': forms.HiddenInput(),
}
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
Updates to models, views & forms for CR...
r25 for item in self.extra_fields:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if item['name']=='params':
params['params'] = []
else:
params[item['name']] = self.data[item['name']]
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):
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 models, views, templates & statics...
r45 print line
Juan C. Espinoza
Add rc config mods...
r23 for label, value in extra_fields.items():
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
Updates to models, views & forms for CR...
r25 elif 'code' in label:
value = RCLineCode.objects.get(pk=value).name
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 self.fields[label] = forms.CharField(initial=value)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if subform:
params = json.loads(line.line_type.params)['params']
else:
params = json.loads(line.line_type.params)
if 'widget' in params[label]:
if params[label]['widget']=='km':
self.fields[label].widget = KmUnitWidget(attrs={'line':line})
else:
self.fields[label].widget = DefaultWidget()
class RCLineEditForm(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(RCLineEditForm, self).__init__(*args, **kwargs)
if 'initial'in kwargs:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 for item, values in self.extra_fields.items():
if item=='params':
continue
if 'help' in values:
help_text = values['help']
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 else:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 help_text = ''
if 'model' in values:
self.fields[item] = forms.ChoiceField(choices=create_choices_from_model(values['model'], kwargs['initial']['rc_configuration']),
initial=values['value'],
widget=forms.Select(attrs={'name':'%s|%s' % (kwargs['initial']['line'], item)}),
help_text=help_text)
else:
self.fields[item] = forms.CharField(initial=values['value'],
widget=forms.TextInput(attrs={'name':'%s|%s' % (kwargs['initial']['line'], item)}),
help_text=help_text)
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
Updates to models, views & forms for CR...
r25