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 re
|
||||||
import sys as _sys
|
import sys as _sys
|
||||||
import types as _types
|
import types as _types
|
||||||
from collections import OrderedDict as _OrderedDict
|
|
||||||
from io import StringIO as _StringIO
|
from io import StringIO as _StringIO
|
||||||
|
|
||||||
__all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
|
__all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
|
||||||
|
@ -188,16 +188,25 @@ class PrettyPrinter:
|
||||||
write((self._indent_per_level - 1) * ' ')
|
write((self._indent_per_level - 1) * ' ')
|
||||||
length = len(object)
|
length = len(object)
|
||||||
if length:
|
if length:
|
||||||
if isinstance(object, _OrderedDict):
|
items = sorted(object.items(), key=_safe_tuple)
|
||||||
items = list(object.items())
|
|
||||||
else:
|
|
||||||
items = sorted(object.items(), key=_safe_tuple)
|
|
||||||
self._format_dict_items(items, stream, indent, allowance + 1,
|
self._format_dict_items(items, stream, indent, allowance + 1,
|
||||||
context, level)
|
context, level)
|
||||||
write('}')
|
write('}')
|
||||||
|
|
||||||
_dispatch[dict.__repr__] = _pprint_dict
|
_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):
|
def _pprint_list(self, object, stream, indent, allowance, context, level):
|
||||||
stream.write('[')
|
stream.write('[')
|
||||||
|
|
|
@ -272,19 +272,23 @@ class QueryTestCase(unittest.TestCase):
|
||||||
r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
|
r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
|
||||||
|
|
||||||
def test_ordered_dict(self):
|
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()
|
words = 'the quick brown fox jumped over a lazy dog'.split()
|
||||||
d = collections.OrderedDict(zip(words, itertools.count()))
|
d = collections.OrderedDict(zip(words, itertools.count()))
|
||||||
self.assertEqual(pprint.pformat(d),
|
self.assertEqual(pprint.pformat(d),
|
||||||
"""\
|
"""\
|
||||||
{'the': 0,
|
OrderedDict([('the', 0),
|
||||||
'quick': 1,
|
('quick', 1),
|
||||||
'brown': 2,
|
('brown', 2),
|
||||||
'fox': 3,
|
('fox', 3),
|
||||||
'jumped': 4,
|
('jumped', 4),
|
||||||
'over': 5,
|
('over', 5),
|
||||||
'a': 6,
|
('a', 6),
|
||||||
'lazy': 7,
|
('lazy', 7),
|
||||||
'dog': 8}""")
|
('dog', 8)])""")
|
||||||
|
|
||||||
def test_mapping_proxy(self):
|
def test_mapping_proxy(self):
|
||||||
words = 'the quick brown fox jumped over a lazy dog'.split()
|
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()))
|
d = collections.OrderedDict(zip(words, itertools.count()))
|
||||||
m = types.MappingProxyType(d)
|
m = types.MappingProxyType(d)
|
||||||
self.assertEqual(pprint.pformat(m), """\
|
self.assertEqual(pprint.pformat(m), """\
|
||||||
mappingproxy({'the': 0,
|
mappingproxy(OrderedDict([('the', 0),
|
||||||
'quick': 1,
|
('quick', 1),
|
||||||
'brown': 2,
|
('brown', 2),
|
||||||
'fox': 3,
|
('fox', 3),
|
||||||
'jumped': 4,
|
('jumped', 4),
|
||||||
'over': 5,
|
('over', 5),
|
||||||
'a': 6,
|
('a', 6),
|
||||||
'lazy': 7,
|
('lazy', 7),
|
||||||
'dog': 8})""")
|
('dog', 8)]))""")
|
||||||
|
|
||||||
def test_subclassing(self):
|
def test_subclassing(self):
|
||||||
o = {'names with spaces': 'should be presented using repr()',
|
o = {'names with spaces': 'should be presented using repr()',
|
||||||
|
|
|
@ -30,6 +30,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #23775: pprint() of OrderedDict now outputs the same representation
|
||||||
|
as repr().
|
||||||
|
|
||||||
- Issue #23765: Removed IsBadStringPtr calls in ctypes
|
- Issue #23765: Removed IsBadStringPtr calls in ctypes
|
||||||
|
|
||||||
- Issue #22364: Improved some re error messages using regex for hints.
|
- Issue #22364: Improved some re error messages using regex for hints.
|
||||||
|
|
Loading…
Reference in New Issue