#12278 move IPAddressField to field_serializers

This commit is contained in:
Arthur 2023-04-20 11:17:37 -07:00
parent b96792179d
commit dc888e0ac2
3 changed files with 40 additions and 32 deletions

View File

@ -0,0 +1,38 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from ipam import models
from ipam.validators import validate_ipaddress_with_mask
from netaddr import AddrFormatError, IPNetwork
__all__ = [
'IPAddressField',
]
#
# IP address field
#
class IPAddressField(serializers.CharField):
"""IPAddressField with mask"""
default_error_messages = {
'invalid': _('Enter a valid IPv4 or IPv6 address with optional mask.'),
}
def __init__(self, **kwargs):
super().__init__(**kwargs)
validator = validate_ipaddress_with_mask
self.validators.append(validator)
def to_internal_value(self, data):
try:
return IPNetwork(data)
except AddrFormatError:
raise serializers.ValidationError("Invalid IP address format: {}".format(data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)
def to_representation(self, value):
return str(value)

View File

@ -1,15 +1,12 @@
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema_serializer from drf_spectacular.utils import extend_schema_serializer
from rest_framework import serializers from rest_framework import serializers
from ipam import models from ipam import models
from ipam.models.l2vpn import L2VPNTermination, L2VPN from ipam.models.l2vpn import L2VPNTermination, L2VPN
from ipam.validators import validate_ipaddress_with_mask
from netbox.api.serializers import WritableNestedSerializer from netbox.api.serializers import WritableNestedSerializer
from netaddr import AddrFormatError, IPNetwork from .field_serializers import IPAddressField
__all__ = [ __all__ = [
'IPAddressField',
'NestedAggregateSerializer', 'NestedAggregateSerializer',
'NestedASNSerializer', 'NestedASNSerializer',
'NestedASNRangeSerializer', 'NestedASNRangeSerializer',
@ -31,34 +28,6 @@ __all__ = [
] ]
#
# IP address field
#
class IPAddressField(serializers.CharField):
"""IPAddressField with mask"""
default_error_messages = {
'invalid': _('Enter a valid IPv4 or IPv6 address with optional mask.'),
}
def __init__(self, **kwargs):
super().__init__(**kwargs)
validator = validate_ipaddress_with_mask
self.validators.append(validator)
def to_internal_value(self, data):
try:
return IPNetwork(data)
except AddrFormatError:
raise serializers.ValidationError("Invalid IP address format: {}".format(data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)
def to_representation(self, value):
return str(value)
# #
# ASN ranges # ASN ranges
# #

View File

@ -14,6 +14,7 @@ from tenancy.api.nested_serializers import NestedTenantSerializer
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
from virtualization.api.nested_serializers import NestedVirtualMachineSerializer from virtualization.api.nested_serializers import NestedVirtualMachineSerializer
from .nested_serializers import * from .nested_serializers import *
from .field_serializers import IPAddressField
# #