Issue #23775: pprint() of OrderedDict now outputs the same representation
as repr().
This commit is contained in:
parent
f3fa308817
commit
aa4c36fbbb
|
@ -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)
|
||||
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('[')
|
||||
|
|
|
@ -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()',
|
||||
|
|
Loading…
Reference in New Issue