Source code for fenn.args.parser
import os
from pathlib import Path
from typing import Any, Dict
import yaml
from colorama import init
from fenn.secrets.keystore import KeyStore
[docs]
class Parser:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
[docs]
def __init__(self, config_file: str | Path = "fenn.yaml") -> None:
if hasattr(self, "_initialized"):
return
self._config_file: Path = Path(config_file)
self._args: Dict[str, Any] = {}
self._keystore: KeyStore = KeyStore()
init(autoreset=True)
self._initialized = True
[docs]
def load_configuration(self) -> Any:
"""Loads the YAML configuration into the _args dictionary."""
from fenn.logging import Logger
logger = Logger()
if not os.path.isfile(self._config_file):
logger.display_exception(
f"Configuration file {self._config_file} was not found."
)
raise FileNotFoundError(
0,
f"Configuration file {self._config_file} was not found.",
self._config_file,
)
# File exists → load YAML
with open(self._config_file) as f:
self._args = yaml.safe_load(f)
self._args["project"] = self._config_file.stem
return self._args
[docs]
def print(self) -> None:
"""Public method to trigger the flattened print with colored paths."""
from fenn.logging import Logger
Logger().write_config(self._args)
@property
def config_file(self) -> str:
return self._config_file
@config_file.setter
def config_file(self, config_file: str) -> None:
self._config_file: Path = Path(config_file)
@property
def args(self) -> Dict[str, Any]:
return self._args