From e4e28d907aee9f0e3977e2c6237406d7746c5719 Mon Sep 17 00:00:00 2001 From: Georg Bauer Date: Mon, 21 Nov 2005 10:41:54 +0000 Subject: [PATCH] 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 --- django/core/validators.py | 5 +++-- django/utils/functional.py | 10 +++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/django/core/validators.py b/django/core/validators.py index b68fc0ade8a..9889fadfd16 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -27,6 +27,7 @@ url_re = re.compile(r'^http://\S+$') from django.conf.settings import JING_PATH from django.utils.translation import gettext_lazy, ngettext +from django.utils.functional import Promise class ValidationError(Exception): def __init__(self, message): @@ -34,7 +35,7 @@ class ValidationError(Exception): if isinstance(message, list): self.messages = message 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] def __str__(self): # This is needed because, without a __str__(), printing an exception @@ -49,7 +50,7 @@ class CriticalValidationError(Exception): if isinstance(message, list): self.messages = message 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] def __str__(self): return str(self.messages) diff --git a/django/utils/functional.py b/django/utils/functional.py index f2ea12b1b28..69aeb818507 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -3,6 +3,14 @@ def curry(*args, **kwargs): return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items())) 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): """ 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 function is evaluated on every access. """ - class __proxy__: + class __proxy__(Promise): # This inner class encapsulates the code that should be evaluated # lazily. On calling of one of the magic methods it will force # the evaluation and store the result. Afterwards, the result