From 012b8bf4c1293137af269cb381e2c9e3f5a1dca2 Mon Sep 17 00:00:00 2001 From: Jules Walzer-Goldfeld <54960783+juleswg23@users.noreply.github.com> Date: Tue, 24 Feb 2026 16:09:18 -0500 Subject: [PATCH] add function to mimic the behavior of quarto-r write_yaml_metadata_block --- quarto/__init__.py | 2 +- quarto/metadata.py | 11 ++++++++++- quarto/utils.py | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 quarto/utils.py diff --git a/quarto/__init__.py b/quarto/__init__.py index 4fb9a69..0a738e1 100644 --- a/quarto/__init__.py +++ b/quarto/__init__.py @@ -5,7 +5,7 @@ from quarto.quarto import path from quarto.render import render -from quarto.metadata import metadata +from quarto.metadata import metadata, write_yaml_metadata_block from quarto.theme import theme_colors_altair, theme_brand_altair, \ theme_colors_bokeh, theme_brand_bokeh, \ theme_colors_great_tables, theme_brand_great_tables, \ diff --git a/quarto/metadata.py b/quarto/metadata.py index 8477d5c..2654af8 100644 --- a/quarto/metadata.py +++ b/quarto/metadata.py @@ -4,10 +4,19 @@ import subprocess from quarto.quarto import find_quarto +from quarto.utils import as_yaml_block def metadata(input): args = ["metadata", input, "--json"] metadata_json = subprocess.check_output([find_quarto()] + args) return json.loads(metadata_json) - +def write_yaml_metadata_block(_list=None, **kwargs): + """Write YAML metadata block that will be parsed by Quarto.""" + meta = kwargs + if _list is not None: + meta = {**_list, **kwargs} + if len(meta) == 0: + return + yaml_block = as_yaml_block(meta) + print(yaml_block) \ No newline at end of file diff --git a/quarto/utils.py b/quarto/utils.py new file mode 100644 index 0000000..330a69e --- /dev/null +++ b/quarto/utils.py @@ -0,0 +1,16 @@ +import yaml + +def as_yaml(x): + return yaml.dump( + x, + default_flow_style=False, + allow_unicode=True, + sort_keys=False + ) + + +def as_yaml_block(x): + yaml_content = as_yaml(x) + return f"---\n{yaml_content}---\n" + +