mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-08 06:14:47 +03:00
Refactor the message generation to delay the formatting.
This commit is contained in:
parent
1ce88beff0
commit
3a4be046bd
|
@ -114,24 +114,11 @@ def get_model_name(model_cls):
|
|||
return model_cls._meta.module_name
|
||||
|
||||
|
||||
|
||||
|
||||
class CustomValidatorMessage(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.message = kwargs.pop('message', self.message)
|
||||
self.format = kwargs.pop('string_format', '%')
|
||||
super(CustomValidatorMessage, self).__init__(*args, **kwargs)
|
||||
|
||||
def __call__(self, value):
|
||||
cleaned = self.clean(value)
|
||||
params = {'limit_value': self.limit_value, 'show_value': cleaned, 'value': value}
|
||||
if self.compare(cleaned, self.limit_value):
|
||||
message = self.message
|
||||
if self.format == '{':
|
||||
args = {self.code: self.limit_value}
|
||||
message = message.format(**args)
|
||||
raise ValidationError(message, code=self.code, params=params)
|
||||
|
||||
|
||||
class MinValueValidator(CustomValidatorMessage, MinValueValidator):
|
||||
pass
|
||||
|
|
|
@ -17,7 +17,7 @@ from django.forms import ImageField as DjangoImageField
|
|||
from django.utils import six, timezone
|
||||
from django.utils.dateparse import parse_date, parse_datetime, parse_time
|
||||
from django.utils.encoding import is_protected_type, smart_text
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.functional import cached_property, lazy
|
||||
from django.utils.ipv6 import clean_ipv6_address
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
@ -675,11 +675,11 @@ class CharField(Field):
|
|||
self.min_length = kwargs.pop('min_length', None)
|
||||
super(CharField, self).__init__(**kwargs)
|
||||
if self.max_length is not None:
|
||||
message = self.error_messages['max_length']
|
||||
self.validators.append(MaxLengthValidator(self.max_length, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['max_length'].format, str)(max_length=self.max_length)
|
||||
self.validators.append(MaxLengthValidator(self.max_length, message=message))
|
||||
if self.min_length is not None:
|
||||
message = self.error_messages['min_length']
|
||||
self.validators.append(MinLengthValidator(self.min_length, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['min_length'].format, str)(min_length=self.min_length)
|
||||
self.validators.append(MinLengthValidator(self.min_length, message=message))
|
||||
|
||||
def run_validation(self, data=empty):
|
||||
# Test for the empty string here so that it does not get validated,
|
||||
|
@ -820,11 +820,11 @@ class IntegerField(Field):
|
|||
self.min_value = kwargs.pop('min_value', None)
|
||||
super(IntegerField, self).__init__(**kwargs)
|
||||
if self.max_value is not None:
|
||||
message = self.error_messages['max_value']
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['max_value'].format, str)(max_value=self.max_value)
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message))
|
||||
if self.min_value is not None:
|
||||
message = self.error_messages['min_value']
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['min_value'].format, str)(min_value=self.min_value)
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message))
|
||||
|
||||
def to_internal_value(self, data):
|
||||
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
|
||||
|
@ -854,11 +854,11 @@ class FloatField(Field):
|
|||
self.min_value = kwargs.pop('min_value', None)
|
||||
super(FloatField, self).__init__(**kwargs)
|
||||
if self.max_value is not None:
|
||||
message = self.error_messages['max_value']
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['max_value'].format, str)(max_value=self.max_value)
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message))
|
||||
if self.min_value is not None:
|
||||
message = self.error_messages['min_value']
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['min_value'].format, str)(min_value=self.min_value)
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message))
|
||||
|
||||
def to_internal_value(self, data):
|
||||
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
|
||||
|
@ -903,11 +903,11 @@ class DecimalField(Field):
|
|||
super(DecimalField, self).__init__(**kwargs)
|
||||
|
||||
if self.max_value is not None:
|
||||
message = self.error_messages['max_value']
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['max_value'].format, str)(max_value=self.max_value)
|
||||
self.validators.append(MaxValueValidator(self.max_value, message=message))
|
||||
if self.min_value is not None:
|
||||
message = self.error_messages['min_value']
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['min_value'].format, str)(min_value=self.min_value)
|
||||
self.validators.append(MinValueValidator(self.min_value, message=message))
|
||||
|
||||
def to_internal_value(self, data):
|
||||
"""
|
||||
|
@ -1606,8 +1606,8 @@ class ModelField(Field):
|
|||
max_length = kwargs.pop('max_length', None)
|
||||
super(ModelField, self).__init__(**kwargs)
|
||||
if max_length is not None:
|
||||
message = self.error_messages['max_length']
|
||||
self.validators.append(MaxLengthValidator(max_length, message=message, string_format='{'))
|
||||
message = lazy(self.error_messages['max_length'].format, str)(max_length=max_length)
|
||||
self.validators.append(MaxLengthValidator(max_length, message=message))
|
||||
|
||||
def to_internal_value(self, data):
|
||||
rel = getattr(self.model_field, 'rel', None)
|
||||
|
|
Loading…
Reference in New Issue
Block a user