Joachim Schmitz wrote:
--On Mittwoch, Mai 29, 2002 16:15:44 +0100 Toby Dickenson <tdickenson@geminidataloggers.com> wrote:
On Wednesday 29 May 2002 3:24 pm, Joachim Schmitz wrote:
Hi,
I want to acces a ZCatalog via xmlrpc, but
server=xmlrpclib.Server("http://myserver.aixtraware.de" ,BasicAuthTransport(username="user",password="pw ")) r = server.Catalog()
results in
<Fault -1: "Unexpected Zope exception: cannot marshal <type 'IOBTreeItems'> objects">
What is to do, to enable marshalling of those types ?
XML-RPC only has a limited set of types it can marshal and that can't be changed without breaking the standard. The alternative would be sending Python pickles encoded as XML-RPC binary over the wire.
You could hack xmlrpclib to marshall those object, but I dont recommend it. Those objects can be big (but lazily evaluated), and you would be opening a significant denial of service vulnerability in your server.
But it also can be very interesting for exporting data from a Zope site, to be used in other applications.
I suggest you create a method (Python Script?) that makes the catalog query, sanitizes the response by making sure it is not too big, and returns a vanilla list or dictionary
I wrote a little pythonscript to export data from a ZPatterns Rack, where the data is stored in a propertysheet:
res=context.Catalog()
t=[] for m in sequence.sort(res,(('reg_id','cmp','desc'),)): r=m.propertysheets.Basic.propertyItems() t.append(r) return t
This runs fine, when I test the script. But when I access it with xmlrpc, I get:
<Fault -1: "Unexpected Zope exception: cannot marshal <type 'None'> objects">
I changed Zope xmlrpclib.py and added to the Marshaller class:
def dump_None(self, value): self.write("<value><string>None</string></value>\n") dispatch[NoneType] = dump_None
Now that works, but I think the xmlrpclib.py, should be able to marshall the "None" type.
None doesn't have an equivalent type in XML-RPC. -- Marc-Andre Lemburg CEO eGenix.com Software GmbH ______________________________________________________________________ Company & Consulting: http://www.egenix.com/ Python Software: http://www.egenix.com/files/python/ Meet us at EuroPython 2002: http://www.europython.org/