[ZODB-Dev] ExportImport.py: failing on import of extension class
Paul Winkler
pw_lists at slinkp.com
Thu Apr 26 10:44:54 EDT 2007
On Thu, Apr 26, 2007 at 10:10:17AM -0400, Jim Fulton wrote:
> On Apr 26, 2007, at 2:13 AM, Paul Winkler wrote:
>
> >In ExportImport._importDuringCommit() I found this little gem:
> >
> > pfile = StringIO(data)
> > unpickler = Unpickler(pfile)
> > unpickler.persistent_load = persistent_load
> >
> > newp = StringIO()
> > pickler = Pickler(newp, 1)
> > pickler.persistent_id = persistent_id
> >
> > pickler.dump(unpickler.load())
> > pickler.dump(unpickler.load())
> > data = newp.getvalue()
> >
> >
> >What's with the two load-and-dump lines near the end?
>
> It is transforming the pickles by assigning new object ids to the
> objects imported.
> The unpickler unpickles the pickles into an internal format that can
> be creates without actually creating the original objects. It
> collects object ids and reassigns them. The pickler then turns the
> internal data back into pickles with the new object ids.
> This is done in 2 steps because database records consist of 2
> pickles. The first has enough information to create a ghost. The
> second pickle contains the object state.
Ah, thanks! So that means my import is succeeding with the ghost
and failing on object state.
Any ideas how to troubleshoot the failure in copy_reg.__newobj__?
Why is a pickle of an old-style extension class getting run through
copy_reg.__newobj__() which only works on new-style classes?
(Or am I misinterpreting the problem?)
Is this likely a sign of software version skew?
Or what?
Traceback (innermost last):
Module ZPublisher.Publish, line 101, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 39, in call_object
Module OFS.ObjectManager, line 543, in manage_importObject
Module OFS.ObjectManager, line 560, in _importObjectFromFile
Module ZODB.ExportImport, line 86, in importFile
Module ZODB.Transaction, line 241, in commit
Module ZODB.Transaction, line 356, in _commit_objects
Module ZODB.Connection, line 344, in commit
Module ZODB.ExportImport, line 153, in _importDuringCommit
Module pickle, line 872, in load
Module pickle, line 1153, in load_reduce
Module copy_reg, line 95, in __newobj__
AttributeError: __new__
--
Paul Winkler
http://www.slinkp.com
More information about the ZODB-Dev
mailing list