Issue #23502: The pprint module now supports mapping proxies.
In particular the __dict__ attributes of building types.
This commit is contained in:
parent
022f20376a
commit
87eb482e30
|
@ -36,6 +36,7 @@ saferepr()
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import sys as _sys
|
import sys as _sys
|
||||||
|
import types as _types
|
||||||
from collections import OrderedDict as _OrderedDict
|
from collections import OrderedDict as _OrderedDict
|
||||||
from io import StringIO as _StringIO
|
from io import StringIO as _StringIO
|
||||||
|
|
||||||
|
@ -313,6 +314,14 @@ class PrettyPrinter:
|
||||||
|
|
||||||
_dispatch[bytearray.__repr__] = _pprint_bytearray
|
_dispatch[bytearray.__repr__] = _pprint_bytearray
|
||||||
|
|
||||||
|
def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level):
|
||||||
|
stream.write('mappingproxy(')
|
||||||
|
self._format(object.copy(), stream, indent + 13, allowance + 1,
|
||||||
|
context, level)
|
||||||
|
stream.write(')')
|
||||||
|
|
||||||
|
_dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy
|
||||||
|
|
||||||
def _format_dict_items(self, items, stream, indent, allowance, context,
|
def _format_dict_items(self, items, stream, indent, allowance, context,
|
||||||
level):
|
level):
|
||||||
write = stream.write
|
write = stream.write
|
||||||
|
|
|
@ -7,6 +7,7 @@ import test.test_set
|
||||||
import random
|
import random
|
||||||
import collections
|
import collections
|
||||||
import itertools
|
import itertools
|
||||||
|
import types
|
||||||
|
|
||||||
# list, tuple and dict subclasses that do or don't overwrite __repr__
|
# list, tuple and dict subclasses that do or don't overwrite __repr__
|
||||||
class list2(list):
|
class list2(list):
|
||||||
|
@ -271,6 +272,34 @@ class QueryTestCase(unittest.TestCase):
|
||||||
'a': 6,
|
'a': 6,
|
||||||
'lazy': 7,
|
'lazy': 7,
|
||||||
'dog': 8}""")
|
'dog': 8}""")
|
||||||
|
|
||||||
|
def test_mapping_proxy(self):
|
||||||
|
words = 'the quick brown fox jumped over a lazy dog'.split()
|
||||||
|
d = dict(zip(words, itertools.count()))
|
||||||
|
m = types.MappingProxyType(d)
|
||||||
|
self.assertEqual(pprint.pformat(m), """\
|
||||||
|
mappingproxy({'a': 6,
|
||||||
|
'brown': 2,
|
||||||
|
'dog': 8,
|
||||||
|
'fox': 3,
|
||||||
|
'jumped': 4,
|
||||||
|
'lazy': 7,
|
||||||
|
'over': 5,
|
||||||
|
'quick': 1,
|
||||||
|
'the': 0})""")
|
||||||
|
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})""")
|
||||||
|
|
||||||
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()',
|
||||||
'others.should.not.be': 'like.this'}
|
'others.should.not.be': 'like.this'}
|
||||||
|
|
|
@ -26,6 +26,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #23502: The pprint module now supports mapping proxies.
|
||||||
|
|
||||||
- Issue #17530: pprint now wraps long bytes objects and bytearrays.
|
- Issue #17530: pprint now wraps long bytes objects and bytearrays.
|
||||||
|
|
||||||
- Issue #22687: Fixed some corner cases in breaking words in tetxtwrap.
|
- Issue #22687: Fixed some corner cases in breaking words in tetxtwrap.
|
||||||
|
|
Loading…
Reference in New Issue