Source code for passengersim.config.pretty
from typing import Any
from pydantic import BaseModel
[docs]
class PrettyModel(BaseModel):
"""Pretty-print as YAML style outputs."""
def __repr_with_indent__(self, indent=0):
x = []
i = " " * indent
for k, v in self:
try:
val = v.__repr_with_indent__(indent)
except AttributeError:
if isinstance(v, dict):
if len(v) == 0:
val = "{}"
else:
val = repr_dict_with_indent(v, indent)
else:
val = repr(v)
if isinstance(v, list) and len(val) > 70:
val = "- " + "\n- ".join(repr(j) for j in v)
if "\n" in val:
val_lines = val.split("\n")
val = "\n " + "\n ".join(val_lines)
elif isinstance(v, list):
if len(v) == 0:
val = "[]"
else:
val = "\n - " + "\n - ".join(repr(j) for j in v)
x.append(f"{i}{k}: {val}")
return "\n".join(x)
def __repr__(self):
return f"{self.__class__.__name__}:\n" + self.__repr_with_indent__(2)
def repr_dict_with_indent(d: dict[str, Any], indent=0):
x = []
i = " " * indent
for k, v in d.items():
try:
val = v.__repr_with_indent__(indent)
except AttributeError:
if isinstance(v, dict):
val = repr_dict_with_indent(v, indent)
else:
val = repr(v)
if isinstance(v, list) and len(val) > 70:
val = "- " + "\n- ".join(repr(j) for j in v)
if "\n" in val:
val_lines = val.split("\n")
val = "\n " + "\n ".join(val_lines)
elif isinstance(v, list):
val = "\n - " + "\n - ".join(repr(j) for j in v)
x.append(f"{i}{k}: {val}")
return "\n".join(x)