tests/test-wireproto.py
author Anton Shestakov <engored@ya.ru>
Thu, 21 May 2015 00:27:12 +0800
changeset 25230 af023b09ba52
parent 20686 c69f62906358
child 25708 d3d32643c060
permissions -rw-r--r--
hgweb: remove artificial width constraint from header in monoblue This width property comes from the beginning of the monoblue theme itself, and was used to stop the action header ("summary", "shortlog", "changelog", etc) from clashing with the search form. But it still was happening (on smaller screens, and with more actions added to hgweb over time). Effectively, the hardcoded width was preventing the header from fitting into the available screen space, since it always tried to be 900px wide, even if that meant horizontal scroll on smaller screens and having the actions on two lines where one should've been enough. For example, http://selenic.com/hg/log?style=monoblue has the last two actions ("gz" and "help") in the header on the second line, even when there seems to be enough space on the first. This patch makes the form float, which prevents it from overlaying/clashing with the action header, and allows the latter to resize itself in the best possible way.

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]