Source code for mqed.utils.file_utils

# mqed/utils/file_utils.py

import os
from pathlib import Path
from omegaconf import DictConfig
from loguru import logger

[docs] def _resolve_path(p: str) -> Path: """Expand env vars and ~, return absolute Path.""" return Path(os.path.expandvars(os.path.expanduser(p))).resolve()
[docs] def _find_newest(pattern: str) -> Path | None: """Return newest file matching a glob pattern, or None.""" logger.debug(f"Finding newest file matching pattern: {pattern}") from glob import glob hits = sorted(glob(pattern), key=lambda s: Path(s).stat().st_mtime, reverse=True) return Path(hits[0]).resolve() if hits else None
[docs] def _resolve_input_path(curve_cfg) -> Path: """ Either use an absolute 'path', or if 'use_latest_glob' is set, choose newest file matching the glob (relative to MQED_ROOT/PWD if present). """ if getattr(curve_cfg, "path", None): return _resolve_path(curve_cfg.path) if getattr(curve_cfg, "use_latest_glob", None): base = os.environ.get("MQED_ROOT", os.environ.get("PWD", ".")) pattern = os.path.expandvars(os.path.expanduser(str(curve_cfg.use_latest_glob))) if not os.path.isabs(pattern): pattern = os.path.join(base, pattern) newest = _find_newest(pattern) if newest is None: raise FileNotFoundError(f"No files for pattern: {pattern}") return newest raise ValueError("Each curve needs either 'path' or 'use_latest_glob'.")