fixup! Always use, and improve the AlwaysDispatchPrettyPrinter
This commit is contained in:
parent
2098854b20
commit
66f18bf7a1
|
@ -208,50 +208,44 @@ class AlwaysDispatchingPrettyPrinter(pprint.PrettyPrinter):
|
||||||
def _format_dict_items(self, items, stream, indent, allowance, context, level):
|
def _format_dict_items(self, items, stream, indent, allowance, context, level):
|
||||||
if not items:
|
if not items:
|
||||||
return
|
return
|
||||||
write = stream.write
|
|
||||||
|
# Type ignored because _indent_per_level is private.
|
||||||
item_indent = indent + self._indent_per_level # type: ignore[attr-defined]
|
item_indent = indent + self._indent_per_level # type: ignore[attr-defined]
|
||||||
delimnl = "\n" + " " * item_indent
|
delimnl = "\n" + " " * item_indent
|
||||||
for key, ent in items:
|
for key, ent in items:
|
||||||
write(delimnl)
|
stream.write(delimnl)
|
||||||
write(self._repr(key, context, level)) # type: ignore[attr-defined]
|
|
||||||
write(": ")
|
|
||||||
self._format(ent, stream, item_indent, allowance + 1, context, level)
|
|
||||||
write(",")
|
|
||||||
write("\n" + " " * indent)
|
|
||||||
|
|
||||||
def _pprint_dataclass(self, object, stream, indent, allowance, context, level):
|
|
||||||
cls_name = object.__class__.__name__
|
|
||||||
items = [
|
|
||||||
(f.name, getattr(object, f.name))
|
|
||||||
for f in dataclasses.fields(object)
|
|
||||||
if f.repr
|
|
||||||
]
|
|
||||||
if not items:
|
|
||||||
# Type ignored because _repr is private.
|
# Type ignored because _repr is private.
|
||||||
stream.write(self._repr(object, context, level)) # type: ignore[attr-defined]
|
stream.write(self._repr(key, context, level)) # type: ignore[attr-defined]
|
||||||
|
stream.write(": ")
|
||||||
|
self._format(ent, stream, item_indent, allowance + 1, context, level)
|
||||||
|
stream.write(",")
|
||||||
|
|
||||||
|
stream.write("\n" + " " * indent)
|
||||||
|
|
||||||
|
def _format_namespace_items(self, items, stream, indent, allowance, context, level):
|
||||||
|
if not items:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Force a recomputation of the indent to be at a consistent level
|
||||||
# Type ignored because _indent_per_level is private.
|
# Type ignored because _indent_per_level is private.
|
||||||
stream.write(cls_name + "(\n" + (" " * (indent + self._indent_per_level))) # type: ignore[attr-defined]
|
indent = self._indent_per_level * level # type: ignore[attr-defined]
|
||||||
# Type ignored because _ is private.
|
|
||||||
self._format_namespace_items( # type: ignore[attr-defined]
|
stream.write("\n" + " " * indent)
|
||||||
items, stream, indent + self._indent_per_level, allowance, context, level # type: ignore[attr-defined]
|
# Type ignored because _format_items is private.
|
||||||
|
super()._format_namespace_items( # type: ignore[misc]
|
||||||
|
items, stream, indent, allowance, context, level
|
||||||
)
|
)
|
||||||
stream.write(",\n" + " " * indent + ")")
|
# Type ignored because _indent_per_level is private.
|
||||||
|
stream.write(",\n" + " " * (indent - self._indent_per_level)) # type: ignore[attr-defined]
|
||||||
|
|
||||||
def _pprint_chain_map(self, object, stream, indent, allowance, context, level):
|
def _pprint_chain_map(self, object, stream, indent, allowance, context, level):
|
||||||
if not len(object.maps) or (len(object.maps) == 1 and not len(object.maps[0])):
|
if not len(object.maps) or (len(object.maps) == 1 and not len(object.maps[0])):
|
||||||
stream.write(repr(object))
|
stream.write(repr(object))
|
||||||
return
|
return
|
||||||
cls = object.__class__
|
|
||||||
stream.write(cls.__name__ + "(")
|
stream.write(object.__class__.__name__ + "(")
|
||||||
# Type ignored because _indent_per_level is private.
|
self._format_items(object.maps, stream, indent, allowance + 1, context, level)
|
||||||
item_indent = indent + self._indent_per_level # type: ignore[attr-defined]
|
stream.write(")")
|
||||||
for m in object.maps:
|
|
||||||
stream.write("\n" + " " * item_indent)
|
|
||||||
self._format(m, stream, item_indent, allowance + 1, context, level + 1)
|
|
||||||
stream.write(",")
|
|
||||||
stream.write("\n%s)" % (" " * indent))
|
|
||||||
|
|
||||||
_dispatch[collections.ChainMap.__repr__] = _pprint_chain_map
|
_dispatch[collections.ChainMap.__repr__] = _pprint_chain_map
|
||||||
|
|
||||||
|
@ -272,8 +266,7 @@ class AlwaysDispatchingPrettyPrinter(pprint.PrettyPrinter):
|
||||||
stream.write(repr(object))
|
stream.write(repr(object))
|
||||||
return
|
return
|
||||||
|
|
||||||
cls = object.__class__
|
stream.write(object.__class__.__name__ + "(")
|
||||||
stream.write(cls.__name__ + "(")
|
|
||||||
if object.maxlen is not None:
|
if object.maxlen is not None:
|
||||||
stream.write("maxlen=%d, " % object.maxlen)
|
stream.write("maxlen=%d, " % object.maxlen)
|
||||||
stream.write("[")
|
stream.write("[")
|
||||||
|
@ -315,7 +308,18 @@ class AlwaysDispatchingPrettyPrinter(pprint.PrettyPrinter):
|
||||||
|
|
||||||
def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level):
|
def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level):
|
||||||
stream.write("mappingproxy(")
|
stream.write("mappingproxy(")
|
||||||
self._format(object.copy(), stream, indent, allowance + 1, context, level)
|
self._format(
|
||||||
|
object.copy(),
|
||||||
|
stream,
|
||||||
|
indent,
|
||||||
|
allowance,
|
||||||
|
context,
|
||||||
|
# Force the mappingproxy to go back one level up.
|
||||||
|
# This is necessary as we are doing two subsequent calls
|
||||||
|
# to `_format`, which leads to the level being increased
|
||||||
|
# twice
|
||||||
|
level - 1,
|
||||||
|
)
|
||||||
stream.write(")")
|
stream.write(")")
|
||||||
|
|
||||||
_dispatch[types.MappingProxyType.__repr__] = _pprint_mappingproxy
|
_dispatch[types.MappingProxyType.__repr__] = _pprint_mappingproxy
|
||||||
|
@ -331,38 +335,6 @@ class AlwaysDispatchingPrettyPrinter(pprint.PrettyPrinter):
|
||||||
|
|
||||||
_dispatch[collections.OrderedDict.__repr__] = _pprint_ordered_dict
|
_dispatch[collections.OrderedDict.__repr__] = _pprint_ordered_dict
|
||||||
|
|
||||||
if sys.version_info[:2] > (3, 9):
|
|
||||||
|
|
||||||
def _pprint_simplenamespace(
|
|
||||||
self, object, stream, indent, allowance, context, level
|
|
||||||
):
|
|
||||||
if not len(object.__dict__):
|
|
||||||
stream.write(repr(object))
|
|
||||||
return
|
|
||||||
|
|
||||||
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__
|
|
||||||
items = object.__dict__.items()
|
|
||||||
# Type ignored because _indent_per_level is private.
|
|
||||||
stream.write(cls_name + "(\n" + " " * (indent + self._indent_per_level)) # type: ignore[attr-defined]
|
|
||||||
# Type ignored because _format_namespace_items is private.
|
|
||||||
self._format_namespace_items( # type: ignore[attr-defined]
|
|
||||||
items,
|
|
||||||
stream,
|
|
||||||
# Type ignored because _indent_per_level is private.
|
|
||||||
indent + self._indent_per_level, # type: ignore[attr-defined]
|
|
||||||
allowance + 1,
|
|
||||||
context,
|
|
||||||
level,
|
|
||||||
)
|
|
||||||
stream.write(",\n" + " " * indent + ")")
|
|
||||||
|
|
||||||
_dispatch[types.SimpleNamespace.__repr__] = _pprint_simplenamespace
|
|
||||||
|
|
||||||
def _pprint_tuple(self, object, stream, indent, allowance, context, level):
|
def _pprint_tuple(self, object, stream, indent, allowance, context, level):
|
||||||
stream.write("(")
|
stream.write("(")
|
||||||
self._format_items(object, stream, indent, allowance + 1, context, level)
|
self._format_items(object, stream, indent, allowance + 1, context, level)
|
||||||
|
|
Loading…
Reference in New Issue