Mercurial > public > mercurial-scm > hg
diff mercurial/utils/stringutil.py @ 37300:2f859ad7ed8c
stringutil: add function to pretty print an object
This is inspired by the pprint() module/function (which we can't
use because the output is different on Python 2 and 3 - namely the
use of b'' literals).
We hook it up to `hg debugwireproto` for printing the response to
a wire protocol command.
This foreshadows future peer work, which will support decoding
CBOR responses into rich data structures.
Differential Revision: https://phab.mercurial-scm.org/D2987
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 28 Mar 2018 14:52:57 -0700 |
parents | cc5a040fe150 |
children | a67fd1fe5109 |
line wrap: on
line diff
--- a/mercurial/utils/stringutil.py Wed Mar 28 13:30:24 2018 -0700 +++ b/mercurial/utils/stringutil.py Wed Mar 28 14:52:57 2018 -0700 @@ -37,6 +37,20 @@ return _DATA_ESCAPE_RE.sub(lambda m: _DATA_ESCAPE_MAP[m.group(0)], s) +def pprint(o): + """Pretty print an object.""" + if isinstance(o, (bytes, bytearray)): + return "b'%s'" % escapedata(o) + elif isinstance(o, list): + return '[%s]' % (b', '.join(pprint(a) for a in o)) + elif isinstance(o, dict): + return '{%s}' % (b', '.join( + '%s: %s' % (pprint(k), pprint(v)) for k, v in sorted(o.items()))) + elif isinstance(o, bool): + return b'True' if o else b'False' + else: + raise error.ProgrammingError('do not know how to format %r' % o) + def binary(s): """return true if a string is binary data""" return bool(s and '\0' in s)