summaryrefslogtreecommitdiffstats
path: root/Lib/pprint.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-03-24 17:22:37 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-03-24 17:22:37 (GMT)
commit022f20376a2458e0ecbd38e393957452570cd3a4 (patch)
tree9dc8cafe008ad01ba4c208bd93585eb0dce3905b /Lib/pprint.py
parent8e2aa88a40c0c7611a04696d1789da159e40d7f7 (diff)
downloadcpython-022f20376a2458e0ecbd38e393957452570cd3a4.zip
cpython-022f20376a2458e0ecbd38e393957452570cd3a4.tar.gz
cpython-022f20376a2458e0ecbd38e393957452570cd3a4.tar.bz2
Issue #17530: pprint now wraps long bytes objects and bytearrays.
Diffstat (limited to 'Lib/pprint.py')
-rw-r--r--Lib/pprint.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/Lib/pprint.py b/Lib/pprint.py
index 40a485a..5b65f57 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -283,6 +283,36 @@ class PrettyPrinter:
_dispatch[str.__repr__] = _pprint_str
+ def _pprint_bytes(self, object, stream, indent, allowance, context, level):
+ write = stream.write
+ if len(object) <= 4:
+ write(repr(object))
+ return
+ parens = level == 1
+ if parens:
+ indent += 1
+ allowance += 1
+ write('(')
+ delim = ''
+ for rep in _wrap_bytes_repr(object, self._width - indent, allowance):
+ write(delim)
+ write(rep)
+ if not delim:
+ delim = '\n' + ' '*indent
+ if parens:
+ write(')')
+
+ _dispatch[bytes.__repr__] = _pprint_bytes
+
+ def _pprint_bytearray(self, object, stream, indent, allowance, context, level):
+ write = stream.write
+ write('bytearray(')
+ self._pprint_bytes(bytes(object), stream, indent + 10,
+ allowance + 1, context, level + 1)
+ write(')')
+
+ _dispatch[bytearray.__repr__] = _pprint_bytearray
+
def _format_dict_items(self, items, stream, indent, allowance, context,
level):
write = stream.write
@@ -463,5 +493,22 @@ def _perfcheck(object=None):
print("_safe_repr:", t2 - t1)
print("pformat:", t3 - t2)
+def _wrap_bytes_repr(object, width, allowance):
+ current = b''
+ last = len(object) // 4 * 4
+ for i in range(0, len(object), 4):
+ part = object[i: i+4]
+ candidate = current + part
+ if i == last:
+ width -= allowance
+ if len(repr(candidate)) > width:
+ if current:
+ yield repr(current)
+ current = part
+ else:
+ current = candidate
+ if current:
+ yield repr(current)
+
if __name__ == "__main__":
_perfcheck()