[Checkins] SVN: zope.copy/trunk/ Add support for Python 3.2.

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


Log message for revision 126855:
  Add support for Python 3.2.

Changed:
  _U  zope.copy/trunk/
  U   zope.copy/trunk/CHANGES.txt
  U   zope.copy/trunk/setup.py
  U   zope.copy/trunk/src/zope/copy/__init__.py
  A   zope.copy/trunk/src/zope/copy/_compat.py
  U   zope.copy/trunk/src/zope/copy/examples.py
  U   zope.copy/trunk/tox.ini

-=-
Modified: zope.copy/trunk/CHANGES.txt
===================================================================
--- zope.copy/trunk/CHANGES.txt	2012-06-13 20:06:12 UTC (rev 126854)
+++ zope.copy/trunk/CHANGES.txt	2012-06-13 21:00:11 UTC (rev 126855)
@@ -5,6 +5,8 @@
 4.0.0 (unreleased)
 ------------------
 
+- Added support for Python 3.2.
+
 - Dropped ``zope.component`` as a testing requirement. Instead, register
   explicit (dummy) adapter hooks where needed.
 

Modified: zope.copy/trunk/setup.py
===================================================================
--- zope.copy/trunk/setup.py	2012-06-13 20:06:12 UTC (rev 126854)
+++ zope.copy/trunk/setup.py	2012-06-13 21:00:11 UTC (rev 126855)
@@ -45,7 +45,10 @@
           'Programming Language :: Python :: 2',
           'Programming Language :: Python :: 2.6',
           'Programming Language :: Python :: 2.7',
+          'Programming Language :: Python :: 3',
+          'Programming Language :: Python :: 3.2',
           'Programming Language :: Python :: Implementation :: CPython',
+          'Programming Language :: Python :: Implementation :: PyPy',
           'Topic :: Database',
           ],
       url='http://pypi.python.org/pypi/zope.copy',

Modified: zope.copy/trunk/src/zope/copy/__init__.py
===================================================================
--- zope.copy/trunk/src/zope/copy/__init__.py	2012-06-13 20:06:12 UTC (rev 126854)
+++ zope.copy/trunk/src/zope/copy/__init__.py	2012-06-13 21:00:11 UTC (rev 126855)
@@ -12,9 +12,12 @@
 #
 ##############################################################################
 import tempfile
-import cPickle
 
 from zope.copy import interfaces
+from zope.copy._compat import Pickler
+from zope.copy._compat import Unpickler
+from zope.copy._compat import _get_pid
+from zope.copy._compat import _get_obj
 
 def clone(obj):
     """Clone an object by pickling and unpickling it"""
@@ -22,23 +25,23 @@
     persistent = CopyPersistent(obj)
 
     # Pickle the object to a temporary file
-    pickler = cPickle.Pickler(tmp, 2)
+    pickler = Pickler(tmp, 2)
     pickler.persistent_id = persistent.id
     pickler.dump(obj)
 
     # Now load it back
     tmp.seek(0)
-    unpickler = cPickle.Unpickler(tmp)
+    unpickler = Unpickler(tmp)
     unpickler.persistent_load = persistent.load
 
     res = unpickler.load()
     # run the registered cleanups
     def convert(obj):
-        pid = pickler.memo[id(obj)][0]
+        pid = _get_pid(pickler, id(obj))
         try:
-            return unpickler.memo[pid]
+            return _get_obj(unpickler, pid)
         except KeyError: #pragma NO COVER pypy
-            return unpickler.memo[str(pid)]
+            return _get_obj(unpickler, str(pid))
     for call in persistent.registered:
         call(convert)
     return res

Added: zope.copy/trunk/src/zope/copy/_compat.py
===================================================================
--- zope.copy/trunk/src/zope/copy/_compat.py	                        (rev 0)
+++ zope.copy/trunk/src/zope/copy/_compat.py	2012-06-13 21:00:11 UTC (rev 126855)
@@ -0,0 +1,42 @@
+##############################################################################
+#
+# Copyright (c) 2012 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+import sys
+
+PY3 = sys.version_info[0] >= 3
+
+if PY3: #pragma NO COVER
+    from pickle import Pickler
+    from pickle import Unpickler
+
+    def _get_pid(pickler, oid):
+        return pickler.memo.copy()[oid][0] #stupid proxy
+
+    def _get_obj(unpickler, pid):
+        return unpickler.memo.copy()[pid]
+
+else: #pragma NO COVER
+    from cPickle import Pickler
+    from cPickle import Unpickler
+
+    def _get_pid(pickler, oid):
+        return pickler.memo[oid][0]
+
+    def _get_obj(unpickler, pid):
+        return unpickler.memo[pid]
+
+def _apply(func, args=(), kw=None): # 'apply' is missing in Py3k
+    if kw is None:
+        kw = {}
+    return func(*args, **kw)

Modified: zope.copy/trunk/src/zope/copy/examples.py
===================================================================
--- zope.copy/trunk/src/zope/copy/examples.py	2012-06-13 20:06:12 UTC (rev 126854)
+++ zope.copy/trunk/src/zope/copy/examples.py	2012-06-13 21:00:11 UTC (rev 126855)
@@ -15,6 +15,8 @@
 """
 import zope.location.location
 
+from zope.copy._compat import _apply
+
 class Demo(object): #pragma NO COVER
 
     _frozen = None
@@ -49,14 +51,14 @@
 
 
 class Other(object): #pragma NO COVER
-    @apply
+    @_apply
     def __name__():
         def fget(self):
             return 'something'
         def fset(self, value):
             raise AttributeError
         return property(fget, fset)
-    @apply
+    @_apply
     def __parent__():
         def fget(self):
             return root

Modified: zope.copy/trunk/tox.ini
===================================================================
--- zope.copy/trunk/tox.ini	2012-06-13 20:06:12 UTC (rev 126854)
+++ zope.copy/trunk/tox.ini	2012-06-13 21:00:11 UTC (rev 126855)
@@ -3,8 +3,7 @@
 # Jython support pending 2.7 support, due 2012-07-15 or so.  See:
 # http://fwierzbicki.blogspot.com/2012/03/adconion-to-fund-jython-27.html
 #    py26,py27,py32,pypy,jython,coverage
-#    py26,py27,py32,pypy,coverage,docs
-    py26,py27,pypy,coverage,docs
+    py26,py27,py32,pypy,coverage,docs
 
 [testenv]
 commands = 



More information about the checkins mailing list