Initial import to Tizen
[profile/ivi/python-twisted.git] / doc / web / howto / listings / xmlrpc-customized.py
1 from twisted.web import xmlrpc, server
2
3 class EchoHandler:
4
5     def echo(self, x):
6         """
7         Return all passed args
8         """
9         return x
10
11
12
13 class AddHandler:
14
15     def add(self, a, b):
16         """
17         Return sum of arguments.
18         """
19         return a + b
20
21
22
23 class Example(xmlrpc.XMLRPC):
24     """
25     An example of using you own policy to fetch the handler
26     """
27
28     def __init__(self):
29         xmlrpc.XMLRPC.__init__(self)
30         self._addHandler = AddHandler()
31         self._echoHandler = EchoHandler()
32
33         #We keep a dict of all relevant
34         #procedure names and callable.
35         self._procedureToCallable = {
36             'add':self._addHandler.add,
37             'echo':self._echoHandler.echo
38         }
39
40     def lookupProcedure(self, procedurePath):
41         try:
42             return self._procedureToCallable[procedurePath]
43         except KeyError, e:
44             raise xmlrpc.NoSuchFunction(self.NOT_FOUND,
45                         "procedure %s not found" % procedurePath)
46
47     def listProcedures(self):
48         """
49         Since we override lookupProcedure, its suggested to override
50         listProcedures too.
51         """
52         return ['add', 'echo']
53
54
55
56 if __name__ == '__main__':
57     from twisted.internet import reactor
58     r = Example()
59     reactor.listenTCP(7080, server.Site(r))
60     reactor.run()