[Zope-Checkins] CVS: Zope2 - PersistentMapping.py:1.9

chrism@serenade.digicool.com chrism@serenade.digicool.com
Tue, 5 Jun 2001 14:45:33 -0400


Update of /cvs-repository/Zope2/lib/python/ZODB
In directory serenade:/home/chrism/sandboxes/Post24BugFixing/lib/python/ZODB

Modified Files:
	PersistentMapping.py 
Log Message:
made keys() method return a *copy* of the cached keys list, preventing mutations of the cached keys list that could cause later problems.  (Collector 2283).


--- Updated File PersistentMapping.py in package Zope2/lib/python/ZODB --
--- PersistentMapping.py	2000/04/21 20:06:34	1.8
+++ PersistentMapping.py	2001/06/05 18:45:33	1.9
@@ -140,7 +140,7 @@
         return map(lambda k, d=self: (k,d[k]), self.keys())
 
     def keys(self):
-        try: return self._v_keys
+        try: return list(self._v_keys) # return a copy (Collector 2283)
         except: pass
         keys=self._v_keys=filter(
             lambda k: not isinstance(k,types.StringType) or k[:1]!='_',
@@ -151,6 +151,8 @@
     def update(self, b):
         a=self._container
         for k, v in b.items(): a[k] = v
+        try: del self._v_keys
+        except: pass
         self._p_changed=1
 
     def values(self):



--- Updated File PersistentMapping.py in package Zope2 --
--- PersistentMapping.py	2000/04/21 20:06:34	1.8
+++ PersistentMapping.py	2001/06/05 18:45:33	1.9
@@ -140,7 +140,7 @@
         return map(lambda k, d=self: (k,d[k]), self.keys())
 
     def keys(self):
-        try: return self._v_keys
+        try: return list(self._v_keys) # return a copy (Collector 2283)
         except: pass
         keys=self._v_keys=filter(
             lambda k: not isinstance(k,types.StringType) or k[:1]!='_',
@@ -151,6 +151,8 @@
     def update(self, b):
         a=self._container
         for k, v in b.items(): a[k] = v
+        try: del self._v_keys
+        except: pass
         self._p_changed=1
 
     def values(self):