Warning/error logging: be explicit in how the stacklevel variable is handled

This commit is contained in:
MinchinWeb 2024-01-27 10:47:54 -07:00
commit f1f2ceccc7

View file

@ -85,19 +85,39 @@ class FatalLogger(LimitLogger):
warnings_fatal = False
errors_fatal = False
# adding `stacklevel=2` means that the displayed filename and line number
# will match the "original" calling location, rather than the wrapper here
def warning(self, *args, **kwargs):
if "stacklevel" not in kwargs.keys():
kwargs["stacklevel"] = 2
super().warning(*args, **kwargs)
def warning(self, *args, stacklevel=1, **kwargs):
"""
Displays a logging warning.
Wrapping it here allows Pelican to filter warnings, and conditionally
make warnings fatal.
Args:
stacklevel (int): the stacklevel that would be used to display the
calling location, except for this function. Adjusting the
stacklevel allows you to see the "true" calling location of the
warning, rather than this wrapper location.
"""
stacklevel += 1
super().warning(*args, stacklevel=stacklevel, **kwargs)
if FatalLogger.warnings_fatal:
raise RuntimeError("Warning encountered")
def error(self, *args, **kwargs):
if "stacklevel" not in kwargs.keys():
kwargs["stacklevel"] = 2
super().error(*args, **kwargs)
def error(self, *args, stacklevel=1, **kwargs):
"""
Displays a logging error.
Wrapping it here allows Pelican to filter errors, and conditionally
make errors non-fatal.
Args:
stacklevel (int): the stacklevel that would be used to display the
calling location, except for this function. Adjusting the
stacklevel allows you to see the "true" calling location of the
error, rather than this wrapper location.
"""
stacklevel += 1
super().error(*args, stacklevel=stacklevel, **kwargs)
if FatalLogger.errors_fatal:
raise RuntimeError("Error encountered")