[Python-checkins] cpython: Issue #23502: The pprint module now supports mapping proxies.

serhiy.storchaka python-checkins at python.org
Tue Mar 24 18:32:35 CET 2015


https://hg.python.org/cpython/rev/646a7e1da7f0
changeset:   95169:646a7e1da7f0
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Tue Mar 24 19:31:50 2015 +0200
summary:
  Issue #23502: The pprint module now supports mapping proxies.
In particular the __dict__ attributes of building types.

files:
  Lib/pprint.py           |   9 +++++++++
  Lib/test/test_pprint.py |  29 +++++++++++++++++++++++++++++
  Misc/NEWS               |   2 ++
  3 files changed, 40 insertions(+), 0 deletions(-)


diff --git a/Lib/pprint.py b/Lib/pprint.py
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -36,6 +36,7 @@
 
 import re
 import sys as _sys
+import types as _types
 from collections import OrderedDict as _OrderedDict
 from io import StringIO as _StringIO
 
@@ -313,6 +314,14 @@
 
     _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,
                            level):
         write = stream.write
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
@@ -7,6 +7,7 @@
 import random
 import collections
 import itertools
+import types
 
 # list, tuple and dict subclasses that do or don't overwrite __repr__
 class list2(list):
@@ -271,6 +272,34 @@
  'a': 6,
  'lazy': 7,
  '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):
         o = {'names with spaces': 'should be presented using repr()',
              'others.should.not.be': 'like.this'}
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -26,6 +26,8 @@
 Library
 -------
 
+- Issue #23502: The pprint module now supports mapping proxies.
+
 - Issue #17530: pprint now wraps long bytes objects and bytearrays.
 
 - Issue #22687: Fixed some corner cases in breaking words in tetxtwrap.

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


More information about the Python-checkins mailing list