[Zope3-Users] XMLRPC Method with **kwargs
Jeremy Roberts
jerbear at incrediblepear.com
Thu Dec 13 19:29:29 EST 2007
Hello zope3 users!
I'm using Zope-3.3.1, and I'm trying to expose a method via xmlrpc and
I'm having trouble supporting a variable number of kwargs. My use case
does not know ahead of time how many arguments will be passed to the
method, hence the use of **kwargs in the method signature.
I get the error:
Unexpected Zope exception: TypeError: renderCode() takes at most 1
argument (2 given).
The interface/class definitions with the method to be exposed are
straight-forward:
class IToolCode(IFolder):
"""Code that is associated with a tool."""
code = Text(
title=u'Code',
description=u'The code.',
required=True,
)
def renderCode():
"""Use customization options posted via XMLRPC and ZPT to
render customized code."""
class ToolCode(Folder):
"""See IToolCode."""
implements(IToolCode)
code = FieldProperty(IToolCode['code'])
def renderCode(self, **kwargs):
pt = PageTemplate()
pt.write(self.code)
return pt(customizations=kwargs)
The XMLRPC view uses zope.app.publisher.xmlrpc.MethodPublisher and is
simple:
class ToolCodeXMLRPC(MethodPublisher):
"""An XMLRPC view for ToolCode objects."""
def renderCode(self, **kwargs):
return self.context.renderCode(kwargs)
The XMLRPC view is configured like so:
<xmlrpc:view
for="src.interfaces.IToolCode"
methods="renderCode"
class="src.browser.views.ToolCodeXMLRPC"
permission="src.ViewProtected"
/>
The XML posted by my JavaScript also seems to be appropriate:
<?xml version="1.0"?>
<methodCall>
<methodName>renderCode</methodName>
<params>
<param>
<value>
<struct>
<member><name>color</name><value><string>blue</string></value></member>
<member><name>number</name><value><string>1</string></value></member>
</struct>
</value>
</param>
</params>
</methodCall>
I'm at a loss for what I am missing. Has anyone successfully exposed a
method via XMLRPC that used **kwargs?
Thanks for any advice!
-Jer
More information about the Zope3-users
mailing list