Move MACAddressField to utilities

This commit is contained in:
jeremystretch 2021-10-28 16:26:31 -04:00
parent 2e0f15b35f
commit 1ce9192369
5 changed files with 26 additions and 28 deletions

View File

@ -1,4 +1,3 @@
from .fields import *
from .models import * from .models import *
from .filtersets import * from .filtersets import *
from .object_create import * from .object_create import *

View File

@ -1,25 +0,0 @@
from django import forms
from netaddr import EUI
from netaddr.core import AddrFormatError
__all__ = (
'MACAddressField',
)
class MACAddressField(forms.Field):
widget = forms.CharField
default_error_messages = {
'invalid': 'MAC address must be in EUI-48 format',
}
def to_python(self, value):
value = super().to_python(value)
# Validate MAC address format
try:
value = EUI(value.strip())
except AddrFormatError:
raise forms.ValidationError(self.error_messages['invalid'], code='invalid')
return value

View File

@ -5,7 +5,6 @@ from django.db import models
from django_filters.exceptions import FieldLookupError from django_filters.exceptions import FieldLookupError
from django_filters.utils import get_model_field, resolve_field from django_filters.utils import get_model_field, resolve_field
from dcim.forms import MACAddressField
from extras.choices import CustomFieldFilterLogicChoices from extras.choices import CustomFieldFilterLogicChoices
from extras.filters import TagFilter from extras.filters import TagFilter
from extras.models import CustomField from extras.models import CustomField
@ -13,6 +12,7 @@ from utilities.constants import (
FILTER_CHAR_BASED_LOOKUP_MAP, FILTER_NEGATION_LOOKUP_MAP, FILTER_TREENODE_NEGATION_LOOKUP_MAP, FILTER_CHAR_BASED_LOOKUP_MAP, FILTER_NEGATION_LOOKUP_MAP, FILTER_TREENODE_NEGATION_LOOKUP_MAP,
FILTER_NUMERIC_BASED_LOOKUP_MAP FILTER_NUMERIC_BASED_LOOKUP_MAP
) )
from utilities.forms import MACAddressField
from utilities import filters from utilities import filters
__all__ = ( __all__ = (

View File

@ -3,7 +3,7 @@ from django import forms
from django.conf import settings from django.conf import settings
from django_filters.constants import EMPTY_VALUES from django_filters.constants import EMPTY_VALUES
from dcim.forms import MACAddressField from utilities.forms import MACAddressField
def multivalue_field_factory(field_class): def multivalue_field_factory(field_class):

View File

@ -2,6 +2,7 @@ import csv
import json import json
import re import re
from io import StringIO from io import StringIO
from netaddr import AddrFormatError, EUI
import django_filters import django_filters
from django import forms from django import forms
@ -38,6 +39,7 @@ __all__ = (
'ExpandableNameField', 'ExpandableNameField',
'JSONField', 'JSONField',
'LaxURLField', 'LaxURLField',
'MACAddressField',
'SlugField', 'SlugField',
'TagFilterField', 'TagFilterField',
) )
@ -129,6 +131,28 @@ class JSONField(_JSONField):
return json.dumps(value, sort_keys=True, indent=4) return json.dumps(value, sort_keys=True, indent=4)
class MACAddressField(forms.Field):
widget = forms.CharField
default_error_messages = {
'invalid': 'MAC address must be in EUI-48 format',
}
def to_python(self, value):
value = super().to_python(value)
# Validate MAC address format
try:
value = EUI(value.strip())
except AddrFormatError:
raise forms.ValidationError(self.error_messages['invalid'], code='invalid')
return value
#
# Content type fields
#
class ContentTypeChoiceMixin: class ContentTypeChoiceMixin:
def __init__(self, queryset, *args, **kwargs): def __init__(self, queryset, *args, **kwargs):