Mercurial > public > mercurial-scm > hg
view tests/test-wireprotocol.py @ 14622:bd88561afb4b
wireproto: add batching support to wirerepository
Adds the plumbing and wire call for batched execution, but does not
batch-enable any methods yet.
author | Peter Arrenbrecht <peter.arrenbrecht@gmail.com> |
---|---|
date | Tue, 14 Jun 2011 22:52:58 +0200 |
parents | |
children | a7d5816087a9 |
line wrap: on
line source
from mercurial import wireproto class proto(): def __init__(self, args): self.args = args def getargs(self, spec): args = self.args args.setdefault('*', {}) names = spec.split() return [args[n] for n in names] class clientrepo(wireproto.wirerepository): def __init__(self, serverrepo): self.serverrepo = serverrepo def _call(self, cmd, **args): return wireproto.dispatch(self.serverrepo, proto(args), cmd) @wireproto.batchable def greet(self, name): f = wireproto.future() yield wireproto.todict(name=mangle(name)), f yield unmangle(f.value) class serverrepo(): def greet(self, name): return "Hello, " + name def mangle(s): return ''.join(chr(ord(c) + 1) for c in s) def unmangle(s): return ''.join(chr(ord(c) - 1) for c in s) def greet(repo, proto, name): return mangle(repo.greet(unmangle(name))) wireproto.commands['greet'] = (greet, 'name',) srv = serverrepo() clt = clientrepo(srv) print clt.greet("Foobar") b = clt.batch() fs = [b.greet(s) for s in ["Fo, =;o", "Bar"]] b.submit() print [f.value for f in fs]