You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.2 KiB
36 lines
1.2 KiB
from django.forms import CharField
|
|
from django.forms.widgets import TextInput
|
|
from django.core.validators import RegexValidator, _lazy_re_compile
|
|
from django.forms.fields import EMPTY_VALUES
|
|
from django.forms.utils import ValidationError
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from netaddr import EUI, AddrFormatError
|
|
|
|
|
|
mac_address_validator = RegexValidator(
|
|
_lazy_re_compile(r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'),
|
|
message=_('Enter a valid integer.'),
|
|
code='invalid',
|
|
)
|
|
|
|
|
|
class MACAddressField(CharField):
|
|
widget = TextInput
|
|
default_validators = [mac_address_validator]
|
|
default_error_messages = {
|
|
'invalid': _('Enter a valid MAC Address.'),
|
|
}
|
|
|
|
def clean(self, value):
|
|
"""
|
|
Validates that EUI() can be called on the input. Returns the result
|
|
of EUI(). Returns None for empty values.
|
|
"""
|
|
value = super(MACAddressField, self).clean(value)
|
|
if value in EMPTY_VALUES:
|
|
return None
|
|
try:
|
|
value = EUI(str(value), version=48)
|
|
except (ValueError, TypeError, AddrFormatError):
|
|
raise ValidationError(self.error_messages['invalid'])
|
|
return value
|