#1351692: in pprint, always call format() for dict and list items to enable

custom formatting of contents via subclassing PrettyPrinter.
This commit is contained in:
Georg Brandl 2008-01-20 11:13:29 +00:00
parent da407232e0
commit dcd6b52206

View file

@ -131,7 +131,6 @@ class PrettyPrinter:
sepLines = _len(rep) > (self._width - 1 - indent - allowance) sepLines = _len(rep) > (self._width - 1 - indent - allowance)
write = stream.write write = stream.write
if sepLines:
r = getattr(typ, "__repr__", None) r = getattr(typ, "__repr__", None)
if issubclass(typ, dict) and r is dict.__repr__: if issubclass(typ, dict) and r is dict.__repr__:
write('{') write('{')
@ -152,7 +151,10 @@ class PrettyPrinter:
if length > 1: if length > 1:
for key, ent in items[1:]: for key, ent in items[1:]:
rep = self._repr(key, context, level) rep = self._repr(key, context, level)
if sepLines:
write(',\n%s%s: ' % (' '*indent, rep)) write(',\n%s%s: ' % (' '*indent, rep))
else:
write(', %s: ' % rep)
self._format(ent, stream, indent + _len(rep) + 2, self._format(ent, stream, indent + _len(rep) + 2,
allowance + 1, context, level) allowance + 1, context, level)
indent = indent - self._indent_per_level indent = indent - self._indent_per_level
@ -178,7 +180,10 @@ class PrettyPrinter:
context, level) context, level)
if length > 1: if length > 1:
for ent in object[1:]: for ent in object[1:]:
if sepLines:
write(',\n' + ' '*indent) write(',\n' + ' '*indent)
else:
write(', ')
self._format(ent, stream, indent, self._format(ent, stream, indent,
allowance + 1, context, level) allowance + 1, context, level)
indent = indent - self._indent_per_level indent = indent - self._indent_per_level
@ -187,9 +192,9 @@ class PrettyPrinter:
write(',') write(',')
write(endchar) write(endchar)
return return
write(rep) write(rep)
def _repr(self, object, context, level): def _repr(self, object, context, level):
repr, readable, recursive = self.format(object, context.copy(), repr, readable, recursive = self.format(object, context.copy(),
self._depth, level) self._depth, level)