[Checkins] SVN: zope.copy/trunk/ Fix resource warning under Python 3.2.

Tres Seaver cvs-admin at zope.org
Wed Jun 13 21:00:19 UTC 2012


Log message for revision 126856:
  Fix resource warning under Python 3.2.

Changed:
  _U  zope.copy/trunk/
  U   zope.copy/trunk/src/zope/copy/__init__.py

-=-
Modified: zope.copy/trunk/src/zope/copy/__init__.py
===================================================================
--- zope.copy/trunk/src/zope/copy/__init__.py	2012-06-13 21:00:11 UTC (rev 126855)
+++ zope.copy/trunk/src/zope/copy/__init__.py	2012-06-13 21:00:15 UTC (rev 126856)
@@ -21,30 +21,30 @@
 
 def clone(obj):
     """Clone an object by pickling and unpickling it"""
-    tmp = tempfile.TemporaryFile()
-    persistent = CopyPersistent(obj)
+    with tempfile.TemporaryFile() as tmp:
+        persistent = CopyPersistent(obj)
 
-    # Pickle the object to a temporary file
-    pickler = Pickler(tmp, 2)
-    pickler.persistent_id = persistent.id
-    pickler.dump(obj)
+        # Pickle the object to a temporary file
+        pickler = Pickler(tmp, 2)
+        pickler.persistent_id = persistent.id
+        pickler.dump(obj)
 
-    # Now load it back
-    tmp.seek(0)
-    unpickler = Unpickler(tmp)
-    unpickler.persistent_load = persistent.load
+        # Now load it back
+        tmp.seek(0)
+        unpickler = Unpickler(tmp)
+        unpickler.persistent_load = persistent.load
 
-    res = unpickler.load()
-    # run the registered cleanups
-    def convert(obj):
-        pid = _get_pid(pickler, id(obj))
-        try:
-            return _get_obj(unpickler, pid)
-        except KeyError: #pragma NO COVER pypy
-            return _get_obj(unpickler, str(pid))
-    for call in persistent.registered:
-        call(convert)
-    return res
+        res = unpickler.load()
+        # run the registered cleanups
+        def convert(obj):
+            pid = _get_pid(pickler, id(obj))
+            try:
+                return _get_obj(unpickler, pid)
+            except KeyError: #pragma NO COVER pypy
+                return _get_obj(unpickler, str(pid))
+        for call in persistent.registered:
+            call(convert)
+        return res
 
 def copy(obj):
     """Clone an object, clearing the __name__ and __parent__ attribute



More information about the checkins mailing list