[ZODB-Dev] ZODB Py3k porting status

Marius Gedminas marius at gedmin.as
Sun Mar 3 09:38:25 UTC 2013


On Sat, Mar 02, 2013 at 08:31:37PM -0500, Tres Seaver wrote:
> Thanks to Marius and Stephan's efforts (with a little help from me), the
> 'py3' branch of ZODB now passes all unit tests, with most of the
> many-many ResourceWarnings now suppressed as well (we are down to the
> last two unclosed blob files).

We are?  Crud, I thought I got them all.

> Today, I worked on making the branch work with Python 3.2.  In order to
> support 3.2, I needed a 3.2-compatible verison of 'zodbpickle', as well
> as ZConfig.  The ZConfig changes were trivial (avoiding u'' literals):  I
> pushed out a 3.0.3 release with those changes.
> 
> For 'zodbpickle', I created a second fork of '_pickle.c' (from the Python
> 3.2.3 release), and select between the two variants at build time based
> on the version of Python.  I couldn't make a release there (Marius is the
> sole PyPI owner / maintainer),

That was an oversight.  You're now an owner on PyPI, and so is Stephan,
in case he needs to run his magic script to grant everyone rights.

(I hear PyCon is approaching.  Any chance of a PyPI sprint to add
groups/organizations to the authorization model?)

> but was able to install it in my ZODB
> checkout's '.tox/py32' virtualenv for testing.

An update for further plans before the ZODB py3 branch can be considered to be
merge-ready:

  * we want to use noload() for garbage collection etc:

     1. Python 3's pickle doesn't support it
     2. zodbpickle's noload() can't handle the way Python 3 pickles OIDs
        (as a function call to _codecs.encode(u"\x00\x00\x00...", "latin-1")
        instead of a SHORT_BINSTRING b"\x00\x00\x00...")
     3. instead of changing noload() to interpret function calls we want
        to change zodbpickle's Pickler to pickle binary strings using
        SHORT_BINSTRING, i.e. the way Python 2.x is pickling them.

  * there are a few cases scattered through the code base that check
    sys.version to see whether they need to assign to inst_persistent_id
    or just persistent_id on the Pickler.  I'd like to move that check
    into _compat.py.

  * there were zero failing tests before we switched to zodbpickle,
    which indicates missing tests: pickles produces on Python 2 most
    likely cannot be loaded on Python 3 (that was one of the main
    reasons for zodbpickle's existence).

Marius Gedminas
-- 
"You know, you never truly appreciate how handy living next to a creek
is until you are on fire."
                -- James Nicoll, rec.arts.sf.written, 1/25/05
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: Digital signature
URL: <http://mail.zope.org/pipermail/zodb-dev/attachments/20130303/4f80b591/attachment.sig>


More information about the ZODB-Dev mailing list