[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