changeset 559:8831b754f81e trunk

Allow disabling cache behaviour in LazyProxy (fixes #208, initial patch Pedro Algarvio)
author fschwarz
date Wed, 31 Aug 2011 12:38:06 +0000
parents 4e561e6411ba
children 86524be05b60
files ChangeLog babel/support.py babel/tests/support.py
diffstat 3 files changed, 29 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,8 @@
  * 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
--- a/babel/support.py
+++ b/babel/support.py
@@ -183,18 +183,22 @@
     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)
--- a/babel/tests/support.py
+++ b/babel/tests/support.py
@@ -163,10 +163,32 @@
             '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__':
Copyright (C) 2012-2017 Edgewall Software