SPB Git
2.2 KB · 87 lines python
1# ============================================================2# Project: EDGAR Research Database3# Description: SEC EDGAR Research Infrastructure4#5# Authors:6# - Manel Kammoun — manel.kammoun@uqo.ca7# - Djerrycharli Tandjambianda — djerrycharli.tandjambianda@uqo.ca8# - Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca9#10# Institution:11# Université du Québec en Outaouais (UQO)12#13# License:14# Research / Academic Use15# ============================================================1617from __future__ import annotations1819import os20from functools import lru_cache21from pathlib import Path2223import yaml24from dotenv import load_dotenv2526load_dotenv()272829def get_project_root() -> Path:30    return Path(__file__).resolve().parent.parent.parent313233@lru_cache(maxsize=None)34def _load_yaml(path: Path) -> dict:35    with open(path) as f:36        raw = yaml.safe_load(f) or {}37    return _resolve_env_vars(raw)383940def _resolve_env_vars(obj):41    if isinstance(obj, str) and obj.startswith("${") and obj.endswith("}"):42        var_name = obj[2:-1]43        return os.environ.get(var_name, obj)44    if isinstance(obj, dict):45        return {k: _resolve_env_vars(v) for k, v in obj.items()}46    if isinstance(obj, list):47        return [_resolve_env_vars(item) for item in obj]48    return obj495051def get_config(name: str | None = None) -> dict:52    root = get_project_root()53    config_dir = root / "config"5455    if name:56        path = config_dir / f"{name}.yaml"57        if not path.exists():58            raise FileNotFoundError(f"Config file not found: {path}")59        return _load_yaml(path)6061    merged = {}62    for yaml_file in sorted(config_dir.glob("*.yaml")):63        merged[yaml_file.stem] = _load_yaml(yaml_file)64    return merged656667def get_sec_config() -> dict:68    return get_config("sec").get("sec", {})697071def get_database_config() -> dict:72    return get_config("database").get("database", {})737475def get_parsing_config() -> dict:76    return get_config("parsing").get("parsing", {})777879def get_embeddings_config() -> dict:80    return get_config("embeddings").get("embeddings", {})818283def ensure_data_dirs():84    from src.utils.constants import DATA_DIRS85    for d in DATA_DIRS.values():86        d.mkdir(parents=True, exist_ok=True)87
Files · 1a08d92ceaeff41d875ca573b250d01906056494
Menu

Theme