This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author rwgk
Recipients
Date 2002-01-10.22:49:22
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
Boost.Python 
(http://www.boost.org/libs/python/doc/index.html) is a
popular package for integrating Python and C++.

Boost.Python pickle support is broken when using 
Python 2.2 final, but
works with Python 2.2c1.

I noticed this difference:

diff /usr/local_cci/Python-
2.2/lib/python2.2/pickle.py /usr/local_cci/Python-
2.2c1/lib/python2.2/pickle.py
26c26
< __version__ = "$Revision: 1.56 $"       # Code 
version
---
> __version__ = "$Revision: 1.55 $"       # Code 
version
166,169d165
<             if issubclass(t, TypeType):
<                 self.save_global(object)
<                 return

I inserted one line in pickle.py:

% diff /usr/local_cci/Python-
2.2/lib/python2.2/pickle.py .
165a166
>             print "t", t

Result:

t <extension class pickle1.world at 1400c9c08>
t 
<boost::python::meta_class<boost::python::detail::exten
sion_instance> object at 0x3ffffe41ae0>
Traceback (most recent call last):
  File "zi", line 9, in ?
    pstr = pickle.dumps(wd)
  File "pickle.py", line 974, in dumps
    Pickler(file, bin).dump(object)
  File "pickle.py", line 115, in dump
    self.save(object)
  File "pickle.py", line 216, in save
    self.save_reduce(callable, arg_tup, state)
  File "pickle.py", line 241, in save_reduce
    save(callable)
  File "pickle.py", line 167, in save
    if issubclass(t, TypeType):
TypeError: issubclass() arg 1 must be a class

The following patch restores backward-compatibility:

% diff /usr/local_cci/Python-
2.2/lib/python2.2/pickle.py .
166,168c166,173
<             if issubclass(t, TypeType):
<                 self.save_global(object)
<                 return
---
>             try:
>                 issc = issubclass(t, TypeType)
>             except TypeError:
>                 pass
>             else:
>                 if issc:
>                     self.save_global(object)
>                     return

Remark: I also noticed that 2.2 cPickle still works 
for us
(double-checked) even though the CVS logs indicate 
that it was
also modified between 2.2c1 and 2.2.

Thanks,
        Ralf
History
Date User Action Args
2007-08-23 13:58:35adminlinkissue502085 messages
2007-08-23 13:58:35admincreate