root / trunk / sandbox / jhb / oc2 / transports.py

Revision 338, 3.6 kB (checked in by ocjhb, 1 year ago)

Cleaning up files and documentation; Changes to documentation.py to allow full dump of messages; Updated wallet to handle double spend better

  • Property svn:mime-type set to text/plain
  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1import messages,  simplejson, urllib, sys
2from pprint import pformat
3
4
5printmessages = 0
6
7def printMessage(message):
8    sys.stderr.write('\n')
9    sys.stderr.write('-'*30)
10    sys.stderr.write('\n\n')
11    sys.stderr.write(pformat(message.getData(1))+'\n')
12
13def printSection(header):
14    if printmessages:
15        out = """
16
17####################################################################
18   %s
19####################################################################
20       
21        """ % header
22
23        sys.stderr.write(out)
24
25
26def createMessage(data):
27    data = dict(simplejson.loads(str(data)))
28    header = data['header']
29    klass = getattr(messages,header)
30    message = klass(data)
31    return message
32
33class Transport(object):
34
35    def __call__(self,message):
36        return ''
37
38class HTTPTransport(object):
39   
40    def __init__(self,url):
41        self.url = url
42     
43    def __call__(self,message):
44       
45        if printmessages:
46            printMessage(message)
47       
48        response = urllib.urlopen(self.url,message.toString(True))
49        reply =  createMessage(response.read())
50       
51        if printmessages:
52            printMessage(reply)       
53       
54        return reply
55
56class TestingHTTPTransport(object):
57   
58    def __init__(self,port,**kwargs):
59        self.port = port
60        self.kwargs = kwargs
61
62    def __call__(self,message):
63        import testutils
64        testutils.run_once(self.port,**self.kwargs)
65        transport = HTTPTransport('http://localhost:%s/' % self.port)
66        return transport(message)
67
68
69class BTTransport(object):
70
71    def __init__(self,socket):
72        self.stop = '\r\r+++STOP+++\r\r'
73        self.lenstop = len(self.stop)
74        self.socket = socket
75       
76    def __call__(self,message):
77        self.send(message)
78        return self.receive()
79   
80    def send(self,message):
81        self.socket.send(message.toString(True)+self.stop)
82
83    def receive(self):
84        line=''
85        while not line.endswith(self.stop):
86            ch=self.socket.recv(1)
87            line += ch
88
89        received = line[:-self.lenstop]
90        return createMessage(received)
91
92
93class DirectTransport(object):
94
95    def __init__(self,target,transport2=None):
96        self.target = target
97        self.transport2 = transport2
98
99    def __call__(self,message):
100   
101        if printmessages:
102            printMessage(message)
103       
104        if self.transport2:
105            response = self.target(message,self.transport2)
106        else:           
107            response = self.target(message)
108       
109        if printmessages:
110            printMessage(response)
111       
112        return response
113
114class YieldTransport(object):
115
116    def __init__(self,targetmethod,args):
117        self.args = args
118        self.targetmethod = targetmethod
119        self.nextarg = None
120
121    def __call__(self,message):
122        gen = self.targetmethod(message)
123        response = None
124        for result in gen:
125            if result != None:
126                response = result
127        return response           
128                   
129class TestTransport(object):
130
131    def __init__(self, *args):
132        self.results = list(args)
133        self.debug = 0
134
135    def __call__(self,message):
136        if self.debug:
137            import pdb; pdb.set_trace()
138        result = self.results.pop(0)
139       
140        if type(result) == list or type(result) == tuple:
141            method = result[0]
142            args = list(result[1:])
143            args.append(message)
144            return method(*args)
145       
146        elif not isinstance(result,messages.Message) and callable(result):
147            return result(message)       
148       
149        else:
150            return result
Note: See TracBrowser for help on using the browser.