Skip to content

Commit d1a06af

Browse files
committed
exceptions can have a detailed message that is only used for leaf errors
1 parent 43449b2 commit d1a06af

File tree

4 files changed

+602
-176
lines changed

4 files changed

+602
-176
lines changed

schema_salad/exceptions.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ def __init__(
1515
sl: Optional[SourceLine] = None,
1616
children: Optional[Sequence["SchemaSaladException"]] = None,
1717
bullet_for_children: str = "",
18+
detailed_message: Optional[str] = None,
1819
) -> None:
1920
super().__init__(msg)
2021
self.message = self.args[0]
22+
self.detailed_message = detailed_message
2123
self.file: Optional[str] = None
2224
self.start: Optional[tuple[int, int]] = None
2325
self.end: Optional[tuple[int, int]] = None
@@ -97,14 +99,23 @@ def summary(self, level: int = 0, with_bullet: bool = False) -> str:
9799
indent_per_level = 2
98100
spaces = (level * indent_per_level) * " "
99101
bullet = self.bullet + " " if len(self.bullet) > 0 and with_bullet else ""
100-
return f"{self.prefix()}{spaces}{bullet}{self.message}"
102+
message_string = (
103+
self.detailed_message
104+
if (len(self.children) < 1 and self.detailed_message)
105+
else self.message
106+
)
107+
return f"{self.prefix()}{spaces}{bullet}{message_string}"
101108

102109
def __str__(self) -> str:
103110
"""Convert to a string using :py:meth:`pretty_str`."""
104111
return str(self.pretty_str())
105112

106113
def pretty_str(self, level: int = 0) -> str:
107-
messages = len(self.message)
114+
messages = (
115+
len(self.message)
116+
if len(self.children) > 0
117+
else len(self.detailed_message or self.message)
118+
)
108119
my_summary = [self.summary(level, True)] if messages else []
109120
next_level = level + 1 if messages else level
110121

0 commit comments

Comments
 (0)