mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
* 12553 prefix serializer to IPAddress * Introduce IPNetworkField to handle prefix serialization --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from django.utils.translation import gettext_lazy as _
|
|
from rest_framework import serializers
|
|
|
|
from netaddr import AddrFormatError, IPNetwork
|
|
|
|
__all__ = (
|
|
'IPAddressField',
|
|
'IPNetworkField',
|
|
)
|
|
|
|
|
|
class IPAddressField(serializers.CharField):
|
|
"""
|
|
An IPv4 or IPv6 address with optional mask
|
|
"""
|
|
default_error_messages = {
|
|
'invalid': _('Enter a valid IPv4 or IPv6 address with optional mask.'),
|
|
}
|
|
|
|
def to_internal_value(self, data):
|
|
try:
|
|
return IPNetwork(data)
|
|
except AddrFormatError:
|
|
raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data))
|
|
except (TypeError, ValueError) as e:
|
|
raise serializers.ValidationError(e)
|
|
|
|
def to_representation(self, value):
|
|
return str(value)
|
|
|
|
|
|
class IPNetworkField(serializers.CharField):
|
|
"""
|
|
An IPv4 or IPv6 prefix
|
|
"""
|
|
default_error_messages = {
|
|
'invalid': _('Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation.'),
|
|
}
|
|
|
|
def to_internal_value(self, data):
|
|
try:
|
|
return IPNetwork(data)
|
|
except AddrFormatError:
|
|
raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data))
|
|
except (TypeError, ValueError) as e:
|
|
raise serializers.ValidationError(e)
|
|
|
|
def to_representation(self, value):
|
|
return str(value)
|