[Python-checkins] cpython (2.7): Issue #19137: The pprint module now correctly formats empty set and frozenset

serhiy.storchaka python-checkins at python.org
Wed Oct 2 10:45:48 CEST 2013


http://hg.python.org/cpython/rev/fcd889046ee1
changeset:   85918:fcd889046ee1
branch:      2.7
parent:      85915:32de3923bb94
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed Oct 02 11:40:26 2013 +0300
summary:
  Issue #19137: The pprint module now correctly formats empty set and frozenset
and instances of set and frozenset subclasses.

files:
  Lib/pprint.py           |   27 ++----
  Lib/test/test_pprint.py |  104 +++++++++++++++++++++------
  Misc/NEWS               |    3 +
  3 files changed, 93 insertions(+), 41 deletions(-)


diff --git a/Lib/pprint.py b/Lib/pprint.py
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -185,25 +185,18 @@
             if issubclass(typ, list):
                 write('[')
                 endchar = ']'
-            elif issubclass(typ, set):
-                if not length:
-                    write('set()')
-                    return
-                write('set([')
-                endchar = '])'
-                object = _sorted(object)
-                indent += 4
-            elif issubclass(typ, frozenset):
-                if not length:
-                    write('frozenset()')
-                    return
-                write('frozenset([')
-                endchar = '])'
-                object = _sorted(object)
-                indent += 10
-            else:
+            elif issubclass(typ, tuple):
                 write('(')
                 endchar = ')'
+            else:
+                if not length:
+                    write(rep)
+                    return
+                write(typ.__name__)
+                write('([')
+                endchar = '])'
+                indent += len(typ.__name__) + 1
+                object = _sorted(object)
             if self._indent_per_level > 1 and sepLines:
                 write((self._indent_per_level - 1) * ' ')
             if length:
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -24,6 +24,20 @@
     def __repr__(self):
         return tuple.__repr__(self)
 
+class set2(set):
+    pass
+
+class set3(set):
+    def __repr__(self):
+        return set.__repr__(self)
+
+class frozenset2(frozenset):
+    pass
+
+class frozenset3(frozenset):
+    def __repr__(self):
+        return frozenset.__repr__(self)
+
 class dict2(dict):
     pass
 
@@ -114,22 +128,24 @@
         for simple in (0, 0L, 0+0j, 0.0, "", uni(""),
                        (), tuple2(), tuple3(),
                        [], list2(), list3(),
+                       set(), set2(), set3(),
+                       frozenset(), frozenset2(), frozenset3(),
                        {}, dict2(), dict3(),
                        self.assertTrue, pprint,
                        -6, -6L, -6-6j, -1.5, "x", uni("x"), (3,), [3], {3: 6},
                        (1,2), [3,4], {5: 6},
                        tuple2((1,2)), tuple3((1,2)), tuple3(range(100)),
                        [3,4], list2([3,4]), list3([3,4]), list3(range(100)),
+                       set({7}), set2({7}), set3({7}),
+                       frozenset({8}), frozenset2({8}), frozenset3({8}),
                        dict2({5: 6}), dict3({5: 6}),
                        range(10, -11, -1)
                       ):
             native = repr(simple)
-            for function in "pformat", "saferepr":
-                f = getattr(pprint, function)
-                got = f(simple)
-                self.assertEqual(native, got,
-                                 "expected %s got %s from pprint.%s" %
-                                 (native, got, function))
+            self.assertEqual(pprint.pformat(simple), native)
+            self.assertEqual(pprint.pformat(simple, width=1, indent=0)
+                             .replace('\n', ' '), native)
+            self.assertEqual(pprint.saferepr(simple), native)
 
     def test_basic_line_wrap(self):
         # verify basic line-wrapping operation
@@ -205,19 +221,59 @@
         self.assertEqual(DottedPrettyPrinter().pformat(o), exp)
 
     def test_set_reprs(self):
-        self.assertEqual(pprint.pformat(set()), 'set()')
+        self.assertEqual(pprint.pformat(set()), 'set([])')
         self.assertEqual(pprint.pformat(set(range(3))), 'set([0, 1, 2])')
-        self.assertEqual(pprint.pformat(frozenset()), 'frozenset()')
-        self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset([0, 1, 2])')
+        self.assertEqual(pprint.pformat(set(range(7)), width=20), '''\
+set([0,
+     1,
+     2,
+     3,
+     4,
+     5,
+     6])''')
+        self.assertEqual(pprint.pformat(set2(range(7)), width=20), '''\
+set2([0,
+      1,
+      2,
+      3,
+      4,
+      5,
+      6])''')
+        self.assertEqual(pprint.pformat(set3(range(7)), width=20),
+                         'set3([0, 1, 2, 3, 4, 5, 6])')
+
+        self.assertEqual(pprint.pformat(frozenset()), 'frozenset([])')
+        self.assertEqual(pprint.pformat(frozenset(range(3))),
+                         'frozenset([0, 1, 2])')
+        self.assertEqual(pprint.pformat(frozenset(range(7)), width=20), '''\
+frozenset([0,
+           1,
+           2,
+           3,
+           4,
+           5,
+           6])''')
+        self.assertEqual(pprint.pformat(frozenset2(range(7)), width=20), '''\
+frozenset2([0,
+            1,
+            2,
+            3,
+            4,
+            5,
+            6])''')
+        self.assertEqual(pprint.pformat(frozenset3(range(7)), width=20),
+                         'frozenset3([0, 1, 2, 3, 4, 5, 6])')
+
+    def test_set_of_sets_reprs(self):
         cube_repr_tgt = """\
 {frozenset([]): frozenset([frozenset([2]), frozenset([0]), frozenset([1])]),
- frozenset([0]): frozenset([frozenset(),
+ frozenset([0]): frozenset([frozenset([]),
                             frozenset([0, 2]),
                             frozenset([0, 1])]),
- frozenset([1]): frozenset([frozenset(),
+ frozenset([1]): frozenset([frozenset([]),
                             frozenset([1, 2]),
                             frozenset([0, 1])]),
- frozenset([2]): frozenset([frozenset(),
+ frozenset([2]): frozenset([frozenset([]),
                             frozenset([1, 2]),
                             frozenset([0, 2])]),
  frozenset([1, 2]): frozenset([frozenset([2]),
@@ -243,7 +299,7 @@
                                                             frozenset([frozenset([0]),
                                                                        frozenset([0,
                                                                                   1])]),
-                                                            frozenset([frozenset(),
+                                                            frozenset([frozenset([]),
                                                                        frozenset([0])]),
                                                             frozenset([frozenset([2]),
                                                                        frozenset([0,
@@ -259,7 +315,7 @@
                                                             frozenset([frozenset([1]),
                                                                        frozenset([1,
                                                                                   2])]),
-                                                            frozenset([frozenset(),
+                                                            frozenset([frozenset([]),
                                                                        frozenset([1])])]),
  frozenset([frozenset([1, 2]), frozenset([1])]): frozenset([frozenset([frozenset([1,
                                                                                   2]),
@@ -269,7 +325,7 @@
                                                             frozenset([frozenset([2]),
                                                                        frozenset([1,
                                                                                   2])]),
-                                                            frozenset([frozenset(),
+                                                            frozenset([frozenset([]),
                                                                        frozenset([1])]),
                                                             frozenset([frozenset([1]),
                                                                        frozenset([0,
@@ -285,7 +341,7 @@
                                                             frozenset([frozenset([2]),
                                                                        frozenset([0,
                                                                                   2])]),
-                                                            frozenset([frozenset(),
+                                                            frozenset([frozenset([]),
                                                                        frozenset([2])])]),
  frozenset([frozenset([]), frozenset([0])]): frozenset([frozenset([frozenset([0]),
                                                                    frozenset([0,
@@ -293,16 +349,16 @@
                                                         frozenset([frozenset([0]),
                                                                    frozenset([0,
                                                                               2])]),
-                                                        frozenset([frozenset(),
+                                                        frozenset([frozenset([]),
                                                                    frozenset([1])]),
-                                                        frozenset([frozenset(),
+                                                        frozenset([frozenset([]),
                                                                    frozenset([2])])]),
- frozenset([frozenset([]), frozenset([1])]): frozenset([frozenset([frozenset(),
+ frozenset([frozenset([]), frozenset([1])]): frozenset([frozenset([frozenset([]),
                                                                    frozenset([0])]),
                                                         frozenset([frozenset([1]),
                                                                    frozenset([1,
                                                                               2])]),
-                                                        frozenset([frozenset(),
+                                                        frozenset([frozenset([]),
                                                                    frozenset([2])]),
                                                         frozenset([frozenset([1]),
                                                                    frozenset([0,
@@ -310,9 +366,9 @@
  frozenset([frozenset([2]), frozenset([])]): frozenset([frozenset([frozenset([2]),
                                                                    frozenset([1,
                                                                               2])]),
-                                                        frozenset([frozenset(),
+                                                        frozenset([frozenset([]),
                                                                    frozenset([0])]),
-                                                        frozenset([frozenset(),
+                                                        frozenset([frozenset([]),
                                                                    frozenset([1])]),
                                                         frozenset([frozenset([2]),
                                                                    frozenset([0,
@@ -333,7 +389,7 @@
                                                                   frozenset([frozenset([1]),
                                                                              frozenset([0,
                                                                                         1])])]),
- frozenset([frozenset([0]), frozenset([0, 1])]): frozenset([frozenset([frozenset(),
+ frozenset([frozenset([0]), frozenset([0, 1])]): frozenset([frozenset([frozenset([]),
                                                                        frozenset([0])]),
                                                             frozenset([frozenset([0,
                                                                                   1]),
@@ -357,7 +413,7 @@
                                                             frozenset([frozenset([0]),
                                                                        frozenset([0,
                                                                                   2])]),
-                                                            frozenset([frozenset(),
+                                                            frozenset([frozenset([]),
                                                                        frozenset([2])])]),
  frozenset([frozenset([0, 1, 2]), frozenset([0, 2])]): frozenset([frozenset([frozenset([1,
                                                                                         2]),
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -32,6 +32,9 @@
 Library
 -------
 
+- Issue #19137: The pprint module now correctly formats empty set and frozenset
+  and instances of set and frozenset subclasses.
+
 - Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
   prevent readline() calls from consuming too much memory.  Patch by Jyrki
   Pulliainen.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list