SPB Git forge

spb/wp8_uqo

Public
3commits 1branches 1releases
4.2 MBsize
maindefault branch
1 h agolast push
Python 56.2% TeX 43.7%
1.2 KB · 50 lines python
Raw Blame History
1from __future__ import annotations23import json4import logging5from pathlib import Path6from typing import Any78from src.config import (9    DATA_PROCESSED,10    DATA_RAW_FRED,11    DATA_RAW_POLY,12    DATA_RAW_YAHOO,13    FIGURES,14    LOGS,15    TABLES,16)171819def setup_logging(name: str) -> logging.Logger:20    LOGS.mkdir(parents=True, exist_ok=True)21    logger = logging.getLogger(name)22    logger.setLevel(logging.INFO)23    if not logger.handlers:24        fh = logging.FileHandler(LOGS / f"{name}.log")25        fh.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))26        logger.addHandler(fh)27        sh = logging.StreamHandler()28        sh.setFormatter(logging.Formatter("%(levelname)s %(message)s"))29        logger.addHandler(sh)30    return logger313233def ensure_dirs() -> None:34    for d in [35        DATA_RAW_POLY, DATA_RAW_FRED, DATA_RAW_YAHOO,36        DATA_PROCESSED, FIGURES, TABLES, LOGS,37    ]:38        d.mkdir(parents=True, exist_ok=True)394041def save_json(data: Any, path: Path) -> None:42    path.parent.mkdir(parents=True, exist_ok=True)43    with open(path, "w") as f:44        json.dump(data, f, indent=2, default=str)454647def load_json(path: Path) -> Any:48    with open(path) as f:49        return json.load(f)50