- 18 Mar, 2013 2 commits
-
-
Michael Mulich authored
Pull in the development version of zodbpickle which has recent changes which allow tests to pass at this time.
-
Michael Mulich authored
-
- 13 Mar, 2013 1 commit
-
-
Albertas Agejevas authored
-
- 08 Mar, 2013 2 commits
-
-
Albertas Agejevas authored
The close() method is not in the interface and is not provided by ZEO's implementation.
-
Albertas Agejevas authored
-
- 05 Mar, 2013 1 commit
-
-
Marius Gedminas authored
This uses bytes_as_strings=True option introduced in zodbpickle 0.2 for this purpose. This way pickles produced on Python 3 are nearly the same as on Python 2. There are some slight differences (Python 3 seems to perform more memoizations which grows the size of some pickles by a couple of bytes), but they're immaterial. Now we can use zodbpickle's noload() on Python 3 to scan pickles for persistent references. We couldn't do that before, because Python 3 normally pickles byte strings as calls to codecs.encode(u'latin1-data', 'latin-1'), and noload() doesn't interpret the REDUCE opcode involved in that representation. Note that when you're pickling byte strings using bytes_as_strings=True, you have to load them using encoding='bytes' (which breaks instances, so cannot be used) or using errors='bytes' (which mean some bytestrings may get unpickled as unicode instead). I've tried hard to discover every place that unpickles OIDs and added conversion to bytes in those places. Applications dealing with binary data be prepared to handle bytestrings that unexpectedly become unicode on unpickling. That's the price of Python 2 compatibility.
-
- 03 Mar, 2013 3 commits
-
-
Tres Seaver authored
-
Tres Seaver authored
-
Tres Seaver authored
-
- 02 Mar, 2013 2 commits
-
-
Tres Seaver authored
-
Tres Seaver authored
Instead, just remove the non-ASCII characters, regaining Python 3.2 compat.
-
- 01 Mar, 2013 5 commits
-
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
- 28 Feb, 2013 16 commits
-
-
Tres Seaver authored
-
Tres Seaver authored
-
Tres Seaver authored
-
Tres Seaver authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
-
Marius Gedminas authored
Fixes some more of those ResourceWarnings
-
- 27 Feb, 2013 5 commits
-
-
Marius Gedminas authored
-
Marius Gedminas authored
Many more remain.
-
Marius Gedminas authored
-
Marius Gedminas authored
Since now we need to pass an extra argument to loads() and Unpickler(), but only on Python 3, the old way of ``from ZODB._compat import pickle`` no longer pays out, and I had to import the names directly.
-
Marius Gedminas authored
-
- 26 Feb, 2013 1 commit
-
-
Tres Seaver authored
-
- 20 Feb, 2013 2 commits
-
-
Marius Gedminas authored
The only remaining test failures are due to changed pickle sizes. I've discovered two reasons for that so far: 1) Python 3 pickles 'native strings' as BINUNICODE, Python 2 pickles 'native strings' as SHORT_BINSTRING, which is 3 bytes shorter. 2) Python 3 and also the 'pickle' module Python 2 pickles tuples like (UserDefinedClass, ) with an extra BINPUT opcode at the end, compared to 'cPickle' in Python 2 when given the same tuple: Python 2.7.3 (default, Sep 26 2012, 21:51:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pickle, cPickle >>> class MyClass(object): pass ... >>> len(pickle.dumps((MyClass, None), 1)) 26 >>> len(cPickle.dumps((MyClass, None), 1)) 24 The plan is to switch to zodbpickle instead of the builtin Python 3 pickle, then use encoding=bytes from http://bugs.python.org/issue6784 and fix the class-in-tuple encoding to match Python 2's cPickle.
-
Marius Gedminas authored
This test wants to rely on OIDs that are assigned to various objects. OIDs are assigned by Pickler.persistent_id(), which gets called during graph traversal in a nonspecific order (courtesy randomized hashes in Python 3), so if we want to be sure to have the right OIDs assigned to the right objects, we need to call connection.add() manually or commit after adding every object.
-