fixes #753 - ValidationError and CriticalValidationError now accept both strings and promises from gettext_lazy
git-svn-id: http://code.djangoproject.com/svn/django/trunk@1328 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
a49fa746cd
commit
e4e28d907a
|
@ -27,6 +27,7 @@ url_re = re.compile(r'^http://\S+$')
|
||||||
|
|
||||||
from django.conf.settings import JING_PATH
|
from django.conf.settings import JING_PATH
|
||||||
from django.utils.translation import gettext_lazy, ngettext
|
from django.utils.translation import gettext_lazy, ngettext
|
||||||
|
from django.utils.functional import Promise
|
||||||
|
|
||||||
class ValidationError(Exception):
|
class ValidationError(Exception):
|
||||||
def __init__(self, message):
|
def __init__(self, message):
|
||||||
|
@ -34,7 +35,7 @@ class ValidationError(Exception):
|
||||||
if isinstance(message, list):
|
if isinstance(message, list):
|
||||||
self.messages = message
|
self.messages = message
|
||||||
else:
|
else:
|
||||||
assert isinstance(message, basestring), ("%s should be a string" % repr(message))
|
assert isinstance(message, (basestring, Promise)), ("%s should be a string" % repr(message))
|
||||||
self.messages = [message]
|
self.messages = [message]
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
# This is needed because, without a __str__(), printing an exception
|
# This is needed because, without a __str__(), printing an exception
|
||||||
|
@ -49,7 +50,7 @@ class CriticalValidationError(Exception):
|
||||||
if isinstance(message, list):
|
if isinstance(message, list):
|
||||||
self.messages = message
|
self.messages = message
|
||||||
else:
|
else:
|
||||||
assert isinstance(message, basestring), ("'%s' should be a string" % message)
|
assert isinstance(message, (basestring, Promise)), ("'%s' should be a string" % message)
|
||||||
self.messages = [message]
|
self.messages = [message]
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.messages)
|
return str(self.messages)
|
||||||
|
|
|
@ -3,6 +3,14 @@ def curry(*args, **kwargs):
|
||||||
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
|
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
|
||||||
return _curried
|
return _curried
|
||||||
|
|
||||||
|
class Promise:
|
||||||
|
"""
|
||||||
|
This is just a base class for the proxy class created in
|
||||||
|
the closure of the lazy function. It can be used to recognize
|
||||||
|
promises in code.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def lazy(func, *resultclasses):
|
def lazy(func, *resultclasses):
|
||||||
"""
|
"""
|
||||||
Turns any callable into a lazy evaluated callable. You need to give result
|
Turns any callable into a lazy evaluated callable. You need to give result
|
||||||
|
@ -10,7 +18,7 @@ def lazy(func, *resultclasses):
|
||||||
the lazy evaluation code is triggered. Results are not memoized; the
|
the lazy evaluation code is triggered. Results are not memoized; the
|
||||||
function is evaluated on every access.
|
function is evaluated on every access.
|
||||||
"""
|
"""
|
||||||
class __proxy__:
|
class __proxy__(Promise):
|
||||||
# This inner class encapsulates the code that should be evaluated
|
# This inner class encapsulates the code that should be evaluated
|
||||||
# lazily. On calling of one of the magic methods it will force
|
# lazily. On calling of one of the magic methods it will force
|
||||||
# the evaluation and store the result. Afterwards, the result
|
# the evaluation and store the result. Afterwards, the result
|
||||||
|
|
Loading…
Reference in New Issue