[Twisted-Python] Resource perplexity
Yet another newbie question: Firewall realities being what they are, I'd like to "multiplex" several things over a single web server/port (80 for production, but for now anything), so I've been hacking at the xmlrpc example, but no luck so far (see attached attempt -- it runs, but gives a "404" for /RPC2 or /RPC2/ ...). Two questions: (1) Is this an architecturally sound use of twisted? (Optimal?) (And if not, suggestions? :^) (2) If so, what am I doing blockheaded? Thanks again for your help and patience! -- Steve. Stephen C. Waterbury http://misspiggy.gsfc.nasa.gov/people/waterbug.html """ Derived from twisted xmlrpc example ... Adds a resource_mux resource to dispatch requests based on URL. ----------------------------------------------------------------- Hook up an object to XML-RPC. An example session: >>> s = xmlrpclib.Server('http://localhost:7080/RPC2/') >>> s.echo("lala") ['lala'] >>> s.echo("lala", 1) ['lala', 1] >>> s.echo("lala", 4) ['lala', 4] >>> s.echo("lala", 4, 3.4) ['lala', 4, 3.3999999999999999] >>> s.echo("lala", 4, [1, 2]) ['lala', 4, [1, 2]] """ from twisted.web import xmlrpc, resource from twisted.internet import defer import xmlrpclib class Echoer(xmlrpc.XMLRPC): """An example object to be published. Has five methods accessable by XML-RPC, 'echo', 'hello', 'defer's.echo('spam'), 'defer_fail' and 'fail. """ def xmlrpc_echo(self, *args): """Return all passed args.""" return args def xmlrpc_hello(self): """Return 'hello, world'.""" return 'hello, world!' def xmlrpc_defer(self): """Show how xmlrpc methods can return Deferred.""" return defer.succeed("hello") def xmlrpc_defer_fail(self): """Show how xmlrpc methods can return failed Deferred.""" return defer.fail(12) def xmlrpc_fail(self): """Show how we can return a failure code.""" return xmlrpclib.Fault(7, "Out of cheese.") def main(): from twisted.internet.app import Application from twisted.web import server # Resource multiplexer 'mux'; dispatches requests to Web, # XML-RPC, or SOAP handler, depending on base URL. Standard # base URLs: 'WWW', 'RPC2', 'SOAP' (probably should be # case-insensitive). mux = resource.Resource() mux.putChild('/RPC2/', Echoer()) # similarly for other handlers ... app = Application("thingy") app.listenTCP(7080, server.Site(mux)) app.run(0) if __name__ == '__main__': main()
On Mon, 2002-08-12 at 17:10, Steve Waterbury wrote:
def main(): from twisted.internet.app import Application from twisted.web import server # Resource multiplexer 'mux'; dispatches requests to Web, # XML-RPC, or SOAP handler, depending on base URL. Standard # base URLs: 'WWW', 'RPC2', 'SOAP' (probably should be # case-insensitive). mux = resource.Resource() mux.putChild('/RPC2/', Echoer())
Your putChild usage is wrong. `mux.putChild("RPC2", Echoer())' should do the trick. putChild adds a child relative to the resource you're calling it on. -- Chris Armstrong << radix@twistedmatrix.com >> http://twistedmatrix.com/users/carmstro.twistd/
participants (2)
-
Christopher Armstrong
-
Steve Waterbury