Skip to content

Commit 21bb21b

Browse files
authored
Fix use of ip_address_validators for Django 5.1+ (#9180)
* Fix use of ip_address_validators for Django 5.0+ * Change affected django version to 5.1
1 parent 047bec1 commit 21bb21b

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

rest_framework/compat.py

+15
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,21 @@ def parse_header_parameters(line):
169169
}
170170

171171

172+
if django.VERSION >= (5, 1):
173+
# Django 5.1+: use the stock ip_address_validators function
174+
# Note: Before Django 5.1, ip_address_validators returns a tuple containing
175+
# 1) the list of validators and 2) the error message. Starting from
176+
# Django 5.1 ip_address_validators only returns the list of validators
177+
from django.core.validators import ip_address_validators
178+
else:
179+
# Django <= 5.1: create a compatibility shim for ip_address_validators
180+
from django.core.validators import \
181+
ip_address_validators as _ip_address_validators
182+
183+
def ip_address_validators(protocol, unpack_ipv4):
184+
return _ip_address_validators(protocol, unpack_ipv4)[0]
185+
186+
172187
# `separators` argument to `json.dumps()` differs between 2.x and 3.x
173188
# See: https://bugs.python.org/issue22767
174189
SHORT_SEPARATORS = (',', ':')

rest_framework/fields.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from django.core.validators import (
1717
EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator,
1818
MinValueValidator, ProhibitNullCharactersValidator, RegexValidator,
19-
URLValidator, ip_address_validators
19+
URLValidator
2020
)
2121
from django.forms import FilePathField as DjangoFilePathField
2222
from django.forms import ImageField as DjangoImageField
@@ -36,6 +36,7 @@
3636
pytz = None
3737

3838
from rest_framework import ISO_8601
39+
from rest_framework.compat import ip_address_validators
3940
from rest_framework.exceptions import ErrorDetail, ValidationError
4041
from rest_framework.settings import api_settings
4142
from rest_framework.utils import html, humanize_datetime, json, representation
@@ -866,7 +867,7 @@ def __init__(self, protocol='both', **kwargs):
866867
self.protocol = protocol.lower()
867868
self.unpack_ipv4 = (self.protocol == 'both')
868869
super().__init__(**kwargs)
869-
validators, error_message = ip_address_validators(protocol, self.unpack_ipv4)
870+
validators = ip_address_validators(protocol, self.unpack_ipv4)
870871
self.validators.extend(validators)
871872

872873
def to_internal_value(self, data):

0 commit comments

Comments
 (0)