]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - xmlrpcclient.py
test harness update
[quix0rs-apt-p2p.git] / xmlrpcclient.py
1 from twisted.internet.protocol import ClientFactory
2 from twisted.protocols.http import HTTPClient
3 from twisted.internet.defer import Deferred
4
5 from xmlrpclib import loads, dumps
6
7 class XMLRPCClient(HTTPClient):
8     def connectionMade(self):
9         payload = dumps(self.args, self.method)
10         self.sendCommand('POST', '/RPC2')
11         self.sendHeader('User-Agent', 'Python/Twisted XMLRPC 0.1')
12         self.sendHeader('Content-Type', 'text/xml')
13         self.sendHeader('Content-Length', len(payload))
14         self.endHeaders()
15         self.transport.write(payload)
16         self.transport.write('\r\n')
17         
18     def handleResponse(self, buf):
19         args, name = loads(buf)
20         apply(self.d.callback, args)
21
22
23 class XMLRPCClientFactory(ClientFactory):
24     def __init__(self, method, args, callback=None, errback=None):
25         self.method = method
26         self.args = args
27         self.d = Deferred()
28         if callback:
29             self.d.addCallback(callback)
30         if errback:
31             self.d.addErrback(errback)
32             
33     def buildProtocol(self, addr):
34         prot =  XMLRPCClient()
35         prot.method = self.method
36         prot.args = self.args
37         prot.d = self.d
38         return prot