mirror of
https://github.com/django/django.git
synced 2025-07-05 02:09:13 +00:00
unicode: Fixed #4152 -- Converted a lot of internal [n]gettext() calls into
u[n]gettext() calls. Thanks, Ivan Sagalaev. git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5082 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
dfc553625d
commit
0da72ff885
@ -10,7 +10,7 @@ form field is required.
|
|||||||
|
|
||||||
import urllib2
|
import urllib2
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import gettext, gettext_lazy, ngettext
|
from django.utils.translation import ugettext, ugettext_lazy, ungettext
|
||||||
from django.utils.functional import Promise, lazy
|
from django.utils.functional import Promise, lazy
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@ -61,30 +61,30 @@ class CriticalValidationError(Exception):
|
|||||||
|
|
||||||
def isAlphaNumeric(field_data, all_data):
|
def isAlphaNumeric(field_data, all_data):
|
||||||
if not alnum_re.search(field_data):
|
if not alnum_re.search(field_data):
|
||||||
raise ValidationError, gettext("This value must contain only letters, numbers and underscores.")
|
raise ValidationError, ugettext("This value must contain only letters, numbers and underscores.")
|
||||||
|
|
||||||
def isAlphaNumericURL(field_data, all_data):
|
def isAlphaNumericURL(field_data, all_data):
|
||||||
if not alnumurl_re.search(field_data):
|
if not alnumurl_re.search(field_data):
|
||||||
raise ValidationError, gettext("This value must contain only letters, numbers, underscores, dashes or slashes.")
|
raise ValidationError, ugettext("This value must contain only letters, numbers, underscores, dashes or slashes.")
|
||||||
|
|
||||||
def isSlug(field_data, all_data):
|
def isSlug(field_data, all_data):
|
||||||
if not slug_re.search(field_data):
|
if not slug_re.search(field_data):
|
||||||
raise ValidationError, gettext("This value must contain only letters, numbers, underscores or hyphens.")
|
raise ValidationError, ugettext("This value must contain only letters, numbers, underscores or hyphens.")
|
||||||
|
|
||||||
def isLowerCase(field_data, all_data):
|
def isLowerCase(field_data, all_data):
|
||||||
if field_data.lower() != field_data:
|
if field_data.lower() != field_data:
|
||||||
raise ValidationError, gettext("Uppercase letters are not allowed here.")
|
raise ValidationError, ugettext("Uppercase letters are not allowed here.")
|
||||||
|
|
||||||
def isUpperCase(field_data, all_data):
|
def isUpperCase(field_data, all_data):
|
||||||
if field_data.upper() != field_data:
|
if field_data.upper() != field_data:
|
||||||
raise ValidationError, gettext("Lowercase letters are not allowed here.")
|
raise ValidationError, ugettext("Lowercase letters are not allowed here.")
|
||||||
|
|
||||||
def isCommaSeparatedIntegerList(field_data, all_data):
|
def isCommaSeparatedIntegerList(field_data, all_data):
|
||||||
for supposed_int in field_data.split(','):
|
for supposed_int in field_data.split(','):
|
||||||
try:
|
try:
|
||||||
int(supposed_int)
|
int(supposed_int)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValidationError, gettext("Enter only digits separated by commas.")
|
raise ValidationError, ugettext("Enter only digits separated by commas.")
|
||||||
|
|
||||||
def isCommaSeparatedEmailList(field_data, all_data):
|
def isCommaSeparatedEmailList(field_data, all_data):
|
||||||
"""
|
"""
|
||||||
@ -96,32 +96,32 @@ def isCommaSeparatedEmailList(field_data, all_data):
|
|||||||
try:
|
try:
|
||||||
isValidEmail(supposed_email.strip(), '')
|
isValidEmail(supposed_email.strip(), '')
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
raise ValidationError, gettext("Enter valid e-mail addresses separated by commas.")
|
raise ValidationError, ugettext("Enter valid e-mail addresses separated by commas.")
|
||||||
|
|
||||||
def isValidIPAddress4(field_data, all_data):
|
def isValidIPAddress4(field_data, all_data):
|
||||||
if not ip4_re.search(field_data):
|
if not ip4_re.search(field_data):
|
||||||
raise ValidationError, gettext("Please enter a valid IP address.")
|
raise ValidationError, ugettext("Please enter a valid IP address.")
|
||||||
|
|
||||||
def isNotEmpty(field_data, all_data):
|
def isNotEmpty(field_data, all_data):
|
||||||
if field_data.strip() == '':
|
if field_data.strip() == '':
|
||||||
raise ValidationError, gettext("Empty values are not allowed here.")
|
raise ValidationError, ugettext("Empty values are not allowed here.")
|
||||||
|
|
||||||
def isOnlyDigits(field_data, all_data):
|
def isOnlyDigits(field_data, all_data):
|
||||||
if not field_data.isdigit():
|
if not field_data.isdigit():
|
||||||
raise ValidationError, gettext("Non-numeric characters aren't allowed here.")
|
raise ValidationError, ugettext("Non-numeric characters aren't allowed here.")
|
||||||
|
|
||||||
def isNotOnlyDigits(field_data, all_data):
|
def isNotOnlyDigits(field_data, all_data):
|
||||||
if field_data.isdigit():
|
if field_data.isdigit():
|
||||||
raise ValidationError, gettext("This value can't be comprised solely of digits.")
|
raise ValidationError, ugettext("This value can't be comprised solely of digits.")
|
||||||
|
|
||||||
def isInteger(field_data, all_data):
|
def isInteger(field_data, all_data):
|
||||||
# This differs from isOnlyDigits because this accepts the negative sign
|
# This differs from isOnlyDigits because this accepts the negative sign
|
||||||
if not integer_re.search(field_data):
|
if not integer_re.search(field_data):
|
||||||
raise ValidationError, gettext("Enter a whole number.")
|
raise ValidationError, ugettext("Enter a whole number.")
|
||||||
|
|
||||||
def isOnlyLetters(field_data, all_data):
|
def isOnlyLetters(field_data, all_data):
|
||||||
if not field_data.isalpha():
|
if not field_data.isalpha():
|
||||||
raise ValidationError, gettext("Only alphabetical characters are allowed here.")
|
raise ValidationError, ugettext("Only alphabetical characters are allowed here.")
|
||||||
|
|
||||||
def _isValidDate(date_string):
|
def _isValidDate(date_string):
|
||||||
"""
|
"""
|
||||||
@ -136,30 +136,30 @@ def _isValidDate(date_string):
|
|||||||
# This check is needed because strftime is used when saving the date
|
# This check is needed because strftime is used when saving the date
|
||||||
# value to the database, and strftime requires that the year be >=1900.
|
# value to the database, and strftime requires that the year be >=1900.
|
||||||
if year < 1900:
|
if year < 1900:
|
||||||
raise ValidationError, gettext('Year must be 1900 or later.')
|
raise ValidationError, ugettext('Year must be 1900 or later.')
|
||||||
try:
|
try:
|
||||||
date(year, month, day)
|
date(year, month, day)
|
||||||
except ValueError, e:
|
except ValueError, e:
|
||||||
msg = gettext('Invalid date: %s') % gettext(str(e))
|
msg = ugettext('Invalid date: %s') % ugettext(str(e))
|
||||||
raise ValidationError, msg
|
raise ValidationError, msg
|
||||||
|
|
||||||
def isValidANSIDate(field_data, all_data):
|
def isValidANSIDate(field_data, all_data):
|
||||||
if not ansi_date_re.search(field_data):
|
if not ansi_date_re.search(field_data):
|
||||||
raise ValidationError, gettext('Enter a valid date in YYYY-MM-DD format.')
|
raise ValidationError, ugettext('Enter a valid date in YYYY-MM-DD format.')
|
||||||
_isValidDate(field_data)
|
_isValidDate(field_data)
|
||||||
|
|
||||||
def isValidANSITime(field_data, all_data):
|
def isValidANSITime(field_data, all_data):
|
||||||
if not ansi_time_re.search(field_data):
|
if not ansi_time_re.search(field_data):
|
||||||
raise ValidationError, gettext('Enter a valid time in HH:MM format.')
|
raise ValidationError, ugettext('Enter a valid time in HH:MM format.')
|
||||||
|
|
||||||
def isValidANSIDatetime(field_data, all_data):
|
def isValidANSIDatetime(field_data, all_data):
|
||||||
if not ansi_datetime_re.search(field_data):
|
if not ansi_datetime_re.search(field_data):
|
||||||
raise ValidationError, gettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
|
raise ValidationError, ugettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
|
||||||
_isValidDate(field_data.split()[0])
|
_isValidDate(field_data.split()[0])
|
||||||
|
|
||||||
def isValidEmail(field_data, all_data):
|
def isValidEmail(field_data, all_data):
|
||||||
if not email_re.search(field_data):
|
if not email_re.search(field_data):
|
||||||
raise ValidationError, gettext('Enter a valid e-mail address.')
|
raise ValidationError, ugettext('Enter a valid e-mail address.')
|
||||||
|
|
||||||
def isValidImage(field_data, all_data):
|
def isValidImage(field_data, all_data):
|
||||||
"""
|
"""
|
||||||
@ -171,22 +171,22 @@ def isValidImage(field_data, all_data):
|
|||||||
try:
|
try:
|
||||||
content = field_data['content']
|
content = field_data['content']
|
||||||
except TypeError:
|
except TypeError:
|
||||||
raise ValidationError, gettext("No file was submitted. Check the encoding type on the form.")
|
raise ValidationError, ugettext("No file was submitted. Check the encoding type on the form.")
|
||||||
try:
|
try:
|
||||||
Image.open(StringIO(content))
|
Image.open(StringIO(content))
|
||||||
except IOError: # Python Imaging Library doesn't recognize it as an image
|
except IOError: # Python Imaging Library doesn't recognize it as an image
|
||||||
raise ValidationError, gettext("Upload a valid image. The file you uploaded was either not an image or a corrupted image.")
|
raise ValidationError, ugettext("Upload a valid image. The file you uploaded was either not an image or a corrupted image.")
|
||||||
|
|
||||||
def isValidImageURL(field_data, all_data):
|
def isValidImageURL(field_data, all_data):
|
||||||
uc = URLMimeTypeCheck(('image/jpeg', 'image/gif', 'image/png'))
|
uc = URLMimeTypeCheck(('image/jpeg', 'image/gif', 'image/png'))
|
||||||
try:
|
try:
|
||||||
uc(field_data, all_data)
|
uc(field_data, all_data)
|
||||||
except URLMimeTypeCheck.InvalidContentType:
|
except URLMimeTypeCheck.InvalidContentType:
|
||||||
raise ValidationError, gettext("The URL %s does not point to a valid image.") % field_data
|
raise ValidationError, ugettext("The URL %s does not point to a valid image.") % field_data
|
||||||
|
|
||||||
def isValidPhone(field_data, all_data):
|
def isValidPhone(field_data, all_data):
|
||||||
if not phone_re.search(field_data):
|
if not phone_re.search(field_data):
|
||||||
raise ValidationError, gettext('Phone numbers must be in XXX-XXX-XXXX format. "%s" is invalid.') % field_data
|
raise ValidationError, ugettext('Phone numbers must be in XXX-XXX-XXXX format. "%s" is invalid.') % field_data
|
||||||
|
|
||||||
def isValidQuicktimeVideoURL(field_data, all_data):
|
def isValidQuicktimeVideoURL(field_data, all_data):
|
||||||
"Checks that the given URL is a video that can be played by QuickTime (qt, mpeg)"
|
"Checks that the given URL is a video that can be played by QuickTime (qt, mpeg)"
|
||||||
@ -194,11 +194,11 @@ def isValidQuicktimeVideoURL(field_data, all_data):
|
|||||||
try:
|
try:
|
||||||
uc(field_data, all_data)
|
uc(field_data, all_data)
|
||||||
except URLMimeTypeCheck.InvalidContentType:
|
except URLMimeTypeCheck.InvalidContentType:
|
||||||
raise ValidationError, gettext("The URL %s does not point to a valid QuickTime video.") % field_data
|
raise ValidationError, ugettext("The URL %s does not point to a valid QuickTime video.") % field_data
|
||||||
|
|
||||||
def isValidURL(field_data, all_data):
|
def isValidURL(field_data, all_data):
|
||||||
if not url_re.search(field_data):
|
if not url_re.search(field_data):
|
||||||
raise ValidationError, gettext("A valid URL is required.")
|
raise ValidationError, ugettext("A valid URL is required.")
|
||||||
|
|
||||||
def isValidHTML(field_data, all_data):
|
def isValidHTML(field_data, all_data):
|
||||||
import urllib, urllib2
|
import urllib, urllib2
|
||||||
@ -212,14 +212,14 @@ def isValidHTML(field_data, all_data):
|
|||||||
return
|
return
|
||||||
from xml.dom.minidom import parseString
|
from xml.dom.minidom import parseString
|
||||||
error_messages = [e.firstChild.wholeText for e in parseString(u.read()).getElementsByTagName('messages')[0].getElementsByTagName('msg')]
|
error_messages = [e.firstChild.wholeText for e in parseString(u.read()).getElementsByTagName('messages')[0].getElementsByTagName('msg')]
|
||||||
raise ValidationError, gettext("Valid HTML is required. Specific errors are:\n%s") % "\n".join(error_messages)
|
raise ValidationError, ugettext("Valid HTML is required. Specific errors are:\n%s") % "\n".join(error_messages)
|
||||||
|
|
||||||
def isWellFormedXml(field_data, all_data):
|
def isWellFormedXml(field_data, all_data):
|
||||||
from xml.dom.minidom import parseString
|
from xml.dom.minidom import parseString
|
||||||
try:
|
try:
|
||||||
parseString(field_data)
|
parseString(field_data)
|
||||||
except Exception, e: # Naked except because we're not sure what will be thrown
|
except Exception, e: # Naked except because we're not sure what will be thrown
|
||||||
raise ValidationError, gettext("Badly formed XML: %s") % str(e)
|
raise ValidationError, ugettext("Badly formed XML: %s") % str(e)
|
||||||
|
|
||||||
def isWellFormedXmlFragment(field_data, all_data):
|
def isWellFormedXmlFragment(field_data, all_data):
|
||||||
isWellFormedXml('<root>%s</root>' % field_data, all_data)
|
isWellFormedXml('<root>%s</root>' % field_data, all_data)
|
||||||
@ -249,7 +249,7 @@ def isValidUSState(field_data, all_data):
|
|||||||
"Checks that the given string is a valid two-letter U.S. state abbreviation"
|
"Checks that the given string is a valid two-letter U.S. state abbreviation"
|
||||||
states = ['AA', 'AE', 'AK', 'AL', 'AP', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY']
|
states = ['AA', 'AE', 'AK', 'AL', 'AP', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY']
|
||||||
if field_data.upper() not in states:
|
if field_data.upper() not in states:
|
||||||
raise ValidationError, gettext("Enter a valid U.S. state abbreviation.")
|
raise ValidationError, ugettext("Enter a valid U.S. state abbreviation.")
|
||||||
|
|
||||||
def hasNoProfanities(field_data, all_data):
|
def hasNoProfanities(field_data, all_data):
|
||||||
"""
|
"""
|
||||||
@ -263,14 +263,14 @@ def hasNoProfanities(field_data, all_data):
|
|||||||
if words_seen:
|
if words_seen:
|
||||||
from django.utils.text import get_text_list
|
from django.utils.text import get_text_list
|
||||||
plural = len(words_seen) > 1
|
plural = len(words_seen) > 1
|
||||||
raise ValidationError, ngettext("Watch your mouth! The word %s is not allowed here.",
|
raise ValidationError, ungettext("Watch your mouth! The word %s is not allowed here.",
|
||||||
"Watch your mouth! The words %s are not allowed here.", plural) % \
|
"Watch your mouth! The words %s are not allowed here.", plural) % \
|
||||||
get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in words_seen], 'and')
|
get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in words_seen], 'and')
|
||||||
|
|
||||||
class AlwaysMatchesOtherField(object):
|
class AlwaysMatchesOtherField(object):
|
||||||
def __init__(self, other_field_name, error_message=None):
|
def __init__(self, other_field_name, error_message=None):
|
||||||
self.other = other_field_name
|
self.other = other_field_name
|
||||||
self.error_message = error_message or lazy_inter(gettext_lazy("This field must match the '%s' field."), self.other)
|
self.error_message = error_message or lazy_inter(ugettext_lazy("This field must match the '%s' field."), self.other)
|
||||||
self.always_test = True
|
self.always_test = True
|
||||||
|
|
||||||
def __call__(self, field_data, all_data):
|
def __call__(self, field_data, all_data):
|
||||||
@ -289,7 +289,7 @@ class ValidateIfOtherFieldEquals(object):
|
|||||||
v(field_data, all_data)
|
v(field_data, all_data)
|
||||||
|
|
||||||
class RequiredIfOtherFieldNotGiven(object):
|
class RequiredIfOtherFieldNotGiven(object):
|
||||||
def __init__(self, other_field_name, error_message=gettext_lazy("Please enter something for at least one field.")):
|
def __init__(self, other_field_name, error_message=ugettext_lazy("Please enter something for at least one field.")):
|
||||||
self.other, self.error_message = other_field_name, error_message
|
self.other, self.error_message = other_field_name, error_message
|
||||||
self.always_test = True
|
self.always_test = True
|
||||||
|
|
||||||
@ -298,7 +298,7 @@ class RequiredIfOtherFieldNotGiven(object):
|
|||||||
raise ValidationError, self.error_message
|
raise ValidationError, self.error_message
|
||||||
|
|
||||||
class RequiredIfOtherFieldsGiven(object):
|
class RequiredIfOtherFieldsGiven(object):
|
||||||
def __init__(self, other_field_names, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
|
def __init__(self, other_field_names, error_message=ugettext_lazy("Please enter both fields or leave them both empty.")):
|
||||||
self.other, self.error_message = other_field_names, error_message
|
self.other, self.error_message = other_field_names, error_message
|
||||||
self.always_test = True
|
self.always_test = True
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ class RequiredIfOtherFieldsGiven(object):
|
|||||||
|
|
||||||
class RequiredIfOtherFieldGiven(RequiredIfOtherFieldsGiven):
|
class RequiredIfOtherFieldGiven(RequiredIfOtherFieldsGiven):
|
||||||
"Like RequiredIfOtherFieldsGiven, but takes a single field name instead of a list."
|
"Like RequiredIfOtherFieldsGiven, but takes a single field name instead of a list."
|
||||||
def __init__(self, other_field_name, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
|
def __init__(self, other_field_name, error_message=ugettext_lazy("Please enter both fields or leave them both empty.")):
|
||||||
RequiredIfOtherFieldsGiven.__init__(self, [other_field_name], error_message)
|
RequiredIfOtherFieldsGiven.__init__(self, [other_field_name], error_message)
|
||||||
|
|
||||||
class RequiredIfOtherFieldEquals(object):
|
class RequiredIfOtherFieldEquals(object):
|
||||||
@ -317,7 +317,7 @@ class RequiredIfOtherFieldEquals(object):
|
|||||||
self.other_field = other_field
|
self.other_field = other_field
|
||||||
self.other_value = other_value
|
self.other_value = other_value
|
||||||
other_label = other_label or other_value
|
other_label = other_label or other_value
|
||||||
self.error_message = error_message or lazy_inter(gettext_lazy("This field must be given if %(field)s is %(value)s"), {
|
self.error_message = error_message or lazy_inter(ugettext_lazy("This field must be given if %(field)s is %(value)s"), {
|
||||||
'field': other_field, 'value': other_label})
|
'field': other_field, 'value': other_label})
|
||||||
self.always_test = True
|
self.always_test = True
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ class RequiredIfOtherFieldDoesNotEqual(object):
|
|||||||
self.other_field = other_field
|
self.other_field = other_field
|
||||||
self.other_value = other_value
|
self.other_value = other_value
|
||||||
other_label = other_label or other_value
|
other_label = other_label or other_value
|
||||||
self.error_message = error_message or lazy_inter(gettext_lazy("This field must be given if %(field)s is not %(value)s"), {
|
self.error_message = error_message or lazy_inter(ugettext_lazy("This field must be given if %(field)s is not %(value)s"), {
|
||||||
'field': other_field, 'value': other_label})
|
'field': other_field, 'value': other_label})
|
||||||
self.always_test = True
|
self.always_test = True
|
||||||
|
|
||||||
@ -349,7 +349,7 @@ class IsLessThanOtherField(object):
|
|||||||
class UniqueAmongstFieldsWithPrefix(object):
|
class UniqueAmongstFieldsWithPrefix(object):
|
||||||
def __init__(self, field_name, prefix, error_message):
|
def __init__(self, field_name, prefix, error_message):
|
||||||
self.field_name, self.prefix = field_name, prefix
|
self.field_name, self.prefix = field_name, prefix
|
||||||
self.error_message = error_message or gettext_lazy("Duplicate values are not allowed.")
|
self.error_message = error_message or ugettext_lazy("Duplicate values are not allowed.")
|
||||||
|
|
||||||
def __call__(self, field_data, all_data):
|
def __call__(self, field_data, all_data):
|
||||||
for field_name, value in all_data.items():
|
for field_name, value in all_data.items():
|
||||||
@ -364,11 +364,11 @@ class NumberIsInRange(object):
|
|||||||
self.lower, self.upper = lower, upper
|
self.lower, self.upper = lower, upper
|
||||||
if not error_message:
|
if not error_message:
|
||||||
if lower and upper:
|
if lower and upper:
|
||||||
self.error_message = gettext("This value must be between %(lower)s and %(upper)s.") % {'lower': lower, 'upper': upper}
|
self.error_message = ugettext("This value must be between %(lower)s and %(upper)s.") % {'lower': lower, 'upper': upper}
|
||||||
elif lower:
|
elif lower:
|
||||||
self.error_message = gettext("This value must be at least %s.") % lower
|
self.error_message = ugettext("This value must be at least %s.") % lower
|
||||||
elif upper:
|
elif upper:
|
||||||
self.error_message = gettext("This value must be no more than %s.") % upper
|
self.error_message = ugettext("This value must be no more than %s.") % upper
|
||||||
else:
|
else:
|
||||||
self.error_message = error_message
|
self.error_message = error_message
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ class IsAPowerOf(object):
|
|||||||
from math import log
|
from math import log
|
||||||
val = log(int(field_data)) / log(self.power_of)
|
val = log(int(field_data)) / log(self.power_of)
|
||||||
if val != int(val):
|
if val != int(val):
|
||||||
raise ValidationError, gettext("This value must be a power of %s.") % self.power_of
|
raise ValidationError, ugettext("This value must be a power of %s.") % self.power_of
|
||||||
|
|
||||||
class IsValidFloat(object):
|
class IsValidFloat(object):
|
||||||
def __init__(self, max_digits, decimal_places):
|
def __init__(self, max_digits, decimal_places):
|
||||||
@ -415,17 +415,17 @@ class IsValidFloat(object):
|
|||||||
try:
|
try:
|
||||||
float(data)
|
float(data)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValidationError, gettext("Please enter a valid decimal number.")
|
raise ValidationError, ugettext("Please enter a valid decimal number.")
|
||||||
# Negative floats require more space to input.
|
# Negative floats require more space to input.
|
||||||
max_allowed_length = data.startswith('-') and (self.max_digits + 2) or (self.max_digits + 1)
|
max_allowed_length = data.startswith('-') and (self.max_digits + 2) or (self.max_digits + 1)
|
||||||
if len(data) > max_allowed_length:
|
if len(data) > max_allowed_length:
|
||||||
raise ValidationError, ngettext("Please enter a valid decimal number with at most %s total digit.",
|
raise ValidationError, ungettext("Please enter a valid decimal number with at most %s total digit.",
|
||||||
"Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits
|
"Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits
|
||||||
if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places - 1)) or ('.' in data and len(data) > (max_allowed_length - (self.decimal_places - len(data.split('.')[1])))):
|
if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places - 1)) or ('.' in data and len(data) > (max_allowed_length - (self.decimal_places - len(data.split('.')[1])))):
|
||||||
raise ValidationError, ngettext( "Please enter a valid decimal number with a whole part of at most %s digit.",
|
raise ValidationError, ungettext( "Please enter a valid decimal number with a whole part of at most %s digit.",
|
||||||
"Please enter a valid decimal number with a whole part of at most %s digits.", str(self.max_digits-self.decimal_places)) % str(self.max_digits-self.decimal_places)
|
"Please enter a valid decimal number with a whole part of at most %s digits.", str(self.max_digits-self.decimal_places)) % str(self.max_digits-self.decimal_places)
|
||||||
if '.' in data and len(data.split('.')[1]) > self.decimal_places:
|
if '.' in data and len(data.split('.')[1]) > self.decimal_places:
|
||||||
raise ValidationError, ngettext("Please enter a valid decimal number with at most %s decimal place.",
|
raise ValidationError, ungettext("Please enter a valid decimal number with at most %s decimal place.",
|
||||||
"Please enter a valid decimal number with at most %s decimal places.", self.decimal_places) % self.decimal_places
|
"Please enter a valid decimal number with at most %s decimal places.", self.decimal_places) % self.decimal_places
|
||||||
|
|
||||||
class HasAllowableSize(object):
|
class HasAllowableSize(object):
|
||||||
@ -435,14 +435,14 @@ class HasAllowableSize(object):
|
|||||||
"""
|
"""
|
||||||
def __init__(self, min_size=None, max_size=None, min_error_message=None, max_error_message=None):
|
def __init__(self, min_size=None, max_size=None, min_error_message=None, max_error_message=None):
|
||||||
self.min_size, self.max_size = min_size, max_size
|
self.min_size, self.max_size = min_size, max_size
|
||||||
self.min_error_message = min_error_message or lazy_inter(gettext_lazy("Make sure your uploaded file is at least %s bytes big."), min_size)
|
self.min_error_message = min_error_message or lazy_inter(ugettext_lazy("Make sure your uploaded file is at least %s bytes big."), min_size)
|
||||||
self.max_error_message = max_error_message or lazy_inter(gettext_lazy("Make sure your uploaded file is at most %s bytes big."), max_size)
|
self.max_error_message = max_error_message or lazy_inter(ugettext_lazy("Make sure your uploaded file is at most %s bytes big."), max_size)
|
||||||
|
|
||||||
def __call__(self, field_data, all_data):
|
def __call__(self, field_data, all_data):
|
||||||
try:
|
try:
|
||||||
content = field_data['content']
|
content = field_data['content']
|
||||||
except TypeError:
|
except TypeError:
|
||||||
raise ValidationError, gettext_lazy("No file was submitted. Check the encoding type on the form.")
|
raise ValidationError, ugettext_lazy("No file was submitted. Check the encoding type on the form.")
|
||||||
if self.min_size is not None and len(content) < self.min_size:
|
if self.min_size is not None and len(content) < self.min_size:
|
||||||
raise ValidationError, self.min_error_message
|
raise ValidationError, self.min_error_message
|
||||||
if self.max_size is not None and len(content) > self.max_size:
|
if self.max_size is not None and len(content) > self.max_size:
|
||||||
@ -453,7 +453,7 @@ class MatchesRegularExpression(object):
|
|||||||
Checks that the field matches the given regular-expression. The regex
|
Checks that the field matches the given regular-expression. The regex
|
||||||
should be in string format, not already compiled.
|
should be in string format, not already compiled.
|
||||||
"""
|
"""
|
||||||
def __init__(self, regexp, error_message=gettext_lazy("The format for this field is wrong.")):
|
def __init__(self, regexp, error_message=ugettext_lazy("The format for this field is wrong.")):
|
||||||
self.regexp = re.compile(regexp)
|
self.regexp = re.compile(regexp)
|
||||||
self.error_message = error_message
|
self.error_message = error_message
|
||||||
|
|
||||||
@ -468,7 +468,7 @@ class AnyValidator(object):
|
|||||||
as a validation error. The message is rather unspecific, so it's best to
|
as a validation error. The message is rather unspecific, so it's best to
|
||||||
specify one on instantiation.
|
specify one on instantiation.
|
||||||
"""
|
"""
|
||||||
def __init__(self, validator_list=None, error_message=gettext_lazy("This field is invalid.")):
|
def __init__(self, validator_list=None, error_message=ugettext_lazy("This field is invalid.")):
|
||||||
if validator_list is None: validator_list = []
|
if validator_list is None: validator_list = []
|
||||||
self.validator_list = validator_list
|
self.validator_list = validator_list
|
||||||
self.error_message = error_message
|
self.error_message = error_message
|
||||||
@ -504,10 +504,10 @@ class URLMimeTypeCheck(object):
|
|||||||
try:
|
try:
|
||||||
info = urllib2.urlopen(field_data).info()
|
info = urllib2.urlopen(field_data).info()
|
||||||
except (urllib2.HTTPError, urllib2.URLError):
|
except (urllib2.HTTPError, urllib2.URLError):
|
||||||
raise URLMimeTypeCheck.CouldNotRetrieve, gettext("Could not retrieve anything from %s.") % field_data
|
raise URLMimeTypeCheck.CouldNotRetrieve, ugettext("Could not retrieve anything from %s.") % field_data
|
||||||
content_type = info['content-type']
|
content_type = info['content-type']
|
||||||
if content_type not in self.mime_type_list:
|
if content_type not in self.mime_type_list:
|
||||||
raise URLMimeTypeCheck.InvalidContentType, gettext("The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'.") % {
|
raise URLMimeTypeCheck.InvalidContentType, ugettext("The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'.") % {
|
||||||
'url': field_data, 'contenttype': content_type}
|
'url': field_data, 'contenttype': content_type}
|
||||||
|
|
||||||
class RelaxNGCompact(object):
|
class RelaxNGCompact(object):
|
||||||
|
@ -8,7 +8,7 @@ from django.core.exceptions import ObjectDoesNotExist
|
|||||||
from django.utils.functional import curry
|
from django.utils.functional import curry
|
||||||
from django.utils.itercompat import tee
|
from django.utils.itercompat import tee
|
||||||
from django.utils.text import capfirst
|
from django.utils.text import capfirst
|
||||||
from django.utils.translation import gettext, gettext_lazy
|
from django.utils.translation import ugettext, ugettext_lazy
|
||||||
import datetime, os, time
|
import datetime, os, time
|
||||||
|
|
||||||
class NOT_PROVIDED:
|
class NOT_PROVIDED:
|
||||||
@ -39,7 +39,7 @@ def manipulator_validator_unique(f, opts, self, field_data, all_data):
|
|||||||
return
|
return
|
||||||
if getattr(self, 'original_object', None) and self.original_object._get_pk_val() == old_obj._get_pk_val():
|
if getattr(self, 'original_object', None) and self.original_object._get_pk_val() == old_obj._get_pk_val():
|
||||||
return
|
return
|
||||||
raise validators.ValidationError, gettext("%(optname)s with this %(fieldname)s already exists.") % {'optname': capfirst(opts.verbose_name), 'fieldname': f.verbose_name}
|
raise validators.ValidationError, ugettext("%(optname)s with this %(fieldname)s already exists.") % {'optname': capfirst(opts.verbose_name), 'fieldname': f.verbose_name}
|
||||||
|
|
||||||
# A guide to Field parameters:
|
# A guide to Field parameters:
|
||||||
#
|
#
|
||||||
@ -114,7 +114,7 @@ class Field(object):
|
|||||||
Subclasses should implement validate(), not validate_full().
|
Subclasses should implement validate(), not validate_full().
|
||||||
"""
|
"""
|
||||||
if not self.blank and not field_data:
|
if not self.blank and not field_data:
|
||||||
return [gettext_lazy('This field is required.')]
|
return [ugettext_lazy('This field is required.')]
|
||||||
try:
|
try:
|
||||||
self.validate(field_data, all_data)
|
self.validate(field_data, all_data)
|
||||||
except validators.ValidationError, e:
|
except validators.ValidationError, e:
|
||||||
@ -271,7 +271,7 @@ class Field(object):
|
|||||||
core_field_names.extend(f.get_manipulator_field_names(name_prefix))
|
core_field_names.extend(f.get_manipulator_field_names(name_prefix))
|
||||||
# Now, if there are any, add the validator to this FormField.
|
# Now, if there are any, add the validator to this FormField.
|
||||||
if core_field_names:
|
if core_field_names:
|
||||||
params['validator_list'].append(validators.RequiredIfOtherFieldsGiven(core_field_names, gettext_lazy("This field is required.")))
|
params['validator_list'].append(validators.RequiredIfOtherFieldsGiven(core_field_names, ugettext_lazy("This field is required.")))
|
||||||
|
|
||||||
# Finally, add the field_names.
|
# Finally, add the field_names.
|
||||||
field_names = self.get_manipulator_field_names(name_prefix)
|
field_names = self.get_manipulator_field_names(name_prefix)
|
||||||
@ -364,7 +364,7 @@ class AutoField(Field):
|
|||||||
try:
|
try:
|
||||||
return int(value)
|
return int(value)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
raise validators.ValidationError, gettext("This value must be an integer.")
|
raise validators.ValidationError, ugettext("This value must be an integer.")
|
||||||
|
|
||||||
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
|
def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
|
||||||
if not rel:
|
if not rel:
|
||||||
@ -399,7 +399,7 @@ class BooleanField(Field):
|
|||||||
if value in (True, False): return value
|
if value in (True, False): return value
|
||||||
if value in ('t', 'True', '1'): return True
|
if value in ('t', 'True', '1'): return True
|
||||||
if value in ('f', 'False', '0'): return False
|
if value in ('f', 'False', '0'): return False
|
||||||
raise validators.ValidationError, gettext("This value must be either True or False.")
|
raise validators.ValidationError, ugettext("This value must be either True or False.")
|
||||||
|
|
||||||
def get_manipulator_field_objs(self):
|
def get_manipulator_field_objs(self):
|
||||||
return [oldforms.CheckboxField]
|
return [oldforms.CheckboxField]
|
||||||
@ -420,7 +420,7 @@ class CharField(Field):
|
|||||||
if self.null:
|
if self.null:
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
raise validators.ValidationError, gettext_lazy("This field cannot be null.")
|
raise validators.ValidationError, ugettext_lazy("This field cannot be null.")
|
||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
@ -454,7 +454,7 @@ class DateField(Field):
|
|||||||
try:
|
try:
|
||||||
return datetime.date(*time.strptime(value, '%Y-%m-%d')[:3])
|
return datetime.date(*time.strptime(value, '%Y-%m-%d')[:3])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise validators.ValidationError, gettext('Enter a valid date in YYYY-MM-DD format.')
|
raise validators.ValidationError, ugettext('Enter a valid date in YYYY-MM-DD format.')
|
||||||
|
|
||||||
def get_db_prep_lookup(self, lookup_type, value):
|
def get_db_prep_lookup(self, lookup_type, value):
|
||||||
if lookup_type == 'range':
|
if lookup_type == 'range':
|
||||||
@ -523,7 +523,7 @@ class DateTimeField(DateField):
|
|||||||
try:
|
try:
|
||||||
return datetime.datetime(*time.strptime(value, '%Y-%m-%d')[:3])
|
return datetime.datetime(*time.strptime(value, '%Y-%m-%d')[:3])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise validators.ValidationError, gettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
|
raise validators.ValidationError, ugettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
|
||||||
|
|
||||||
def get_db_prep_save(self, value):
|
def get_db_prep_save(self, value):
|
||||||
# Casts dates into string format for entry into database.
|
# Casts dates into string format for entry into database.
|
||||||
@ -607,7 +607,7 @@ class FileField(Field):
|
|||||||
self.always_test = True
|
self.always_test = True
|
||||||
def __call__(self, field_data, all_data):
|
def __call__(self, field_data, all_data):
|
||||||
if not all_data.get(self.other_file_field_name, False):
|
if not all_data.get(self.other_file_field_name, False):
|
||||||
c = validators.RequiredIfOtherFieldsGiven(self.other_field_names, gettext_lazy("This field is required."))
|
c = validators.RequiredIfOtherFieldsGiven(self.other_field_names, ugettext_lazy("This field is required."))
|
||||||
c(field_data, all_data)
|
c(field_data, all_data)
|
||||||
# First, get the core fields, if any.
|
# First, get the core fields, if any.
|
||||||
core_field_names = []
|
core_field_names = []
|
||||||
@ -618,7 +618,7 @@ class FileField(Field):
|
|||||||
if core_field_names:
|
if core_field_names:
|
||||||
field_list[0].validator_list.append(RequiredFileField(core_field_names, field_list[1].field_name))
|
field_list[0].validator_list.append(RequiredFileField(core_field_names, field_list[1].field_name))
|
||||||
else:
|
else:
|
||||||
v = validators.RequiredIfOtherFieldNotGiven(field_list[1].field_name, gettext_lazy("This field is required."))
|
v = validators.RequiredIfOtherFieldNotGiven(field_list[1].field_name, ugettext_lazy("This field is required."))
|
||||||
v.always_test = True
|
v.always_test = True
|
||||||
field_list[0].validator_list.append(v)
|
field_list[0].validator_list.append(v)
|
||||||
field_list[0].is_required = field_list[1].is_required = False
|
field_list[0].is_required = field_list[1].is_required = False
|
||||||
@ -748,7 +748,7 @@ class NullBooleanField(Field):
|
|||||||
if value in ('None'): return None
|
if value in ('None'): return None
|
||||||
if value in ('t', 'True', '1'): return True
|
if value in ('t', 'True', '1'): return True
|
||||||
if value in ('f', 'False', '0'): return False
|
if value in ('f', 'False', '0'): return False
|
||||||
raise validators.ValidationError, gettext("This value must be either None, True or False.")
|
raise validators.ValidationError, ugettext("This value must be either None, True or False.")
|
||||||
|
|
||||||
def get_manipulator_field_objs(self):
|
def get_manipulator_field_objs(self):
|
||||||
return [oldforms.NullBooleanField]
|
return [oldforms.NullBooleanField]
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Field classes
|
Field classes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.utils.translation import gettext
|
from django.utils.translation import ugettext
|
||||||
from django.utils.encoding import smart_unicode
|
from django.utils.encoding import smart_unicode
|
||||||
from util import ErrorList, ValidationError
|
from util import ErrorList, ValidationError
|
||||||
from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple
|
from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple
|
||||||
@ -77,7 +77,7 @@ class Field(object):
|
|||||||
Raises ValidationError for any errors.
|
Raises ValidationError for any errors.
|
||||||
"""
|
"""
|
||||||
if self.required and value in EMPTY_VALUES:
|
if self.required and value in EMPTY_VALUES:
|
||||||
raise ValidationError(gettext(u'This field is required.'))
|
raise ValidationError(ugettext(u'This field is required.'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
@ -100,9 +100,9 @@ class CharField(Field):
|
|||||||
return u''
|
return u''
|
||||||
value = smart_unicode(value)
|
value = smart_unicode(value)
|
||||||
if self.max_length is not None and len(value) > self.max_length:
|
if self.max_length is not None and len(value) > self.max_length:
|
||||||
raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length)
|
raise ValidationError(ugettext(u'Ensure this value has at most %d characters.') % self.max_length)
|
||||||
if self.min_length is not None and len(value) < self.min_length:
|
if self.min_length is not None and len(value) < self.min_length:
|
||||||
raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length)
|
raise ValidationError(ugettext(u'Ensure this value has at least %d characters.') % self.min_length)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
@ -125,11 +125,11 @@ class IntegerField(Field):
|
|||||||
try:
|
try:
|
||||||
value = int(value)
|
value = int(value)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
raise ValidationError(gettext(u'Enter a whole number.'))
|
raise ValidationError(ugettext(u'Enter a whole number.'))
|
||||||
if self.max_value is not None and value > self.max_value:
|
if self.max_value is not None and value > self.max_value:
|
||||||
raise ValidationError(gettext(u'Ensure this value is less than or equal to %s.') % self.max_value)
|
raise ValidationError(ugettext(u'Ensure this value is less than or equal to %s.') % self.max_value)
|
||||||
if self.min_value is not None and value < self.min_value:
|
if self.min_value is not None and value < self.min_value:
|
||||||
raise ValidationError(gettext(u'Ensure this value is greater than or equal to %s.') % self.min_value)
|
raise ValidationError(ugettext(u'Ensure this value is greater than or equal to %s.') % self.min_value)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
DEFAULT_DATE_INPUT_FORMATS = (
|
DEFAULT_DATE_INPUT_FORMATS = (
|
||||||
@ -162,7 +162,7 @@ class DateField(Field):
|
|||||||
return datetime.date(*time.strptime(value, format)[:3])
|
return datetime.date(*time.strptime(value, format)[:3])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
raise ValidationError(gettext(u'Enter a valid date.'))
|
raise ValidationError(ugettext(u'Enter a valid date.'))
|
||||||
|
|
||||||
DEFAULT_TIME_INPUT_FORMATS = (
|
DEFAULT_TIME_INPUT_FORMATS = (
|
||||||
'%H:%M:%S', # '14:30:59'
|
'%H:%M:%S', # '14:30:59'
|
||||||
@ -189,7 +189,7 @@ class TimeField(Field):
|
|||||||
return datetime.time(*time.strptime(value, format)[3:6])
|
return datetime.time(*time.strptime(value, format)[3:6])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
raise ValidationError(gettext(u'Enter a valid time.'))
|
raise ValidationError(ugettext(u'Enter a valid time.'))
|
||||||
|
|
||||||
DEFAULT_DATETIME_INPUT_FORMATS = (
|
DEFAULT_DATETIME_INPUT_FORMATS = (
|
||||||
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||||
@ -225,7 +225,7 @@ class DateTimeField(Field):
|
|||||||
return datetime.datetime(*time.strptime(value, format)[:6])
|
return datetime.datetime(*time.strptime(value, format)[:6])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
raise ValidationError(gettext(u'Enter a valid date/time.'))
|
raise ValidationError(ugettext(u'Enter a valid date/time.'))
|
||||||
|
|
||||||
class RegexField(Field):
|
class RegexField(Field):
|
||||||
def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
|
def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
|
||||||
@ -239,7 +239,7 @@ class RegexField(Field):
|
|||||||
regex = re.compile(regex)
|
regex = re.compile(regex)
|
||||||
self.regex = regex
|
self.regex = regex
|
||||||
self.max_length, self.min_length = max_length, min_length
|
self.max_length, self.min_length = max_length, min_length
|
||||||
self.error_message = error_message or gettext(u'Enter a valid value.')
|
self.error_message = error_message or ugettext(u'Enter a valid value.')
|
||||||
|
|
||||||
def clean(self, value):
|
def clean(self, value):
|
||||||
"""
|
"""
|
||||||
@ -253,9 +253,9 @@ class RegexField(Field):
|
|||||||
if value == u'':
|
if value == u'':
|
||||||
return value
|
return value
|
||||||
if self.max_length is not None and len(value) > self.max_length:
|
if self.max_length is not None and len(value) > self.max_length:
|
||||||
raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length)
|
raise ValidationError(ugettext(u'Ensure this value has at most %d characters.') % self.max_length)
|
||||||
if self.min_length is not None and len(value) < self.min_length:
|
if self.min_length is not None and len(value) < self.min_length:
|
||||||
raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length)
|
raise ValidationError(ugettext(u'Ensure this value has at least %d characters.') % self.min_length)
|
||||||
if not self.regex.search(value):
|
if not self.regex.search(value):
|
||||||
raise ValidationError(self.error_message)
|
raise ValidationError(self.error_message)
|
||||||
return value
|
return value
|
||||||
@ -268,7 +268,7 @@ email_re = re.compile(
|
|||||||
class EmailField(RegexField):
|
class EmailField(RegexField):
|
||||||
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
|
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
|
||||||
RegexField.__init__(self, email_re, max_length, min_length,
|
RegexField.__init__(self, email_re, max_length, min_length,
|
||||||
gettext(u'Enter a valid e-mail address.'), *args, **kwargs)
|
ugettext(u'Enter a valid e-mail address.'), *args, **kwargs)
|
||||||
|
|
||||||
url_re = re.compile(
|
url_re = re.compile(
|
||||||
r'^https?://' # http:// or https://
|
r'^https?://' # http:// or https://
|
||||||
@ -286,7 +286,7 @@ except ImportError:
|
|||||||
class URLField(RegexField):
|
class URLField(RegexField):
|
||||||
def __init__(self, max_length=None, min_length=None, verify_exists=False,
|
def __init__(self, max_length=None, min_length=None, verify_exists=False,
|
||||||
validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
|
validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
|
||||||
super(URLField, self).__init__(url_re, max_length, min_length, gettext(u'Enter a valid URL.'), *args, **kwargs)
|
super(URLField, self).__init__(url_re, max_length, min_length, ugettext(u'Enter a valid URL.'), *args, **kwargs)
|
||||||
self.verify_exists = verify_exists
|
self.verify_exists = verify_exists
|
||||||
self.user_agent = validator_user_agent
|
self.user_agent = validator_user_agent
|
||||||
|
|
||||||
@ -308,9 +308,9 @@ class URLField(RegexField):
|
|||||||
req = urllib2.Request(value, None, headers)
|
req = urllib2.Request(value, None, headers)
|
||||||
u = urllib2.urlopen(req)
|
u = urllib2.urlopen(req)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValidationError(gettext(u'Enter a valid URL.'))
|
raise ValidationError(ugettext(u'Enter a valid URL.'))
|
||||||
except: # urllib2.URLError, httplib.InvalidURL, etc.
|
except: # urllib2.URLError, httplib.InvalidURL, etc.
|
||||||
raise ValidationError(gettext(u'This URL appears to be a broken link.'))
|
raise ValidationError(ugettext(u'This URL appears to be a broken link.'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
class BooleanField(Field):
|
class BooleanField(Field):
|
||||||
@ -361,7 +361,7 @@ class ChoiceField(Field):
|
|||||||
return value
|
return value
|
||||||
valid_values = set([str(k) for k, v in self.choices])
|
valid_values = set([str(k) for k, v in self.choices])
|
||||||
if value not in valid_values:
|
if value not in valid_values:
|
||||||
raise ValidationError(gettext(u'Select a valid choice. That choice is not one of the available choices.'))
|
raise ValidationError(ugettext(u'Select a valid choice. That choice is not one of the available choices.'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
class MultipleChoiceField(ChoiceField):
|
class MultipleChoiceField(ChoiceField):
|
||||||
@ -373,11 +373,11 @@ class MultipleChoiceField(ChoiceField):
|
|||||||
Validates that the input is a list or tuple.
|
Validates that the input is a list or tuple.
|
||||||
"""
|
"""
|
||||||
if self.required and not value:
|
if self.required and not value:
|
||||||
raise ValidationError(gettext(u'This field is required.'))
|
raise ValidationError(ugettext(u'This field is required.'))
|
||||||
elif not self.required and not value:
|
elif not self.required and not value:
|
||||||
return []
|
return []
|
||||||
if not isinstance(value, (list, tuple)):
|
if not isinstance(value, (list, tuple)):
|
||||||
raise ValidationError(gettext(u'Enter a list of values.'))
|
raise ValidationError(ugettext(u'Enter a list of values.'))
|
||||||
new_value = []
|
new_value = []
|
||||||
for val in value:
|
for val in value:
|
||||||
val = smart_unicode(val)
|
val = smart_unicode(val)
|
||||||
@ -386,7 +386,7 @@ class MultipleChoiceField(ChoiceField):
|
|||||||
valid_values = set([smart_unicode(k) for k, v in self.choices])
|
valid_values = set([smart_unicode(k) for k, v in self.choices])
|
||||||
for val in new_value:
|
for val in new_value:
|
||||||
if val not in valid_values:
|
if val not in valid_values:
|
||||||
raise ValidationError(gettext(u'Select a valid choice. %s is not one of the available choices.') % val)
|
raise ValidationError(ugettext(u'Select a valid choice. %s is not one of the available choices.') % val)
|
||||||
return new_value
|
return new_value
|
||||||
|
|
||||||
class ComboField(Field):
|
class ComboField(Field):
|
||||||
@ -449,18 +449,18 @@ class MultiValueField(Field):
|
|||||||
clean_data = []
|
clean_data = []
|
||||||
errors = ErrorList()
|
errors = ErrorList()
|
||||||
if self.required and not value:
|
if self.required and not value:
|
||||||
raise ValidationError(gettext(u'This field is required.'))
|
raise ValidationError(ugettext(u'This field is required.'))
|
||||||
elif not self.required and not value:
|
elif not self.required and not value:
|
||||||
return self.compress([])
|
return self.compress([])
|
||||||
if not isinstance(value, (list, tuple)):
|
if not isinstance(value, (list, tuple)):
|
||||||
raise ValidationError(gettext(u'Enter a list of values.'))
|
raise ValidationError(ugettext(u'Enter a list of values.'))
|
||||||
for i, field in enumerate(self.fields):
|
for i, field in enumerate(self.fields):
|
||||||
try:
|
try:
|
||||||
field_value = value[i]
|
field_value = value[i]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
field_value = None
|
field_value = None
|
||||||
if self.required and field_value in EMPTY_VALUES:
|
if self.required and field_value in EMPTY_VALUES:
|
||||||
raise ValidationError(gettext(u'This field is required.'))
|
raise ValidationError(ugettext(u'This field is required.'))
|
||||||
try:
|
try:
|
||||||
clean_data.append(field.clean(field_value))
|
clean_data.append(field.clean(field_value))
|
||||||
except ValidationError, e:
|
except ValidationError, e:
|
||||||
|
@ -2,7 +2,7 @@ from django.core import validators
|
|||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import gettext, ngettext
|
from django.utils.translation import ugettext, ungettext
|
||||||
|
|
||||||
FORM_FIELD_ID_PREFIX = 'id_'
|
FORM_FIELD_ID_PREFIX = 'id_'
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ class Manipulator(object):
|
|||||||
errors.setdefault(field.field_name, []).extend(e.messages)
|
errors.setdefault(field.field_name, []).extend(e.messages)
|
||||||
|
|
||||||
# if field.is_required and not new_data.get(field.field_name, False):
|
# if field.is_required and not new_data.get(field.field_name, False):
|
||||||
# errors.setdefault(field.field_name, []).append(gettext_lazy('This field is required.'))
|
# errors.setdefault(field.field_name, []).append(ugettext_lazy('This field is required.'))
|
||||||
# continue
|
# continue
|
||||||
# try:
|
# try:
|
||||||
# validator_list = field.validator_list
|
# validator_list = field.validator_list
|
||||||
@ -354,7 +354,7 @@ class FormField(object):
|
|||||||
def get_validation_errors(self, new_data):
|
def get_validation_errors(self, new_data):
|
||||||
errors = {}
|
errors = {}
|
||||||
if self.is_required and not new_data.get(self.field_name, False):
|
if self.is_required and not new_data.get(self.field_name, False):
|
||||||
errors.setdefault(self.field_name, []).append(gettext('This field is required.'))
|
errors.setdefault(self.field_name, []).append(ugettext('This field is required.'))
|
||||||
return errors
|
return errors
|
||||||
try:
|
try:
|
||||||
for validator in self.validator_list:
|
for validator in self.validator_list:
|
||||||
@ -389,12 +389,12 @@ class TextField(FormField):
|
|||||||
|
|
||||||
def isValidLength(self, data, form):
|
def isValidLength(self, data, form):
|
||||||
if data and self.maxlength and len(data.decode(settings.DEFAULT_CHARSET)) > self.maxlength:
|
if data and self.maxlength and len(data.decode(settings.DEFAULT_CHARSET)) > self.maxlength:
|
||||||
raise validators.ValidationError, ngettext("Ensure your text is less than %s character.",
|
raise validators.ValidationError, ungettext("Ensure your text is less than %s character.",
|
||||||
"Ensure your text is less than %s characters.", self.maxlength) % self.maxlength
|
"Ensure your text is less than %s characters.", self.maxlength) % self.maxlength
|
||||||
|
|
||||||
def hasNoNewlines(self, data, form):
|
def hasNoNewlines(self, data, form):
|
||||||
if data and '\n' in data:
|
if data and '\n' in data:
|
||||||
raise validators.ValidationError, gettext("Line breaks are not allowed here.")
|
raise validators.ValidationError, ugettext("Line breaks are not allowed here.")
|
||||||
|
|
||||||
def render(self, data):
|
def render(self, data):
|
||||||
if data is None:
|
if data is None:
|
||||||
@ -495,7 +495,7 @@ class SelectField(FormField):
|
|||||||
str_data = str(data)
|
str_data = str(data)
|
||||||
str_choices = [str(item[0]) for item in self.choices]
|
str_choices = [str(item[0]) for item in self.choices]
|
||||||
if str_data not in str_choices:
|
if str_data not in str_choices:
|
||||||
raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data': str_data, 'choices': str_choices}
|
raise validators.ValidationError, ugettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data': str_data, 'choices': str_choices}
|
||||||
|
|
||||||
class NullSelectField(SelectField):
|
class NullSelectField(SelectField):
|
||||||
"This SelectField converts blank fields to None"
|
"This SelectField converts blank fields to None"
|
||||||
@ -568,7 +568,7 @@ class RadioSelectField(FormField):
|
|||||||
str_data = str(data)
|
str_data = str(data)
|
||||||
str_choices = [str(item[0]) for item in self.choices]
|
str_choices = [str(item[0]) for item in self.choices]
|
||||||
if str_data not in str_choices:
|
if str_data not in str_choices:
|
||||||
raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':str_data, 'choices':str_choices}
|
raise validators.ValidationError, ugettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':str_data, 'choices':str_choices}
|
||||||
|
|
||||||
class NullBooleanField(SelectField):
|
class NullBooleanField(SelectField):
|
||||||
"This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None"
|
"This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None"
|
||||||
@ -607,7 +607,7 @@ class SelectMultipleField(SelectField):
|
|||||||
str_choices = [str(item[0]) for item in self.choices]
|
str_choices = [str(item[0]) for item in self.choices]
|
||||||
for val in map(str, field_data):
|
for val in map(str, field_data):
|
||||||
if val not in str_choices:
|
if val not in str_choices:
|
||||||
raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':val, 'choices':str_choices}
|
raise validators.ValidationError, ugettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':val, 'choices':str_choices}
|
||||||
|
|
||||||
def html2python(data):
|
def html2python(data):
|
||||||
if data is None:
|
if data is None:
|
||||||
@ -669,9 +669,9 @@ class FileUploadField(FormField):
|
|||||||
try:
|
try:
|
||||||
content = field_data['content']
|
content = field_data['content']
|
||||||
except TypeError:
|
except TypeError:
|
||||||
raise validators.CriticalValidationError, gettext("No file was submitted. Check the encoding type on the form.")
|
raise validators.CriticalValidationError, ugettext("No file was submitted. Check the encoding type on the form.")
|
||||||
if not content:
|
if not content:
|
||||||
raise validators.CriticalValidationError, gettext("The submitted file is empty.")
|
raise validators.CriticalValidationError, ugettext("The submitted file is empty.")
|
||||||
|
|
||||||
def render(self, data):
|
def render(self, data):
|
||||||
return '<input type="file" id="%s" class="v%s" name="%s" />' % \
|
return '<input type="file" id="%s" class="v%s" name="%s" />' % \
|
||||||
@ -727,7 +727,7 @@ class SmallIntegerField(IntegerField):
|
|||||||
|
|
||||||
def isSmallInteger(self, field_data, all_data):
|
def isSmallInteger(self, field_data, all_data):
|
||||||
if not -32768 <= int(field_data) <= 32767:
|
if not -32768 <= int(field_data) <= 32767:
|
||||||
raise validators.CriticalValidationError, gettext("Enter a whole number between -32,768 and 32,767.")
|
raise validators.CriticalValidationError, ugettext("Enter a whole number between -32,768 and 32,767.")
|
||||||
|
|
||||||
class PositiveIntegerField(IntegerField):
|
class PositiveIntegerField(IntegerField):
|
||||||
def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None):
|
def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None):
|
||||||
@ -737,7 +737,7 @@ class PositiveIntegerField(IntegerField):
|
|||||||
|
|
||||||
def isPositive(self, field_data, all_data):
|
def isPositive(self, field_data, all_data):
|
||||||
if int(field_data) < 0:
|
if int(field_data) < 0:
|
||||||
raise validators.CriticalValidationError, gettext("Enter a positive number.")
|
raise validators.CriticalValidationError, ugettext("Enter a positive number.")
|
||||||
|
|
||||||
class PositiveSmallIntegerField(IntegerField):
|
class PositiveSmallIntegerField(IntegerField):
|
||||||
def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=None):
|
def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=None):
|
||||||
@ -747,7 +747,7 @@ class PositiveSmallIntegerField(IntegerField):
|
|||||||
|
|
||||||
def isPositiveSmall(self, field_data, all_data):
|
def isPositiveSmall(self, field_data, all_data):
|
||||||
if not 0 <= int(field_data) <= 32767:
|
if not 0 <= int(field_data) <= 32767:
|
||||||
raise validators.CriticalValidationError, gettext("Enter a whole number between 0 and 32,767.")
|
raise validators.CriticalValidationError, ugettext("Enter a whole number between 0 and 32,767.")
|
||||||
|
|
||||||
class FloatField(TextField):
|
class FloatField(TextField):
|
||||||
def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
|
def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
|
||||||
|
@ -40,7 +40,7 @@ class TranslateNode(Node):
|
|||||||
if self.noop:
|
if self.noop:
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
return translation.gettext(value)
|
return translation.ugettext(value)
|
||||||
|
|
||||||
class BlockTranslateNode(Node):
|
class BlockTranslateNode(Node):
|
||||||
def __init__(self, extra_context, singular, plural=None, countervar=None, counter=None):
|
def __init__(self, extra_context, singular, plural=None, countervar=None, counter=None):
|
||||||
@ -68,9 +68,9 @@ class BlockTranslateNode(Node):
|
|||||||
count = self.counter.resolve(context)
|
count = self.counter.resolve(context)
|
||||||
context[self.countervar] = count
|
context[self.countervar] = count
|
||||||
plural = self.render_token_list(self.plural)
|
plural = self.render_token_list(self.plural)
|
||||||
result = translation.ngettext(singular, plural, count) % context
|
result = translation.ungettext(singular, plural, count) % context
|
||||||
else:
|
else:
|
||||||
result = translation.gettext(singular) % context
|
result = translation.ugettext(singular) % context
|
||||||
context.pop()
|
context.pop()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -41,24 +41,24 @@ True
|
|||||||
|
|
||||||
# Attempt to add a Musician without a first_name.
|
# Attempt to add a Musician without a first_name.
|
||||||
>>> man.get_validation_errors(MultiValueDict({'last_name': ['Blakey']}))
|
>>> man.get_validation_errors(MultiValueDict({'last_name': ['Blakey']}))
|
||||||
{'first_name': ['This field is required.']}
|
{'first_name': [u'This field is required.']}
|
||||||
|
|
||||||
# Attempt to add a Musician without a first_name and last_name.
|
# Attempt to add a Musician without a first_name and last_name.
|
||||||
>>> man.get_validation_errors(MultiValueDict({}))
|
>>> man.get_validation_errors(MultiValueDict({}))
|
||||||
{'first_name': ['This field is required.'], 'last_name': ['This field is required.']}
|
{'first_name': [u'This field is required.'], 'last_name': [u'This field is required.']}
|
||||||
|
|
||||||
# Attempt to create an Album without a name or musician.
|
# Attempt to create an Album without a name or musician.
|
||||||
>>> man = Album.AddManipulator()
|
>>> man = Album.AddManipulator()
|
||||||
>>> man.get_validation_errors(MultiValueDict({}))
|
>>> man.get_validation_errors(MultiValueDict({}))
|
||||||
{'musician': ['This field is required.'], 'name': ['This field is required.']}
|
{'musician': [u'This field is required.'], 'name': [u'This field is required.']}
|
||||||
|
|
||||||
# Attempt to create an Album with an invalid musician.
|
# Attempt to create an Album with an invalid musician.
|
||||||
>>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['foo']}))
|
>>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['foo']}))
|
||||||
{'musician': ["Select a valid choice; 'foo' is not in ['', '1']."]}
|
{'musician': [u"Select a valid choice; 'foo' is not in ['', '1']."]}
|
||||||
|
|
||||||
# Attempt to create an Album with an invalid release_date.
|
# Attempt to create an Album with an invalid release_date.
|
||||||
>>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['1'], 'release_date': 'today'}))
|
>>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['1'], 'release_date': 'today'}))
|
||||||
{'release_date': ['Enter a valid date in YYYY-MM-DD format.']}
|
{'release_date': [u'Enter a valid date in YYYY-MM-DD format.']}
|
||||||
|
|
||||||
# Create an Album without a release_date (because it's optional).
|
# Create an Album without a release_date (because it's optional).
|
||||||
>>> data = MultiValueDict({'name': ['Ella and Basie'], 'musician': ['1']})
|
>>> data = MultiValueDict({'name': ['Ella and Basie'], 'musician': ['1']})
|
||||||
|
@ -42,7 +42,7 @@ __test__ = {'API_TESTS':"""
|
|||||||
|
|
||||||
>>> p = Person(**dict(valid_params, id='foo'))
|
>>> p = Person(**dict(valid_params, id='foo'))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
{'id': ['This value must be an integer.']}
|
{'id': [u'This value must be an integer.']}
|
||||||
|
|
||||||
>>> p = Person(**dict(valid_params, id=None))
|
>>> p = Person(**dict(valid_params, id=None))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
@ -76,7 +76,7 @@ False
|
|||||||
|
|
||||||
>>> p = Person(**dict(valid_params, is_child='foo'))
|
>>> p = Person(**dict(valid_params, is_child='foo'))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
{'is_child': ['This value must be either True or False.']}
|
{'is_child': [u'This value must be either True or False.']}
|
||||||
|
|
||||||
>>> p = Person(**dict(valid_params, name=u'Jose'))
|
>>> p = Person(**dict(valid_params, name=u'Jose'))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
@ -116,7 +116,7 @@ datetime.date(2000, 5, 3)
|
|||||||
|
|
||||||
>>> p = Person(**dict(valid_params, birthdate='foo'))
|
>>> p = Person(**dict(valid_params, birthdate='foo'))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
{'birthdate': ['Enter a valid date in YYYY-MM-DD format.']}
|
{'birthdate': [u'Enter a valid date in YYYY-MM-DD format.']}
|
||||||
|
|
||||||
>>> p = Person(**dict(valid_params, favorite_moment=datetime.datetime(2002, 4, 3, 13, 23)))
|
>>> p = Person(**dict(valid_params, favorite_moment=datetime.datetime(2002, 4, 3, 13, 23)))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
@ -144,10 +144,10 @@ u'john@example.com'
|
|||||||
|
|
||||||
>>> p = Person(**dict(valid_params, email=22))
|
>>> p = Person(**dict(valid_params, email=22))
|
||||||
>>> p.validate()
|
>>> p.validate()
|
||||||
{'email': ['Enter a valid e-mail address.']}
|
{'email': [u'Enter a valid e-mail address.']}
|
||||||
|
|
||||||
# Make sure that Date and DateTime return validation errors and don't raise Python errors.
|
# Make sure that Date and DateTime return validation errors and don't raise Python errors.
|
||||||
>>> Person(name='John Doe', is_child=True, email='abc@def.com').validate()
|
>>> Person(name='John Doe', is_child=True, email='abc@def.com').validate()
|
||||||
{'favorite_moment': ['This field is required.'], 'birthdate': ['This field is required.']}
|
{'favorite_moment': [u'This field is required.'], 'birthdate': [u'This field is required.']}
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user