{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "aedbb9f5", "metadata": {}, "outputs": [], "source": [ "from dataclasses import dataclass, field, asdict\n", "from pathlib import Path\n", "\n", "import yaml\n", "\n", "\n", "@dataclass\n", "class GalleryItem:\n", " name: str\n", " path: Path\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "66624faf", "metadata": {}, "outputs": [], "source": [ "yaml_file = Path(\"config.yaml\")\n", "\n", "with open(yaml_file, \"r\") as f:\n", " new_config: dict = yaml.safe_load(f)" ] }, { "cell_type": "code", "execution_count": 8, "id": "40a472f8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'name': 'test_1_plot',\n", " 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/plot__proc_3_5606769559__cat_incl__var_jet1_pt.pdf'}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_config[\"sources\"][0]" ] }, { "cell_type": "code", "execution_count": 10, "id": "745c97ad", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[GalleryItem(name='test_1_plot', path=PosixPath('data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/plot__proc_3_5606769559__cat_incl__var_jet1_pt.pdf')),\n", " GalleryItem(name='test_2_dir', path=PosixPath('data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1'))]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sources = [\n", " GalleryItem(name=src[\"name\"], path=Path(src[\"path\"]))\n", " for src in new_config.get(\"sources\", False)\n", "]\n", "sources" ] }, { "cell_type": "code", "execution_count": 15, "id": "a0102f9d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Config(web_folder='', backup_folder='', png_dpi=400, plot_root='gallery', sources=[{'name': 'test_1_plot', 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/plot__proc_3_5606769559__cat_incl__var_jet1_pt.pdf'}, {'name': 'test_2_dir', 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/'}])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "\n", "@dataclass\n", "class Config:\n", " web_folder: str = \"\"\n", " backup_folder: str = \"\"\n", " png_dpi: int = 400\n", " plot_root: str = \"gallery\"\n", " sources: list[GalleryItem] = field(default_factory=list)\n", "\n", " @classmethod\n", " def from_yaml(cls, yaml_file: str, strict: bool = False) -> \"Config\":\n", " \"\"\"\n", " Load configuration from a YAML file.\n", "\n", " Args:\n", " yaml_file (str): Path to the YAML file.\n", " strict (bool):\n", " If True, raises an error if a key in the YAML file does not exist in the Config class.\n", " If False (default), adds all keys as attributes\n", "\n", " Returns:\n", " Config: Instance of this class\n", " \"\"\"\n", "\n", " with open(yaml_file, \"r\") as f:\n", " new_config: dict = yaml.safe_load(f)\n", "\n", " new_config[\"sources\"] = [\n", " GalleryItem(name=src[\"name\"], path=Path(src[\"path\"]))\n", " for src in new_config.get(\"sources\", False)\n", " ]\n", "\n", " instance = cls(**{\n", " k: v\n", " for k, v in new_config.items()\n", " if hasattr(cls, k) or not strict\n", " })\n", "\n", " for key in new_config.keys():\n", " if strict and not hasattr(instance, key):\n", " raise KeyError(f\"Key '{key}' not found in Config class\")\n", "\n", " return instance\n", "\n", " def to_yaml(self, yaml_file: str) -> None:\n", " \"\"\"\n", " Save the current configuration to a YAML file.\n", "\n", " Args:\n", " yaml_file (str): Path to the YAML file.\n", " \"\"\"\n", " with open(yaml_file, \"w\") as f:\n", " yaml.dump(asdict(self), f, default_flow_style=False)\n", "\n", "\n", "instance = Config(**{\n", " k: v\n", " for k, v in new_config.items()\n", " #if hasattr(Config, k)\n", "})\n", "instance" ] }, { "cell_type": "code", "execution_count": 17, "id": "0b516ae9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'name': 'test_1_plot',\n", " 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/plot__proc_3_5606769559__cat_incl__var_jet1_pt.pdf'},\n", " {'name': 'test_2_dir',\n", " 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/'}]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_config[\"sources\"]" ] }, { "cell_type": "code", "execution_count": 18, "id": "b047f0c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'name': 'test_1_plot',\n", " 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/plot__proc_3_5606769559__cat_incl__var_jet1_pt.pdf'},\n", " {'name': 'test_2_dir',\n", " 'path': 'data/cf_store/test_analysis/cf.PlotVariables1D/run2_2016_nano_v9/calib__test/sel__test/prod__test/weight__test/nominal/datasets_ttbar_dl/dev1/'}]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "instance.sources" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.1" } }, "nbformat": 4, "nbformat_minor": 5 }