]> granicus.if.org Git - python/commitdiff
#1713041: fix pprint's handling of maximum depth.
authorGeorg Brandl <georg@python.org>
Mon, 12 May 2008 16:26:52 +0000 (16:26 +0000)
committerGeorg Brandl <georg@python.org>
Mon, 12 May 2008 16:26:52 +0000 (16:26 +0000)
Doc/library/pprint.rst
Lib/pprint.py
Lib/test/test_pprint.py
Misc/NEWS

index b3778f13d9f96901354e0afab0c2cd00efb71fae..c0bedf5d5b664ede23fae6be4ac93da245cd8afe 100644 (file)
@@ -66,8 +66,7 @@ The :mod:`pprint` module defines one class:
       ... ('parrot', ('fresh fruit',))))))))
       >>> pp = pprint.PrettyPrinter(depth=6)
       >>> pp.pprint(tup)
-      ('spam',
-       ('eggs', ('lumberjack', ('knights', ('ni', ('dead', ('parrot', (...,))))))))
+      ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))
 
 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']]
    >>> pprint.pprint(stuff, depth=3)
    ['aaaaaaaaaa',
-    ('spam', ('eggs', ('lumberjack', (...)))),
+    ('spam', ('eggs', (...))),
     ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
     ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
    >>> pprint.pprint(stuff, width=60)
index 9f9d6a216c8c62423cfbb151f4f85acaf0d42023..93d850aca18b1ffe4e102420e7c104d8de1a32c0 100644 (file)
@@ -131,6 +131,10 @@ class PrettyPrinter:
         sepLines = _len(rep) > (self._width - 1 - indent - allowance)
         write = stream.write
 
+        if self._depth and level > self._depth:
+            write(rep)
+            return
+
         r = getattr(typ, "__repr__", None)
         if issubclass(typ, dict) and r is dict.__repr__:
             write('{')
@@ -211,8 +215,8 @@ class PrettyPrinter:
                 write(',')
             write(endchar)
             return
-        write(rep)
 
+        write(rep)
 
     def _repr(self, object, context, level):
         repr, readable, recursive = self.format(object, context.copy(),
@@ -259,7 +263,7 @@ def _safe_repr(object, context, maxlevels, level):
         if not object:
             return "{}", True, False
         objid = _id(object)
-        if maxlevels and level > maxlevels:
+        if maxlevels and level >= maxlevels:
             return "{...}", False, objid in context
         if objid in context:
             return _recursion(object), False, True
@@ -293,7 +297,7 @@ def _safe_repr(object, context, maxlevels, level):
                 return "()", True, False
             format = "(%s)"
         objid = _id(object)
-        if maxlevels and level > maxlevels:
+        if maxlevels and level >= maxlevels:
             return format % "...", False, objid in context
         if objid in context:
             return _recursion(object), False, True
index 83c772b5b0326357ccd8b4948935be11437f0b9d..4d7a3ed1472f160d8d534642966a6ac8501c540b 100644 (file)
@@ -387,6 +387,21 @@ class QueryTestCase(unittest.TestCase):
         cubo = test.test_set.linegraph(cube)
         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):
 
index 06478338f07d18b070721c48bfc5bb2ea9ea7b07..4431d904ecf9a9c4bcc68376f515b0e16e4950a5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -26,6 +26,8 @@ Extension Modules
 Library
 -------
 
+- #1713041: fix pprint's handling of maximum depth.
+
 - The timing module has been deprecated for removal in Python 3.0.
 
 - The sv module has been deprecated for removal in Python 3.0.