This commit is contained in:
boxydog 2025-07-07 08:58:11 +02:00 committed by GitHub
commit 7e6453dba2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 44 additions and 9 deletions

3
RELEASE.md Normal file
View file

@ -0,0 +1,3 @@
Release type: major
Change default of `--fatal` command line switch to terminate on error.

View file

@ -442,12 +442,12 @@ def parse_arguments(argv=None):
parser.add_argument(
"--fatal",
metavar="errors|warnings",
choices=("errors", "warnings"),
default="",
metavar="errors|warnings|ignore",
choices=("errors", "warnings", "ignore"),
default="errors",
help=(
"Exit the program with non-zero status if any "
"errors/warnings encountered."
"errors/warnings encountered, or ignore any errors."
),
)

View file

@ -131,13 +131,23 @@ DEFAULT_LOG_HANDLER = RichHandler(console=console)
def init(
level=None,
fatal="",
fatal="errors",
handler=DEFAULT_LOG_HANDLER,
name=None,
logs_dedup_min_level=None,
):
"""Initialize the logger.
:param level: the log level
:param fatal: how to set up the FatalLogger. If "warning", then warnings are fatal.
If fatal is set to anything other than "" or "ignore",
then errors are fatal.
:param handler: the logging handler
:param name: the name of the logger to use
:param logs_dedup_min_level: the LimitFilter.LOGS_DEDUP_MIN_LEVEL to use
"""
FatalLogger.warnings_fatal = fatal.startswith("warning")
FatalLogger.errors_fatal = bool(fatal)
FatalLogger.errors_fatal = bool(fatal) and fatal != "ignore"
LOG_FORMAT = "%(message)s"
logging.basicConfig(
@ -155,12 +165,13 @@ def init(
LimitFilter.LOGS_DEDUP_MIN_LEVEL = logs_dedup_min_level
def log_warnings():
def log_warnings(fatal: str) -> None:
"""Redirect warnings module to use logging instead."""
import warnings
logging.captureWarnings(True)
warnings.simplefilter("default", DeprecationWarning)
init(logging.DEBUG, name="py.warnings")
init(logging.DEBUG, name="py.warnings", fatal=fatal)
if __name__ == "__main__":

View file

@ -4,7 +4,8 @@ import warnings
from pelican.log import log_warnings
# redirect warnings module to use logging instead
log_warnings()
# "ignore" means "don't raise on logging an error"
log_warnings("ignore")
# setup warnings to log DeprecationWarning's and error on
# warnings in pelican's codebase

View file

@ -0,0 +1,20 @@
import unittest
from unittest.mock import MagicMock, patch
from pelican import DEFAULT_LOG_HANDLER, main
class TestLog(unittest.TestCase):
@patch("pelican.get_instance")
@patch("pelican.init_logging")
def test_main_fatal_default(self, init_logging_mock, get_instance):
get_instance.side_effect = lambda *args, **kwargs: (MagicMock(), MagicMock())
main()
init_logging_mock.assert_called_once_with(
level=None,
# default is "errors"
fatal="errors",
name="pelican",
handler=DEFAULT_LOG_HANDLER,
logs_dedup_min_level=30,
)