Mercurial > public > mercurial-scm > hg-stable
comparison 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 |
comparison
equal
deleted
inserted
replaced
37299:e9aadee698cf | 37300:2f859ad7ed8c |
---|---|
34 def escapedata(s): | 34 def escapedata(s): |
35 if isinstance(s, bytearray): | 35 if isinstance(s, bytearray): |
36 s = bytes(s) | 36 s = bytes(s) |
37 | 37 |
38 return _DATA_ESCAPE_RE.sub(lambda m: _DATA_ESCAPE_MAP[m.group(0)], s) | 38 return _DATA_ESCAPE_RE.sub(lambda m: _DATA_ESCAPE_MAP[m.group(0)], s) |
39 | |
40 def pprint(o): | |
41 """Pretty print an object.""" | |
42 if isinstance(o, (bytes, bytearray)): | |
43 return "b'%s'" % escapedata(o) | |
44 elif isinstance(o, list): | |
45 return '[%s]' % (b', '.join(pprint(a) for a in o)) | |
46 elif isinstance(o, dict): | |
47 return '{%s}' % (b', '.join( | |
48 '%s: %s' % (pprint(k), pprint(v)) for k, v in sorted(o.items()))) | |
49 elif isinstance(o, bool): | |
50 return b'True' if o else b'False' | |
51 else: | |
52 raise error.ProgrammingError('do not know how to format %r' % o) | |
39 | 53 |
40 def binary(s): | 54 def binary(s): |
41 """return true if a string is binary data""" | 55 """return true if a string is binary data""" |
42 return bool(s and '\0' in s) | 56 return bool(s and '\0' in s) |
43 | 57 |