Kaydet (Commit) dcd6b522 authored tarafından Georg Brandl's avatar Georg Brandl

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

custom formatting of contents via subclassing PrettyPrinter.
üst da407232
...@@ -131,65 +131,70 @@ class PrettyPrinter: ...@@ -131,65 +131,70 @@ 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('{') if self._indent_per_level > 1:
if self._indent_per_level > 1: write((self._indent_per_level - 1) * ' ')
write((self._indent_per_level - 1) * ' ') length = _len(object)
length = _len(object) if length:
if length: context[objid] = 1
context[objid] = 1 indent = indent + self._indent_per_level
indent = indent + self._indent_per_level items = object.items()
items = object.items() items.sort()
items.sort() key, ent = items[0]
key, ent = items[0] rep = self._repr(key, context, level)
rep = self._repr(key, context, level) write(rep)
write(rep) write(': ')
write(': ') self._format(ent, stream, indent + _len(rep) + 2,
self._format(ent, stream, indent + _len(rep) + 2, allowance + 1, context, level)
allowance + 1, context, level) 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))
self._format(ent, stream, indent + _len(rep) + 2, else:
allowance + 1, context, level) write(', %s: ' % rep)
indent = indent - self._indent_per_level self._format(ent, stream, indent + _len(rep) + 2,
del context[objid] allowance + 1, context, level)
write('}') indent = indent - self._indent_per_level
return del context[objid]
write('}')
if (issubclass(typ, list) and r is list.__repr__) or \ return
(issubclass(typ, tuple) and r is tuple.__repr__):
if issubclass(typ, list):
write('[')
endchar = ']'
else:
write('(')
endchar = ')'
if self._indent_per_level > 1:
write((self._indent_per_level - 1) * ' ')
length = _len(object)
if length:
context[objid] = 1
indent = indent + self._indent_per_level
self._format(object[0], stream, indent, allowance + 1,
context, level)
if length > 1:
for ent in object[1:]:
write(',\n' + ' '*indent)
self._format(ent, stream, indent,
allowance + 1, context, level)
indent = indent - self._indent_per_level
del context[objid]
if issubclass(typ, tuple) and length == 1:
write(',')
write(endchar)
return
if (issubclass(typ, list) and r is list.__repr__) or \
(issubclass(typ, tuple) and r is tuple.__repr__):
if issubclass(typ, list):
write('[')
endchar = ']'
else:
write('(')
endchar = ')'
if self._indent_per_level > 1:
write((self._indent_per_level - 1) * ' ')
length = _len(object)
if length:
context[objid] = 1
indent = indent + self._indent_per_level
self._format(object[0], stream, indent, allowance + 1,
context, level)
if length > 1:
for ent in object[1:]:
if sepLines:
write(',\n' + ' '*indent)
else:
write(', ')
self._format(ent, stream, indent,
allowance + 1, context, level)
indent = indent - self._indent_per_level
del context[objid]
if issubclass(typ, tuple) and length == 1:
write(',')
write(endchar)
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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment