mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Issue #23775: pprint() of OrderedDict now outputs the same representation
as repr().
This commit is contained in:
		
							parent
							
								
									f3fa308817
								
							
						
					
					
						commit
						aa4c36fbbb
					
				
					 3 changed files with 40 additions and 24 deletions
				
			
		| 
						 | 
					@ -34,10 +34,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 @@ def _pprint_dict(self, object, stream, indent, allowance, context, level):
 | 
				
			||||||
            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 = 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,
 | 
					            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 @@ def test_sorted_dict(self):
 | 
				
			||||||
            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 @@ def test_mapping_proxy(self):
 | 
				
			||||||
        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…
	
	Add table
		Add a link
		
	
		Reference in a new issue