[Zope-dev] zope.xmlpickle
Michael Dunstan
michael.dunstan at gmail.com
Fri May 26 06:18:49 EDT 2006
Hi all,
I have been trying out ``zope.xmlpickle`` as a alternative to
XMLExportImport in Zope2. Seems to do the job just fine. Grab Zope
2.9.3 and install zope.xmlpickle by hand using something of the form:
% cd /opt/Zope-2.9/lib/python/zope
% svn checkout svn://svn.zope.org/repos/main/Zope3/trunk/src/zope/xmlpickle
Then using zopectl debug:
>>> from zope.xmlpickle import dumps
Picking on something simple to start with:
>>> xml = dumps(app.acl_users.aq_base)
>>> print xml
<?xml version="1.0" encoding="utf-8" ?>
<pickle>
<initialized_object>
<klass>
<global name="__newobj__" module="copy_reg"/>
</klass>
<arguments>
<tuple>
<global name="SiteErrorLog"
module="Products.SiteErrorLog.SiteErrorLog"/>
</tuple>
</arguments>
<state>
<dictionary>
<item key="_ignored_exceptions">
<tuple>
<string>Unauthorized</string>
<string>Redirect</string>
<string>NotFound</string>
</tuple>
</item>
<item key="copy_to_zlog">
<true/>
</item>
<item key="keep_entries">
<int>20</int>
</item>
</dictionary>
</state>
</initialized_object>
</pickle>
That looks okay. But I strike problems with ``Missing.Value`` when
trying this on something that includes a catalog. The simplest way
to recreate the problem::
>>> import Missing
>>> dumps(Missing.Value())
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/opt/Zope-2.9/lib/python/zope/xmlpickle/xmlpickle.py", line
146, in dumps
p = _dumpsUsing_PicklerThatSortsDictItems(ob, 1)
File "/opt/Zope-2.9/lib/python/zope/xmlpickle/xmlpickle.py", line
73, in _dumpsUsing_PicklerThatSortsDictItems
_PicklerThatSortsDictItems(file, bin).dump(object)
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/pickle.py",
line 231, in dump
self.save(obj)
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/pickle.py",
line 324, in save
self.save_global(obj, rv)
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/pickle.py",
line 753, in save_global
module = whichmodule(obj, name)
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/pickle.py",
line 825, in whichmodule
if func in classmap:
TypeError: unhashable type
Meanwhile, dumps seems to work quite happy with many other examples
that I tried. Including all the content of a plone site minus a couple
of the catalogs. And ``zope.xmlpickle.loads`` seems to do the right thing too.
Any suggestions on getting a successful dumps of a Missing.Value?
Cheers
Michael
More information about the Zope-Dev
mailing list