mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	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
This commit is contained in:
		
							parent
							
								
									047bec1288
								
							
						
					
					
						commit
						21bb21b65b
					
				| 
						 | 
					@ -169,6 +169,21 @@ else:
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if django.VERSION >= (5, 1):
 | 
				
			||||||
 | 
					    # Django 5.1+: use the stock ip_address_validators function
 | 
				
			||||||
 | 
					    # Note: Before Django 5.1, ip_address_validators returns a tuple containing
 | 
				
			||||||
 | 
					    #       1) the list of validators and 2) the error message. Starting from
 | 
				
			||||||
 | 
					    #       Django 5.1 ip_address_validators only returns the list of validators
 | 
				
			||||||
 | 
					    from django.core.validators import ip_address_validators
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    # Django <= 5.1: 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
 | 
					# `separators` argument to `json.dumps()` differs between 2.x and 3.x
 | 
				
			||||||
# See: https://bugs.python.org/issue22767
 | 
					# See: https://bugs.python.org/issue22767
 | 
				
			||||||
SHORT_SEPARATORS = (',', ':')
 | 
					SHORT_SEPARATORS = (',', ':')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ from django.core.exceptions import ValidationError as DjangoValidationError
 | 
				
			||||||
from django.core.validators import (
 | 
					from django.core.validators import (
 | 
				
			||||||
    EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator,
 | 
					    EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator,
 | 
				
			||||||
    MinValueValidator, ProhibitNullCharactersValidator, RegexValidator,
 | 
					    MinValueValidator, ProhibitNullCharactersValidator, RegexValidator,
 | 
				
			||||||
    URLValidator, ip_address_validators
 | 
					    URLValidator
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
from django.forms import FilePathField as DjangoFilePathField
 | 
					from django.forms import FilePathField as DjangoFilePathField
 | 
				
			||||||
from django.forms import ImageField as DjangoImageField
 | 
					from django.forms import ImageField as DjangoImageField
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@ except ImportError:
 | 
				
			||||||
    pytz = None
 | 
					    pytz = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from rest_framework import ISO_8601
 | 
					from rest_framework import ISO_8601
 | 
				
			||||||
 | 
					from rest_framework.compat import ip_address_validators
 | 
				
			||||||
from rest_framework.exceptions import ErrorDetail, ValidationError
 | 
					from rest_framework.exceptions import ErrorDetail, ValidationError
 | 
				
			||||||
from rest_framework.settings import api_settings
 | 
					from rest_framework.settings import api_settings
 | 
				
			||||||
from rest_framework.utils import html, humanize_datetime, json, representation
 | 
					from rest_framework.utils import html, humanize_datetime, json, representation
 | 
				
			||||||
| 
						 | 
					@ -866,7 +867,7 @@ class IPAddressField(CharField):
 | 
				
			||||||
        self.protocol = protocol.lower()
 | 
					        self.protocol = protocol.lower()
 | 
				
			||||||
        self.unpack_ipv4 = (self.protocol == 'both')
 | 
					        self.unpack_ipv4 = (self.protocol == 'both')
 | 
				
			||||||
        super().__init__(**kwargs)
 | 
					        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)
 | 
					        self.validators.extend(validators)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def to_internal_value(self, data):
 | 
					    def to_internal_value(self, data):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user