Skip to content

Commit dcd6b52

Browse files
committed
#1351692: in pprint, always call format() for dict and list items to enable
custom formatting of contents via subclassing PrettyPrinter.
1 parent da40723 commit dcd6b52

File tree

1 file changed

+60
-55
lines changed

1 file changed

+60
-55
lines changed

Lib/pprint.py

Lines changed: 60 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -131,65 +131,70 @@ def _format(self, object, stream, indent, allowance, context, level):
131131
sepLines = _len(rep) > (self._width - 1 - indent - allowance)
132132
write = stream.write
133133

134-
if sepLines:
135-
r = getattr(typ, "__repr__", None)
136-
if issubclass(typ, dict) and r is dict.__repr__:
137-
write('{')
138-
if self._indent_per_level > 1:
139-
write((self._indent_per_level - 1) * ' ')
140-
length = _len(object)
141-
if length:
142-
context[objid] = 1
143-
indent = indent + self._indent_per_level
144-
items = object.items()
145-
items.sort()
146-
key, ent = items[0]
147-
rep = self._repr(key, context, level)
148-
write(rep)
149-
write(': ')
150-
self._format(ent, stream, indent + _len(rep) + 2,
151-
allowance + 1, context, level)
152-
if length > 1:
153-
for key, ent in items[1:]:
154-
rep = self._repr(key, context, level)
134+
r = getattr(typ, "__repr__", None)
135+
if issubclass(typ, dict) and r is dict.__repr__:
136+
write('{')
137+
if self._indent_per_level > 1:
138+
write((self._indent_per_level - 1) * ' ')
139+
length = _len(object)
140+
if length:
141+
context[objid] = 1
142+
indent = indent + self._indent_per_level
143+
items = object.items()
144+
items.sort()
145+
key, ent = items[0]
146+
rep = self._repr(key, context, level)
147+
write(rep)
148+
write(': ')
149+
self._format(ent, stream, indent + _len(rep) + 2,
150+
allowance + 1, context, level)
151+
if length > 1:
152+
for key, ent in items[1:]:
153+
rep = self._repr(key, context, level)
154+
if sepLines:
155155
write(',\n%s%s: ' % (' '*indent, rep))
156-
self._format(ent, stream, indent + _len(rep) + 2,
157-
allowance + 1, context, level)
158-
indent = indent - self._indent_per_level
159-
del context[objid]
160-
write('}')
161-
return
162-
163-
if (issubclass(typ, list) and r is list.__repr__) or \
164-
(issubclass(typ, tuple) and r is tuple.__repr__):
165-
if issubclass(typ, list):
166-
write('[')
167-
endchar = ']'
168-
else:
169-
write('(')
170-
endchar = ')'
171-
if self._indent_per_level > 1:
172-
write((self._indent_per_level - 1) * ' ')
173-
length = _len(object)
174-
if length:
175-
context[objid] = 1
176-
indent = indent + self._indent_per_level
177-
self._format(object[0], stream, indent, allowance + 1,
178-
context, level)
179-
if length > 1:
180-
for ent in object[1:]:
181-
write(',\n' + ' '*indent)
182-
self._format(ent, stream, indent,
183-
allowance + 1, context, level)
184-
indent = indent - self._indent_per_level
185-
del context[objid]
186-
if issubclass(typ, tuple) and length == 1:
187-
write(',')
188-
write(endchar)
189-
return
156+
else:
157+
write(', %s: ' % rep)
158+
self._format(ent, stream, indent + _len(rep) + 2,
159+
allowance + 1, context, level)
160+
indent = indent - self._indent_per_level
161+
del context[objid]
162+
write('}')
163+
return
190164

165+
if (issubclass(typ, list) and r is list.__repr__) or \
166+
(issubclass(typ, tuple) and r is tuple.__repr__):
167+
if issubclass(typ, list):
168+
write('[')
169+
endchar = ']'
170+
else:
171+
write('(')
172+
endchar = ')'
173+
if self._indent_per_level > 1:
174+
write((self._indent_per_level - 1) * ' ')
175+
length = _len(object)
176+
if length:
177+
context[objid] = 1
178+
indent = indent + self._indent_per_level
179+
self._format(object[0], stream, indent, allowance + 1,
180+
context, level)
181+
if length > 1:
182+
for ent in object[1:]:
183+
if sepLines:
184+
write(',\n' + ' '*indent)
185+
else:
186+
write(', ')
187+
self._format(ent, stream, indent,
188+
allowance + 1, context, level)
189+
indent = indent - self._indent_per_level
190+
del context[objid]
191+
if issubclass(typ, tuple) and length == 1:
192+
write(',')
193+
write(endchar)
194+
return
191195
write(rep)
192196

197+
193198
def _repr(self, object, context, level):
194199
repr, readable, recursive = self.format(object, context.copy(),
195200
self._depth, level)

0 commit comments

Comments
 (0)