Source code for meerkat.config

from __future__ import annotations

import os
from dataclasses import dataclass
from pathlib import Path

import yaml

CONFIG_ENV_VARIABLE = "MEERKAT_CONFIG"
DATASETS_ENV_VARIABLE = "MEERKAT_DATASETS"


[docs]@dataclass class MeerkatConfig: display: DisplayConfig datasets: DatasetsConfig
[docs] @classmethod def from_yaml(cls, path: str = None): if path is None: path = os.environ.get( CONFIG_ENV_VARIABLE, os.path.join(os.path.join(Path.home(), ".meerkat"), "config.yaml"), ) if not os.path.exists(path): # create empty config yaml.dump({"display": {}, "datasets": {}}, open(path, "w")) config = yaml.load(open(path, "r"), Loader=yaml.FullLoader) config = cls( display=DisplayConfig(**config.get("display", {})), datasets=DatasetsConfig(**config.get("datasets", {})), ) os.environ[DATASETS_ENV_VARIABLE] = config.datasets.root_dir return config
[docs]@dataclass class DisplayConfig: max_rows: int = 10 show_images: bool = True max_image_height: int = 128 max_image_width: int = 128 show_audio: bool = True
[docs]@dataclass class DatasetsConfig: _root_dir: str = os.path.join(Path.home(), ".meerkat/datasets") @property def root_dir(self): return self._root_dir @root_dir.setter def root_dir(self, value): os.environ[DATASETS_ENV_VARIABLE] = value self._root_dir = value
config = MeerkatConfig.from_yaml()