]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Allow disabling cache behaviour in LazyProxy (fixes #208, initial patch Pedro Algarvio)
authorFelix Schwarz <felix.schwarz@oss.schwarz.eu>
Wed, 31 Aug 2011 12:38:06 +0000 (12:38 +0000)
committerFelix Schwarz <felix.schwarz@oss.schwarz.eu>
Wed, 31 Aug 2011 12:38:06 +0000 (12:38 +0000)
ChangeLog
babel/support.py
babel/tests/support.py

index 2ed745f54e8db557d2fdc6bec4ba467fb84cdf85..17262bbdec67461eea2aac20694f147fbc9a1654 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,8 @@ http://svn.edgewall.org/repos/babel/tags/1.0.0/
  * Only use bankers round algorithm as a tie breaker if there are two nearest
    numbers, round as usual if there is only one nearest number (#267, patch by 
    Martin)
+ * Allow disabling cache behaviour in LazyProxy (#208, initial patch Pedro 
+   Algarvio)
 
 
 Version 0.9.6
index 4ca83cf8c895a3ea150f939f36755aaa4791cae9..262522d4a6a13781f23f53a9316f2990ae927a1b 100644 (file)
@@ -183,18 +183,22 @@ class LazyProxy(object):
     Hello, universe!
     Hello, world!
     """
-    __slots__ = ['_func', '_args', '_kwargs', '_value']
+    __slots__ = ['_func', '_args', '_kwargs', '_value', '_is_cache_enabled']
 
     def __init__(self, func, *args, **kwargs):
+        is_cache_enabled = kwargs.pop('enable_cache', True)
         # Avoid triggering our own __setattr__ implementation
         object.__setattr__(self, '_func', func)
         object.__setattr__(self, '_args', args)
         object.__setattr__(self, '_kwargs', kwargs)
+        object.__setattr__(self, '_is_cache_enabled', is_cache_enabled)
         object.__setattr__(self, '_value', None)
 
     def value(self):
         if self._value is None:
             value = self._func(*self._args, **self._kwargs)
+            if not self._is_cache_enabled:
+                return value
             object.__setattr__(self, '_value', value)
         return self._value
     value = property(value)
index 1665869a1b5b9721c1e553be9ac0bd7f61ce566d..35d0dcff2d8bd1dd3aa25b88af80ed1dd41df97f 100644 (file)
@@ -163,10 +163,32 @@ class TranslationsTestCase(unittest.TestCase):
             'VohsCTXD1', self.translations.ldnpgettext('messages1', 'foo', 'foo1',
                                                        'foos1', 2))
 
+
+class LazyProxyTestCase(unittest.TestCase):
+    def test_proxy_caches_result_of_function_call(self):
+        self.counter = 0
+        def add_one():
+            self.counter += 1
+            return self.counter
+        proxy = support.LazyProxy(add_one)
+        self.assertEqual(1, proxy.value)
+        self.assertEqual(1, proxy.value)
+    
+    def test_can_disable_proxy_cache(self):
+        self.counter = 0
+        def add_one():
+            self.counter += 1
+            return self.counter
+        proxy = support.LazyProxy(add_one, enable_cache=False)
+        self.assertEqual(1, proxy.value)
+        self.assertEqual(2, proxy.value)
+
+
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(doctest.DocTestSuite(support))
     suite.addTest(unittest.makeSuite(TranslationsTestCase, 'test'))
+    suite.addTest(unittest.makeSuite(LazyProxyTestCase, 'test'))
     return suite
 
 if __name__ == '__main__':