mirror of https://github.com/python/cpython
#1713041: fix pprint's handling of maximum depth.
This commit is contained in:
parent
103f19d286
commit
23da6e6545
|
@ -66,8 +66,7 @@ The :mod:`pprint` module defines one class:
|
||||||
... ('parrot', ('fresh fruit',))))))))
|
... ('parrot', ('fresh fruit',))))))))
|
||||||
>>> pp = pprint.PrettyPrinter(depth=6)
|
>>> pp = pprint.PrettyPrinter(depth=6)
|
||||||
>>> pp.pprint(tup)
|
>>> pp.pprint(tup)
|
||||||
('spam',
|
('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))
|
||||||
('eggs', ('lumberjack', ('knights', ('ni', ('dead', ('parrot', (...,))))))))
|
|
||||||
|
|
||||||
The :class:`PrettyPrinter` class supports several derivative functions:
|
The :class:`PrettyPrinter` class supports several derivative functions:
|
||||||
|
|
||||||
|
@ -220,7 +219,7 @@ This example demonstrates several uses of the :func:`pprint` function and its pa
|
||||||
['cccccccccccccccccccc', 'dddddddddddddddddddd']]
|
['cccccccccccccccccccc', 'dddddddddddddddddddd']]
|
||||||
>>> pprint.pprint(stuff, depth=3)
|
>>> pprint.pprint(stuff, depth=3)
|
||||||
['aaaaaaaaaa',
|
['aaaaaaaaaa',
|
||||||
('spam', ('eggs', ('lumberjack', (...)))),
|
('spam', ('eggs', (...))),
|
||||||
['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
|
['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
|
||||||
['cccccccccccccccccccc', 'dddddddddddddddddddd']]
|
['cccccccccccccccccccc', 'dddddddddddddddddddd']]
|
||||||
>>> pprint.pprint(stuff, width=60)
|
>>> pprint.pprint(stuff, width=60)
|
||||||
|
|
|
@ -131,6 +131,10 @@ class PrettyPrinter:
|
||||||
sepLines = _len(rep) > (self._width - 1 - indent - allowance)
|
sepLines = _len(rep) > (self._width - 1 - indent - allowance)
|
||||||
write = stream.write
|
write = stream.write
|
||||||
|
|
||||||
|
if self._depth and level > self._depth:
|
||||||
|
write(rep)
|
||||||
|
return
|
||||||
|
|
||||||
r = getattr(typ, "__repr__", None)
|
r = getattr(typ, "__repr__", None)
|
||||||
if issubclass(typ, dict) and r is dict.__repr__:
|
if issubclass(typ, dict) and r is dict.__repr__:
|
||||||
write('{')
|
write('{')
|
||||||
|
@ -211,8 +215,8 @@ class PrettyPrinter:
|
||||||
write(',')
|
write(',')
|
||||||
write(endchar)
|
write(endchar)
|
||||||
return
|
return
|
||||||
write(rep)
|
|
||||||
|
|
||||||
|
write(rep)
|
||||||
|
|
||||||
def _repr(self, object, context, level):
|
def _repr(self, object, context, level):
|
||||||
repr, readable, recursive = self.format(object, context.copy(),
|
repr, readable, recursive = self.format(object, context.copy(),
|
||||||
|
@ -259,7 +263,7 @@ def _safe_repr(object, context, maxlevels, level):
|
||||||
if not object:
|
if not object:
|
||||||
return "{}", True, False
|
return "{}", True, False
|
||||||
objid = _id(object)
|
objid = _id(object)
|
||||||
if maxlevels and level > maxlevels:
|
if maxlevels and level >= maxlevels:
|
||||||
return "{...}", False, objid in context
|
return "{...}", False, objid in context
|
||||||
if objid in context:
|
if objid in context:
|
||||||
return _recursion(object), False, True
|
return _recursion(object), False, True
|
||||||
|
@ -293,7 +297,7 @@ def _safe_repr(object, context, maxlevels, level):
|
||||||
return "()", True, False
|
return "()", True, False
|
||||||
format = "(%s)"
|
format = "(%s)"
|
||||||
objid = _id(object)
|
objid = _id(object)
|
||||||
if maxlevels and level > maxlevels:
|
if maxlevels and level >= maxlevels:
|
||||||
return format % "...", False, objid in context
|
return format % "...", False, objid in context
|
||||||
if objid in context:
|
if objid in context:
|
||||||
return _recursion(object), False, True
|
return _recursion(object), False, True
|
||||||
|
|
|
@ -387,6 +387,21 @@ class QueryTestCase(unittest.TestCase):
|
||||||
cubo = test.test_set.linegraph(cube)
|
cubo = test.test_set.linegraph(cube)
|
||||||
self.assertEqual(pprint.pformat(cubo), cubo_repr_tgt)
|
self.assertEqual(pprint.pformat(cubo), cubo_repr_tgt)
|
||||||
|
|
||||||
|
def test_depth(self):
|
||||||
|
nested_tuple = (1, (2, (3, (4, (5, 6)))))
|
||||||
|
nested_dict = {1: {2: {3: {4: {5: {6: 6}}}}}}
|
||||||
|
nested_list = [1, [2, [3, [4, [5, [6, []]]]]]]
|
||||||
|
self.assertEqual(pprint.pformat(nested_tuple), repr(nested_tuple))
|
||||||
|
self.assertEqual(pprint.pformat(nested_dict), repr(nested_dict))
|
||||||
|
self.assertEqual(pprint.pformat(nested_list), repr(nested_list))
|
||||||
|
|
||||||
|
lv1_tuple = '(1, (...))'
|
||||||
|
lv1_dict = '{1: {...}}'
|
||||||
|
lv1_list = '[1, [...]]'
|
||||||
|
self.assertEqual(pprint.pformat(nested_tuple, depth=1), lv1_tuple)
|
||||||
|
self.assertEqual(pprint.pformat(nested_dict, depth=1), lv1_dict)
|
||||||
|
self.assertEqual(pprint.pformat(nested_list, depth=1), lv1_list)
|
||||||
|
|
||||||
|
|
||||||
class DottedPrettyPrinter(pprint.PrettyPrinter):
|
class DottedPrettyPrinter(pprint.PrettyPrinter):
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- #1713041: fix pprint's handling of maximum depth.
|
||||||
|
|
||||||
- The timing module has been deprecated for removal in Python 3.0.
|
- The timing module has been deprecated for removal in Python 3.0.
|
||||||
|
|
||||||
- The sv module has been deprecated for removal in Python 3.0.
|
- The sv module has been deprecated for removal in Python 3.0.
|
||||||
|
|
Loading…
Reference in New Issue