[Checkins] SVN: zodbcode/trunk/src/zodbcode/ func_globals of persistent function which has side effect must

Yusei Tahara yusei at domen.cx
Thu Feb 7 18:14:06 EST 2008


Log message for revision 83656:
  func_globals of persistent function which has side effect must
  synchronize with persistent module's dict at any time.
  

Changed:
  U   zodbcode/trunk/src/zodbcode/module.py
  U   zodbcode/trunk/src/zodbcode/tests/test_module.py

-=-
Modified: zodbcode/trunk/src/zodbcode/module.py
===================================================================
--- zodbcode/trunk/src/zodbcode/module.py	2008-02-07 21:22:59 UTC (rev 83655)
+++ zodbcode/trunk/src/zodbcode/module.py	2008-02-07 23:14:05 UTC (rev 83656)
@@ -83,6 +83,14 @@
         state["__builtins__"] = __builtin__
         self.__dict__.update(state)
 
+    def _p_invalidate(self):
+        for i in self.__dict__.itervalues():
+            if (i is not self and
+                getattr(i, '_v_side_effect', False) is True and
+                i._p_state!=GHOST):
+                i._p_invalidate()
+        Persistent._p_invalidate(self)
+
 class PersistentPackage(PersistentModule):
     # XXX Is it okay that these packages don't have __path__?
 

Modified: zodbcode/trunk/src/zodbcode/tests/test_module.py
===================================================================
--- zodbcode/trunk/src/zodbcode/tests/test_module.py	2008-02-07 21:22:59 UTC (rev 83655)
+++ zodbcode/trunk/src/zodbcode/tests/test_module.py	2008-02-07 23:14:05 UTC (rev 83656)
@@ -223,8 +223,15 @@
         import effect
         effect.inc()
         transaction.commit()
-        effect.inc()
+        old_value = effect.x
+        return_value = effect.inc()
         self.assert_(effect._p_changed)
+        self.assertEqual(return_value, effect.x)
+        self.assert_(old_value < effect.x)
+        transaction.abort()
+        self.assertEqual(old_value, effect.x)
+        self.assertEqual(return_value, effect.inc())
+        self.assertEqual(return_value, effect.x)
         self.useNewConnection()
 
     def testBuiltins(self):



More information about the Checkins mailing list