Skip to content

Commit

Permalink
Fix use of ip_address_validators for Django 5.0+
Browse files Browse the repository at this point in the history
  • Loading branch information
kiendang committed Dec 4, 2023
1 parent 0abb84f commit 60f90f8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
15 changes: 15 additions & 0 deletions rest_framework/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,21 @@ def parse_header_parameters(line):
}


if django.VERSION >= (5, 0):
# Django 5.0+: use the stock ip_address_validators function
# Note: Before Django 5.0, ip_address_validators returns a tuple containing
# 1) the list of validators and 2) the error message. Starting from
# Django 5.0 ip_address_validators only returns the list of validators
from django.core.validators import ip_address_validators
else:
# Django <= 5.0: create a compatibility shim for ip_address_validators
from django.core.validators import \
ip_address_validators as _ip_address_validators

def ip_address_validators(protocol, unpack_ipv4):
return _ip_address_validators(protocol, unpack_ipv4)[0]


# `separators` argument to `json.dumps()` differs between 2.x and 3.x
# See: https://bugs.python.org/issue22767
SHORT_SEPARATORS = (',', ':')
Expand Down
5 changes: 3 additions & 2 deletions rest_framework/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from django.core.validators import (
EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator,
MinValueValidator, ProhibitNullCharactersValidator, RegexValidator,
URLValidator, ip_address_validators
URLValidator
)
from django.forms import FilePathField as DjangoFilePathField
from django.forms import ImageField as DjangoImageField
Expand All @@ -36,6 +36,7 @@
pytz = None

from rest_framework import ISO_8601
from rest_framework.compat import ip_address_validators
from rest_framework.exceptions import ErrorDetail, ValidationError
from rest_framework.settings import api_settings
from rest_framework.utils import html, humanize_datetime, json, representation
Expand Down Expand Up @@ -866,7 +867,7 @@ def __init__(self, protocol='both', **kwargs):
self.protocol = protocol.lower()
self.unpack_ipv4 = (self.protocol == 'both')
super().__init__(**kwargs)
validators, error_message = ip_address_validators(protocol, self.unpack_ipv4)
validators = ip_address_validators(protocol, self.unpack_ipv4)
self.validators.extend(validators)

def to_internal_value(self, data):
Expand Down

0 comments on commit 60f90f8

Please sign in to comment.