Skip to content

Commit 2c773ce

Browse files
committed
fix: Show detailed report when error occurs
1 parent b269055 commit 2c773ce

2 files changed

Lines changed: 25 additions & 28 deletions

File tree

src/sphinxnotes/render/ctxnodes.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,8 @@ def render(self, host: Host) -> None:
100100
# Create debug report.
101101
report = Report('Render Report', 'DEBUG', source=self.source, line=self.line)
102102

103-
# Constructor for error report.
104-
def err_report() -> Report:
105-
if self.template.debug:
106-
# Reuse the render report as possible.
107-
report['type'] = 'ERROR'
108-
return report
109-
return Report('Render Report', 'ERROR', source=self.source, line=self.line)
110-
111103
if self._ctx_pickle_error is not None:
112-
report = err_report()
104+
report.level = 'ERROR'
113105
report.exception(
114106
self._ctx_pickle_error,
115107
caption=(
@@ -131,10 +123,10 @@ def err_report() -> Report:
131123
try:
132124
ctx = self.ctx = pdata.resolve(host.env)
133125
except Exception:
134-
report = err_report()
126+
report.level = 'ERROR'
135127
report.current_exception(
136128
caption='Failed to resolve unresolved context:',
137-
debug=self.template.debug,
129+
traceback=self.template.debug,
138130
)
139131
self += report
140132
return None
@@ -170,9 +162,9 @@ def err_report() -> Report:
170162
debug=self.template.debug,
171163
)
172164
except Exception:
173-
report = err_report()
165+
report.level = 'ERROR'
174166
report.current_exception(
175-
caption='Failed to render Jinja template:', debug=self.template.debug
167+
caption='Failed to render Jinja template:', traceback=self.template.debug
176168
)
177169
self += report
178170
return
@@ -186,13 +178,13 @@ def err_report() -> Report:
186178
try:
187179
ns, msgs = MarkupRenderer(host).render(markup, inline=self.inline)
188180
except Exception:
189-
report = err_report()
181+
report.level = 'ERROR'
190182
report.current_exception(
191183
caption=(
192184
'Failed to render markup text '
193185
f'to {"inline " if self.inline else ""}nodes:'
194186
),
195-
debug=self.template.debug,
187+
traceback=self.template.debug,
196188
)
197189
self += report
198190
return

src/sphinxnotes/render/utils/__init__.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,24 @@ def find_nearest_block_element(node: nodes.Node | None) -> nodes.Element | None:
9797

9898

9999
class Report(nodes.system_message):
100-
type Type = Literal['DEBUG', 'INFO', 'WARNING', 'ERROR']
100+
type Level = Literal['DEBUG', 'INFO', 'WARNING', 'ERROR']
101101

102102
title: str
103103

104104
def __init__(
105-
self, title: str, typ: Type = 'DEBUG', *children, **attributes
105+
self, title: str, level: Level = 'DEBUG', *children, **attributes
106106
) -> None:
107-
super().__init__(title + ':', type=typ, level=2, *children, **attributes)
107+
super().__init__(title + ':', type=level, level=2, *children, **attributes)
108108
self.title = title
109109

110+
@property
111+
def level(self) -> Level:
112+
return self['type']
113+
114+
@level.setter
115+
def level(self, level: Level):
116+
self['type'] = level
117+
110118
def empty(self) -> bool:
111119
# title is the only children
112120
return len(self.children) <= 1
@@ -177,18 +185,15 @@ def exception(
177185
self.code(msg, lang='pytb', caption=caption)
178186

179187
def current_exception(
180-
self, caption: str | None = None, debug: bool = False
188+
self, caption: str | None = None, traceback: bool = False
181189
) -> None:
182-
if debug:
190+
if traceback:
183191
self.traceback(caption=caption)
184-
return
185-
_, e, _ = sys.exc_info()
186-
if e is None:
187-
return
188-
self.exception(e, caption=caption)
189-
190-
def is_error(self) -> bool:
191-
return self['type'] == 'ERROR'
192+
else:
193+
_, e, _ = sys.exc_info()
194+
if e is not None:
195+
self.exception(e, caption=caption)
196+
192197

193198
type Inliner = RstInliner | tuple[nodes.document, nodes.Element]
194199

0 commit comments

Comments
 (0)