diff --git a/pelican/plugins/yaml_metadata/yaml_metadata.py b/pelican/plugins/yaml_metadata/yaml_metadata.py old mode 100644 new mode 100755 index 44bf908..9463e39 --- a/pelican/plugins/yaml_metadata/yaml_metadata.py +++ b/pelican/plugins/yaml_metadata/yaml_metadata.py @@ -68,6 +68,14 @@ def _parse_date(obj): return get_date(str(obj).strip().replace("_", " ")) +def _convert_py_to_meta(obj) -> list[str]: + # Convert a yaml-parsed python object to meta's list of strings + if isinstance(obj, list): + return [str(i) for i in obj] + else: + return [str(obj)] + + class YAMLMetadataReader(MarkdownReader): """Reader for Markdown files with YAML metadata.""" @@ -98,9 +106,18 @@ def read(self, source_path): ) return super().read(source_path) + metadata = self._load_yaml_metadata(m.group("metadata"), source_path) + + # Simulate markdown.extensions.meta's behavior + # of writing the markdown object's Meta attribiute + # Note this is not 1:1 (datetimes are reformatted) + self._md.Meta = { # type: ignore + k: _convert_py_to_meta(v) for k, v in metadata.items() + } + return ( self._md.reset().convert(m.group("content")), - self._load_yaml_metadata(m.group("metadata"), source_path), + metadata, ) def _load_yaml_metadata(self, text, source_path):