| TwistedPeak |
UserPreferences |
| The PEAK Developers' Center | FrontPage | RecentChanges | TitleIndex | WordIndex | SiteNavigation | HelpContents |
PEAK and Twisted work very well together thanks to the the peak.commands.EventDriven class, a top level container for reactor-based applications. The following shows an XML-RPC server based on Twisted's XML-RPC HOWTO:
from peak.api import binding, commands, running
from twisted.web import xmlrpc, server
class Example(xmlrpc.XMLRPC):
"""An example object to be published."""
def xmlrpc_echo(self, x):
"""Return all passed args."""
return x
def xmlrpc_add(self, a, b):
"""Return sum of arguments."""
return a + b
class App(commands.EventDriven):
example = binding.Make(Example)
server = binding.Make(lambda self: server.Site(self.example))
port = binding.Make(lambda: 7080)
reactor = binding.Obtain(running.ITwistedReactor)
__onStart = binding.Make(
lambda self: self.reactor.listenTCP(self.port, self.server),
uponAssembly=True
)
The Example class is lifted verbatim from the HOWTO. Note how the Twisted reactor is obtained in the App class, and how the __onStart method tells the reactor to listen with the given server object and port number.
If saved in a file called twistedpeak.py, this code can be run as follows (on Unix/Linux systems):
PYTHONPATH=. peak import:twistedpeak.App
The example client code from the HOWTO works exactly the same:
>>> import xmlrpclib
>>> s = xmlrpclib.Server('http://localhost:7080/')
>>> s.echo("lala")
'lala'
>>> s.add(1, 2)
3
This code can be used as a starting point for any kind of Twisted application.
The code above is slightly longer than the example shown in the HOWTO, but because of PEAK's component-oriented features, especially its configuration and binding facilities, it is much more flexible. Since commands.EventDriven is a descendent of PEAK's base component class, the App class is also a component class. This primarily means two things:
A component hierarchy always has a "root" object. In our example the root object is created by the peak script, which is installed to an executable directory by PEAK's setup.py installer script. The peak script is a simple launcher which takes a URL-like recipe for finding a "runnable" object to load and run.
...
This page is a replacement for the one originally created by Joel Boehland in July 2003. Unfortunately his code examples were included in a separate tar archive which has since been lost. Without the code, config files, and shell scripts, the page was no longer usable.
-- John Landahl, March 2005. {{{