Source code for reporting.docs_production_summary

"""Generate markdown summaries for production descriptions."""

from pathlib import Path

from packaging.version import Version

from simtools.io import ascii_handler
from simtools.model_repository import files


[docs] def collect_production_descriptions(data_path=None, model_reader=None): """Collect production versions and descriptions from simulation-models info files. Parameters ---------- data_path : str or Path, optional Path to the simulation-models repository root. model_reader : SimulationModelReader, optional Reader for a filesystem or Git simulation-model source. Returns ------- list[tuple] List with ``(model_version, description)`` pairs from the model source. """ if model_reader is not None: return model_reader.get_production_descriptions() if data_path is None: raise ValueError("A model path or model reader is required.") productions_path = Path(data_path) / "simulation-models" / "productions" info_files = set(productions_path.glob("*/info.yaml")) | set( productions_path.glob("*/info.yml") ) return files.collect_production_descriptions(info_files, ascii_handler.collect_data_from_file)
[docs] def write_production_summary_markdown(data_path=None, output_file=None, model_reader=None): """Write a markdown table with production versions and short descriptions. Parameters ---------- data_path : str or Path, optional Path to the simulation-models repository root. output_file : str or Path, optional Markdown file to write. model_reader : SimulationModelReader, optional Reader for a filesystem or Git simulation-model source. """ if output_file is None: raise ValueError("An output file is required.") descriptions = sorted( collect_production_descriptions(data_path=data_path, model_reader=model_reader), key=lambda item: Version(item[0]), reverse=True, ) lines = [ "<!-- simtools: keep-index -->", "# Productions", "", "Production versions define sets of model parameters used in simulations.", "Select a version to browse its array and simulation reports.", "", "| Production version | Description |", "| --- | --- |", ] for model_version, description in descriptions: escaped_description = description.replace("|", "\\|") lines.append(f"| [{model_version}]({model_version}/index.md) | {escaped_description} |") lines.extend(["", "```{toctree}", ":hidden:", ":maxdepth: 1", ""]) lines.extend(f"{model_version}/index" for model_version, _ in descriptions) lines.extend(["```", ""]) output_file = Path(output_file) output_file.parent.mkdir(parents=True, exist_ok=True) output_file.write_text("\n".join(lines) + "\n", encoding="utf-8")