diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pprint.py | 27 | ||||
-rw-r--r-- | Lib/test/test_pprint.py | 59 |
2 files changed, 86 insertions, 0 deletions
diff --git a/Lib/pprint.py b/Lib/pprint.py index 4bfcc31b25..7c1118a484 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -342,6 +342,33 @@ class PrettyPrinter: _dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy + def _pprint_simplenamespace(self, object, stream, indent, allowance, context, level): + if type(object) is _types.SimpleNamespace: + # The SimpleNamespace repr is "namespace" instead of the class + # name, so we do the same here. For subclasses; use the class name. + cls_name = 'namespace' + else: + cls_name = object.__class__.__name__ + indent += len(cls_name) + 1 + delimnl = ',\n' + ' ' * indent + items = object.__dict__.items() + last_index = len(items) - 1 + + stream.write(cls_name + '(') + for i, (key, ent) in enumerate(items): + stream.write(key) + stream.write('=') + + last = i == last_index + self._format(ent, stream, indent + len(key) + 1, + allowance if last else 1, + context, level) + if not last: + stream.write(delimnl) + stream.write(')') + + _dispatch[_types.SimpleNamespace.__repr__] = _pprint_simplenamespace + 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 index 269ac0624e..b3b8715a5f 100644 --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -346,6 +346,65 @@ mappingproxy(OrderedDict([('the', 0), ('lazy', 7), ('dog', 8)]))""") + def test_empty_simple_namespace(self): + ns = types.SimpleNamespace() + formatted = pprint.pformat(ns) + self.assertEqual(formatted, "namespace()") + + def test_small_simple_namespace(self): + ns = types.SimpleNamespace(a=1, b=2) + formatted = pprint.pformat(ns) + self.assertEqual(formatted, "namespace(a=1, b=2)") + + def test_simple_namespace(self): + ns = types.SimpleNamespace( + the=0, + quick=1, + brown=2, + fox=3, + jumped=4, + over=5, + a=6, + lazy=7, + dog=8, + ) + formatted = pprint.pformat(ns, width=60) + self.assertEqual(formatted, """\ +namespace(the=0, + quick=1, + brown=2, + fox=3, + jumped=4, + over=5, + a=6, + lazy=7, + dog=8)""") + + def test_simple_namespace_subclass(self): + class AdvancedNamespace(types.SimpleNamespace): pass + ns = AdvancedNamespace( + the=0, + quick=1, + brown=2, + fox=3, + jumped=4, + over=5, + a=6, + lazy=7, + dog=8, + ) + formatted = pprint.pformat(ns, width=60) + self.assertEqual(formatted, """\ +AdvancedNamespace(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'} |