view tests/test-wireproto.py @ 24041:9756f943634f

hgweb: use css margin instead of empty <p> before <div class="atom-logo"> The <p> elements were used to create an empty space between the last menu item (i.e. "help") and the atom feed icon, but they don't have any semantic meaning, so it is better to use css instead. The css rule uses top margin of 10px, which is equal to the top margin of the menu blocks ("help", "changeset, browse", etc). Previously, with <p> elements, the margin wasn't set explicitly and was browser-dependent. This change is a "better version" of 70cfa7e1611b, where <p> elements were simply properly closed.
author Anton Shestakov <engored@ya.ru>
date Thu, 05 Feb 2015 19:24:35 +0800
parents c69f62906358
children d3d32643c060
line wrap: on
line source

from mercurial import wireproto

class proto(object):
    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 clientpeer(wireproto.wirepeer):
    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 {'name': mangle(name)}, f
        yield unmangle(f.value)

class serverrepo(object):
    def greet(self, name):
        return "Hello, " + name

    def filtered(self, name):
        return self

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 = clientpeer(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]