Improve YAML validation for MkDocs config (#129)

Adds a custom SafeLoader to tolerate !!python/name tags in mkdocs.yml, allowing validation of YAML files that use MkDocs or pymdownx extensions without executing code.
This commit is contained in:
Ian Bassi
2026-01-19 09:35:54 -03:00
committed by GitHub
parent b00a19b138
commit c288bda724

View File

@@ -235,7 +235,17 @@ def update_mkdocs_yml(mkdocs_path: Path, nav_yaml: str) -> None:
# Validate YAML before writing (basic check - try importing yaml if available)
try:
import yaml
yaml.safe_load(new_content)
class _MkDocsSafeLoader(yaml.SafeLoader):
"""SafeLoader that tolerates mkdocs Python tags."""
# Allow !!python/name:... tags used by MkDocs/pymdownx without executing code
_MkDocsSafeLoader.add_constructor(
'tag:yaml.org,2002:python/name',
lambda loader, node: loader.construct_scalar(node)
)
yaml.load(new_content, Loader=_MkDocsSafeLoader)
except ImportError:
# yaml module not available, skip validation
pass