import ast import json from django import forms from django.utils.safestring import mark_safe class KmUnitWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): if isinstance(value, (int, float)): unit = int(value*attrs['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['km2unit'])) unit = ','.join(units) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}'.format(attrs['line'].pk) html = '
Km
Units
'.format(disabled, label, name, value, disabled, label, unit) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class UnitKmWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): if isinstance(value, (int, float)): km = value/attrs['km2unit'] elif isinstance(value, basestring): kms = [] values = [s for s in value.split(',') if s] for val in values: kms.append('{0:.0f}'.format(float(val)/attrs['km2unit'])) km = ','.join(kms) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}'.format(attrs['line'].pk) html = '''
Units
Km
'''.format(disabled, label, name, value, disabled, label, km) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class KmUnitHzWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): unit = float(value)*attrs['km2unit'] if unit%10==0: unit = int(unit) hz = 150000*float(value)**-1 disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}'.format(attrs['line'].pk) html = '''
Km
Units
Hz
'''.format(disabled, label, name, value, disabled, unit, hz) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class KmUnitDcWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): unit = int(float(value)*attrs['km2unit']) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) label += '_{0}'.format(attrs['line'].pk) dc = float(json.loads(attrs['line'].params)['pulse_width'])*attrs['line'].rc_configuration.ipp/100 html = '''
Km
Units
DC[%]
'''.format(disabled, label, name, value, disabled, unit, dc) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class DefaultWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) html = '
'.format(disabled, label, name, value) return mark_safe(html) class HiddenWidget(forms.widgets.HiddenInput): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' name = self.attrs.get('name', label) html = ''.format(disabled, label, name, value) return mark_safe(html) class CodesWidget(forms.widgets.Textarea): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if '[' in value: value = ast.literal_eval(value) if isinstance(value, list): codes = '\r\n'.join(value) else: codes = value html = ''.format(disabled, label, name, codes) return mark_safe(html)