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" + +