Browse files

Fixed #5560 -- Improved the way we create __str__ and __unicode__ met…

…hods in

lazy() objects. This fixes things for Jython and makes the code more readable,
even for CPython. Thanks, Leo Soto.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
malcolmt committed Oct 21, 2007
1 parent 2adcb3f commit bab4fdc9fd1be47575f440816b4dfc422947d368
Showing with 7 additions and 9 deletions.
  1. +7 −9 django/utils/
@@ -53,7 +53,11 @@ def __init__(self, args, kw):
self._delegate_unicode = unicode in resultclasses
assert not (self._delegate_str and self._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
if self._delegate_unicode:
self.__unicode__ = self.__unicode_cast
# Each call to lazy() makes a new __proxy__ object, so this
# doesn't interfere with any other lazy() results.
__proxy__.__unicode__ = __proxy__.__unicode_cast
elif self._delegate_str:
__proxy__.__str__ = __proxy__.__str_cast
def __promise__(self, klass, funcname, func):
# Builds a wrapper around some magic method and registers that magic
@@ -72,14 +76,8 @@ def __wrapper__(*args, **kw):
def __unicode_cast(self):
return self.__func(*self.__args, **self.__kw)
def __str__(self):
# As __str__ is always a method on the type (class), it is looked
# up (and found) there first. So we can't just assign to it on a
# per-instance basis in __init__.
if self._delegate_str:
return str(self.__func(*self.__args, **self.__kw))
return Promise.__str__(self)
def __str_cast(self):
return str(self.__func(*self.__args, **self.__kw))
def __cmp__(self, rhs):
if self._delegate_str:

0 comments on commit bab4fdc

Please sign in to comment.