##// END OF EJS Templates
peer: remove non iterating batcher (API)...
Gregory Szorc -
r33762:b47fe973 default
parent child Browse files
Show More
@@ -49,15 +49,6 b' class iterbatcher(batcher):'
49 def results(self):
49 def results(self):
50 raise NotImplementedError()
50 raise NotImplementedError()
51
51
52 class localbatch(batcher):
53 '''performs the queued calls directly'''
54 def __init__(self, local):
55 batcher.__init__(self)
56 self.local = local
57 def submit(self):
58 for name, args, opts, resref in self.calls:
59 resref.set(getattr(self.local, name)(*args, **opts))
60
61 class localiterbatcher(iterbatcher):
52 class localiterbatcher(iterbatcher):
62 def __init__(self, local):
53 def __init__(self, local):
63 super(iterbatcher, self).__init__()
54 super(iterbatcher, self).__init__()
@@ -106,10 +97,6 b' def batchable(f):'
106 return plain
97 return plain
107
98
108 class peerrepository(object):
99 class peerrepository(object):
109
110 def batch(self):
111 return localbatch(self)
112
113 def iterbatch(self):
100 def iterbatch(self):
114 """Batch requests but allow iterating over the results.
101 """Batch requests but allow iterating over the results.
115
102
@@ -8,7 +8,6 b''
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import hashlib
10 import hashlib
11 import itertools
12 import os
11 import os
13 import tempfile
12 import tempfile
14
13
@@ -80,38 +79,6 b' class abstractserverproto(object):'
80 # """
79 # """
81 # raise NotImplementedError()
80 # raise NotImplementedError()
82
81
83 class remotebatch(peer.batcher):
84 '''batches the queued calls; uses as few roundtrips as possible'''
85 def __init__(self, remote):
86 '''remote must support _submitbatch(encbatch) and
87 _submitone(op, encargs)'''
88 peer.batcher.__init__(self)
89 self.remote = remote
90 def submit(self):
91 req, rsp = [], []
92 for name, args, opts, resref in self.calls:
93 mtd = getattr(self.remote, name)
94 batchablefn = getattr(mtd, 'batchable', None)
95 if batchablefn is not None:
96 batchable = batchablefn(mtd.im_self, *args, **opts)
97 encargsorres, encresref = next(batchable)
98 assert encresref
99 req.append((name, encargsorres,))
100 rsp.append((batchable, encresref, resref,))
101 else:
102 if req:
103 self._submitreq(req, rsp)
104 req, rsp = [], []
105 resref.set(mtd(*args, **opts))
106 if req:
107 self._submitreq(req, rsp)
108 def _submitreq(self, req, rsp):
109 encresults = self.remote._submitbatch(req)
110 for encres, r in zip(encresults, rsp):
111 batchable, encresref, resref = r
112 encresref.set(encres)
113 resref.set(next(batchable))
114
115 class remoteiterbatcher(peer.iterbatcher):
82 class remoteiterbatcher(peer.iterbatcher):
116 def __init__(self, remote):
83 def __init__(self, remote):
117 super(remoteiterbatcher, self).__init__()
84 super(remoteiterbatcher, self).__init__()
@@ -253,11 +220,6 b' class wirepeer(peer.peerrepository):'
253 See also httppeer.py and sshpeer.py for protocol-specific
220 See also httppeer.py and sshpeer.py for protocol-specific
254 implementations of this interface.
221 implementations of this interface.
255 """
222 """
256 def batch(self):
257 if self.capable('batch'):
258 return remotebatch(self)
259 else:
260 return peer.localbatch(self)
261 def _submitbatch(self, req):
223 def _submitbatch(self, req):
262 """run batch request <req> on the server
224 """run batch request <req> on the server
263
225
@@ -55,7 +55,7 b' srv = serverrepo()'
55 clt = clientpeer(srv)
55 clt = clientpeer(srv)
56
56
57 print(clt.greet("Foobar"))
57 print(clt.greet("Foobar"))
58 b = clt.batch()
58 b = clt.iterbatch()
59 fs = [b.greet(s) for s in ["Fo, =;:<o", "Bar"]]
59 map(b.greet, ('Fo, =;:<o', 'Bar'))
60 b.submit()
60 b.submit()
61 print([f.value for f in fs])
61 print([r for r in b.results()])
General Comments 0
You need to be logged in to leave comments. Login now