Source code for glotaran.project.project_parameter_registry

"""The glotaran parameter registry module."""
from __future__ import annotations

from pathlib import Path
from typing import Literal

from glotaran.builtin.io.yml.utils import write_dict
from glotaran.io import load_parameters
from glotaran.io import save_parameters
from glotaran.model import Model
from glotaran.parameter import ParameterGroup
from glotaran.project.project_registry import ProjectRegistry


[docs]class ProjectParameterRegistry(ProjectRegistry): """A registry for parameters.""" def __init__(self, directory: Path): """Initialize a parameter registry. Parameters ---------- directory : Path The registry directory. """ super().__init__(directory / "parameters", [".yml", ".yaml", ".csv"], load_parameters)
[docs] def generate_parameters( self, model: Model, name: str | None, *, format_name: Literal["yml", "yaml", "csv"] = "csv", allow_overwrite: bool = False, ignore_existing: bool = False, ): """Generate parameters for a model. Parameters ---------- model : Model The model. name : str | None The name of the parameters. format_name : Literal["yml", "yaml", "csv"] The parameter format. allow_overwrite: bool Whether to overwrite existing parameters. ignore_existing: bool Whether to ignore generation of a parameter file if it already exists. Raises ------ FileExistsError Raised if parameters is already existing and `allow_overwrite=False`. """ parameters = model.generate_parameters() parameter_file = self.directory / f"{name}.{format_name}" if parameter_file.exists() and ignore_existing: return if parameter_file.exists() and not allow_overwrite: raise FileExistsError( f"Parameters {name!r} already exists and `allow_overwrite=False`." ) if format_name in ["yml", "yaml"]: write_dict(parameters, file_name=parameter_file, offset=0) elif format_name == "csv": parameter_group = ( ParameterGroup.from_dict(parameters) if isinstance(parameters, dict) else ParameterGroup.from_list(parameters) ) save_parameters(parameter_group, parameter_file, allow_overwrite=allow_overwrite)