fix: relax mike settings validation (#932)

Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr>
This commit is contained in:
Timothée Mazzucotelli
2026-09-13 10:30:54 +00:00
committed by GitHub
parent be163399a5
commit 13fd89ee17
2 changed files with 43 additions and 2 deletions
+35
View File
@@ -128,6 +128,36 @@ def test_normalizes_mike_defaults() -> None:
}
@pytest.mark.parametrize("version_selector", [False, True])
def test_preserves_mike_version_selector(version_selector: bool) -> None:
plugins = _convert_plugins({"mike": {"version_selector": version_selector}})
assert plugins["mike"]["config"]["version_selector"] is version_selector
def test_silently_discards_unsupported_mike_options(
capsys: pytest.CaptureFixture[str],
) -> None:
plugins = _convert_plugins(
{
"mike": {
"version_selector": False,
"css_dir": "assets/css",
"javascript_dir": "assets/js",
}
}
)
assert plugins["mike"]["config"] == {
"alias_type": "symlink",
"redirect_template": None,
"deploy_prefix": "",
"canonical_version": None,
"version_selector": False,
}
assert capsys.readouterr().err == ""
@pytest.mark.parametrize("name", [*PYTHON_PLUGINS, "tags", "external"])
def test_plugin_configuration_must_be_a_mapping(name: str) -> None:
with pytest.raises(
@@ -328,6 +358,11 @@ def test_silently_discards_unsupported_autorefs_options(
),
("offline", {"enabled": "yes"}, "enabled must be a boolean"),
("mike", {"canonical_version": 42}, "must be a string or null"),
(
"mike",
{"version_selector": "false"},
"version_selector must be a boolean",
),
("autorefs", {"enabled": "yes"}, "enabled must be a boolean"),
("markdown-exec", {"ansi": "sometimes"}, "ansi must be"),
(
+8 -2
View File
@@ -1675,12 +1675,18 @@ def _convert_plugins(value: Any, config: dict) -> dict:
"deploy_prefix": "",
}
nullable_strings = ("redirect_template", "canonical_version")
# Zensical bundles its own version selector assets, so accept and
# discard Mike's asset directory options for compatibility.
unsupported = {"css_dir", "javascript_dir"}
_reject_unknown_options(
"mike",
mike,
{"enabled", *string_defaults, *nullable_strings},
{"enabled", "version_selector", *string_defaults, *nullable_strings}
| unsupported,
)
_validate_boolean_options("mike", mike, ("enabled",))
for name in sorted(unsupported & mike.keys()):
mike.pop(name)
_validate_boolean_options("mike", mike, ("enabled", "version_selector"))
for name, default in string_defaults.items():
set_default(mike, name, default)
_validate_string_options("mike", mike, string_defaults)