]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #23775: pprint() of OrderedDict now outputs the same representation
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 26 Mar 2015 06:51:33 +0000 (08:51 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Thu, 26 Mar 2015 06:51:33 +0000 (08:51 +0200)
as repr().

Lib/pprint.py
Lib/test/test_pprint.py
Misc/NEWS

index fc5395efc8f8f9512063556e4df147939bdba653..c79c7137566a605f1daf550f6a8ae1d25e878972 100644 (file)
@@ -34,10 +34,10 @@ saferepr()
 
 """
 
+import collections as _collections
 import re
 import sys as _sys
 import types as _types
-from collections import OrderedDict as _OrderedDict
 from io import StringIO as _StringIO
 
 __all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
@@ -188,16 +188,25 @@ class PrettyPrinter:
             write((self._indent_per_level - 1) * ' ')
         length = len(object)
         if length:
-            if isinstance(object, _OrderedDict):
-                items = list(object.items())
-            else:
-                items = sorted(object.items(), key=_safe_tuple)
+            items = sorted(object.items(), key=_safe_tuple)
             self._format_dict_items(items, stream, indent, allowance + 1,
                                     context, level)
         write('}')
 
     _dispatch[dict.__repr__] = _pprint_dict
-    _dispatch[_OrderedDict.__repr__] = _pprint_dict
+
+    def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level):
+        if not len(object):
+            stream.write(repr(object))
+            return
+        cls = object.__class__
+        stream.write(cls.__name__ + '(')
+        self._format(list(object.items()), stream,
+                     indent + len(cls.__name__) + 1, allowance + 1,
+                     context, level)
+        stream.write(')')
+
+    _dispatch[_collections.OrderedDict.__repr__] = _pprint_ordered_dict
 
     def _pprint_list(self, object, stream, indent, allowance, context, level):
         stream.write('[')
index 01e19feb6dc49b0b8c5108181fa07e08ac4dc43f..428e77ef2195a8a682a35539acf6a39a87f357d5 100644 (file)
@@ -272,19 +272,23 @@ class QueryTestCase(unittest.TestCase):
             r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
 
     def test_ordered_dict(self):
+        d = collections.OrderedDict()
+        self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()')
+        d = collections.OrderedDict([])
+        self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()')
         words = 'the quick brown fox jumped over a lazy dog'.split()
         d = collections.OrderedDict(zip(words, itertools.count()))
         self.assertEqual(pprint.pformat(d),
 """\
-{'the': 0,
'quick': 1,
'brown': 2,
'fox': 3,
'jumped': 4,
'over': 5,
'a': 6,
'lazy': 7,
'dog': 8}""")
+OrderedDict([('the', 0),
            ('quick', 1),
            ('brown', 2),
            ('fox', 3),
            ('jumped', 4),
            ('over', 5),
            ('a', 6),
            ('lazy', 7),
            ('dog', 8)])""")
 
     def test_mapping_proxy(self):
         words = 'the quick brown fox jumped over a lazy dog'.split()
@@ -303,15 +307,15 @@ mappingproxy({'a': 6,
         d = collections.OrderedDict(zip(words, itertools.count()))
         m = types.MappingProxyType(d)
         self.assertEqual(pprint.pformat(m), """\
-mappingproxy({'the': 0,
-              'quick': 1,
-              'brown': 2,
-              'fox': 3,
-              'jumped': 4,
-              'over': 5,
-              'a': 6,
-              'lazy': 7,
-              'dog': 8})""")
+mappingproxy(OrderedDict([('the', 0),
+                          ('quick', 1),
+                          ('brown', 2),
+                          ('fox', 3),
+                          ('jumped', 4),
+                          ('over', 5),
+                          ('a', 6),
+                          ('lazy', 7),
+                          ('dog', 8)]))""")
 
     def test_subclassing(self):
         o = {'names with spaces': 'should be presented using repr()',
index ef2dd3de4bd850895383d81cbbe94f74c852e0bb..5fa6b723244f72c76eb86e8bf72bc2d636e17893 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #23775: pprint() of OrderedDict now outputs the same representation
+  as repr().
+
 - Issue #23765: Removed IsBadStringPtr calls in ctypes
 
 - Issue #22364: Improved some re error messages using regex for hints.