tricks/xmlrpc
This is a simple recipe how to use XMLRPC with web.py
I wrote some generic xmlrpc adaptor for web.py and drop it to webxml.py, you can see this below
import web
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
dispatcher = SimpleXMLRPCDispatcher()
def init(urllist):
global dispatcher
for it in range(len(urllist)/2):
dispatcher.register_function(urllist[it+1], urllist[it])
class rpc:
def GET(self):
global dispatcher
methods = dispatcher.system_listMethods()
web.header('Content-Type', 'text/html')
print "<body><h1>Error!</h1>" print "Method GET is not alowed for XMLRPC requests" print "List of available methods:" print "<ul>" for method in methods:
sig = dispatcher.system_methodSignature(method)
help = dispatcher.system_methodHelp(method)
print "<li><b>%s</b>: [%s] %s</li>" % (method, sig, help)
print "</ul>" print "Be careful" print "</body>"
def POST(self):
global dispatcher
response = dispatcher._marshaled_dispatch(web.webapi.data())
web.header('Content-length', str(len(response)))
print response
This library slightly based on xmlrpc Django code, but rewriten from scratch at last stage. Now look at simple usage pattern
import web
import webxml
def multiply(x,y):
return x*y
xmlrpcurls = (
'mult', multiply
# Look! First parameter is a public name, second is a lambda value, not string!
)
urls = (
'/rpc/', 'webxml.rpc' )
webxml.init(xmlrpcurls)
if __name__ == "__main__": web.run(urls, globals())
