12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- from netaddr import IPAddress, IPNetwork, EUI, AddrFormatError
- from django import forms
- from django.utils.encoding import force_unicode
- from django.utils.safestring import mark_safe
- from django.core.exceptions import ValidationError
- from netfields.mac import mac_unix_common
- class NetInput(forms.Widget):
- input_type = 'text'
- def render(self, name, value, attrs=None):
-
- if value is None:
- value = ''
- final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
- if value:
- final_attrs['value'] = force_unicode(value)
- return mark_safe(u'<input%s />' % forms.util.flatatt(final_attrs))
- class InetAddressFormField(forms.Field):
- widget = NetInput
- default_error_messages = {
- 'invalid': u'Enter a valid IP Address.',
- }
- def __init__(self, *args, **kwargs):
- super(InetAddressFormField, self).__init__(*args, **kwargs)
- def to_python(self, value):
- if not value:
- return None
- if isinstance(value, IPAddress):
- return value
- try:
- return IPAddress(value)
- except (AddrFormatError, TypeError), e:
- raise ValidationError(str(e))
- class CidrAddressFormField(forms.Field):
- widget = NetInput
- default_error_messages = {
- 'invalid': u'Enter a valid CIDR Address.',
- }
- def __init__(self, *args, **kwargs):
- super(CidrAddressFormField, self).__init__(*args, **kwargs)
- def to_python(self, value):
- if not value:
- return None
- if isinstance(value, IPNetwork):
- return value
- try:
- return IPNetwork(value)
- except (AddrFormatError, TypeError), e:
- raise ValidationError(str(e))
- class MACAddressFormField(forms.Field):
- default_error_messages = {
- 'invalid': u'Enter a valid MAC address.',
- }
- def __init__(self, *args, **kwargs):
- super(MACAddressFormField, self).__init__(*args, **kwargs)
- def to_python(self, value):
- if not value:
- return None
- if isinstance(value, EUI):
- return value
- try:
- return EUI(value, dialect=mac_unix_common)
- except (AddrFormatError, TypeError):
- raise ValidationError(self.error_messages['invalid'])
- def widget_attrs(self, widget):
- attrs = super(MACAddressFormField, self).widget_attrs(widget)
- attrs.update({'maxlength': '17'})
- return attrs
|