diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2009-10-15 14:12:34 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2009-10-15 14:12:34 +0000 |
| commit | a2d8acbacda353248fd191b97155cd4cf27dcd66 (patch) | |
| tree | 5941baafeb1c30840e837043418e9a362a83000e /django/utils | |
| parent | c161bf21f0ab9f2945ae7a44e5757b071f7eb712 (diff) | |
Fixed a regression on Python 2.6 caused by r11623
This might fix #12037, but I cannot reproduce that bug.
Refs #12037
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11625 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils')
| -rw-r--r-- | django/utils/functional.py | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/django/utils/functional.py b/django/utils/functional.py index 23614d1712..4fbc8cd630 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -257,9 +257,8 @@ class LazyObject(object): A wrapper for another class that can be used to delay instantiation of the wrapped class. - This is useful, for example, if the wrapped class needs to use Django - settings at creation time: we want to permit it to be imported without - accessing settings. + By subclassing, you have the opportunity to intercept and alter the + instantiation. If you don't need to do that, use SimpleLazyObject. """ def __init__(self): self._wrapped = None @@ -287,3 +286,26 @@ class LazyObject(object): """ raise NotImplementedError + +class SimpleLazyObject(LazyObject): + """ + A lazy object initialised from any function. + + Designed for compound objects of unknown type. For builtins or objects of + known type, use django.utils.functional.lazy. + """ + def __init__(self, func): + """ + Pass in a callable that returns the object to be wrapped. + """ + self.__dict__['_setupfunc'] = func + # For some reason, we have to inline LazyObject.__init__ here to avoid + # recursion + self._wrapped = None + + def __str__(self): + if self._wrapped is None: self._setup() + return str(self._wrapped) + + def _setup(self): + self._wrapped = self._setupfunc() |
