[Checkins] SVN: zope.component/trunk/src/zope/component/ Don't pickle registry flattened bases in the 'ro' attribute.

Ross Patterson cvs-admin at zope.org
Wed Aug 1 04:13:06 UTC 2012


Log message for revision 127412:
  Don't pickle registry flattened bases in the 'ro' attribute.
  
  This avoids pickle references that are redundant with the '__bases__'
  pickling.

Changed:
  U   zope.component/trunk/src/zope/component/persistentregistry.py
  U   zope.component/trunk/src/zope/component/tests/test_persistentregistry.py

-=-
Modified: zope.component/trunk/src/zope/component/persistentregistry.py
===================================================================
--- zope.component/trunk/src/zope/component/persistentregistry.py	2012-08-01 04:12:45 UTC (rev 127411)
+++ zope.component/trunk/src/zope/component/persistentregistry.py	2012-08-01 04:13:02 UTC (rev 127412)
@@ -30,11 +30,14 @@
         state = super(PersistentAdapterRegistry, self).__getstate__().copy()
         for name in self._delegated:
             state.pop(name, 0)
+        state.pop('ro', None)
         return state
 
     def __setstate__(self, state):
+        bases = state.pop('__bases__', ())
         super(PersistentAdapterRegistry, self).__setstate__(state)
         self._createLookup()
+        self.__bases__ = bases
         self._v_lookup.changed(self)
         
         

Modified: zope.component/trunk/src/zope/component/tests/test_persistentregistry.py
===================================================================
--- zope.component/trunk/src/zope/component/tests/test_persistentregistry.py	2012-08-01 04:12:45 UTC (rev 127411)
+++ zope.component/trunk/src/zope/component/tests/test_persistentregistry.py	2012-08-01 04:13:02 UTC (rev 127412)
@@ -96,7 +96,7 @@
         self.assertEqual(state['_provided'], {})
         self.assertEqual(state['_adapters'], [])
         self.assertEqual(state['_subscribers'], [])
-        self.assertEqual(state['ro'], [registry] + list(bases))
+        self.assertNotIn('ro', state)
 
     def test___getstate___skips_delegated_names(self):
         registry, jar, OID = self._makeOneWithJar()
@@ -112,7 +112,16 @@
         registry.__setstate__(state)
         self.assertTrue('_v_lookup' in registry.__dict__)
 
+    def test___setstate___rebuilds__ro(self):
+        from zope.component import globalSiteManager
+        bases = (globalSiteManager.adapters, globalSiteManager.utilities)
+        registry, jar, OID = self._makeOneWithJar(bases=bases)
+        state = registry.__getstate__()
+        registry.__setstate__(state)
+        self.assertEqual(registry.__bases__, bases)
+        self.assertEqual(registry.ro, [registry] + list(bases))
 
+
 class PersistentComponentsTests(unittest.TestCase):
 
     def _getTargetClass(self):



More information about the checkins mailing list