CashFlow / scanner /paths.py
lhllamlam's picture
feat: wire 4 institutional flow factors (L2, options, ticks, intraday); stub data committed
6b66ac0 verified
Raw
History Blame Contribute Delete
2.44 kB
"""Centralised filesystem paths.
Hugging Face Spaces only allow writing under ``/tmp``. Locally (esp. on
Windows) ``/tmp`` does not exist, so we fall back to :func:`tempfile.gettempdir`.
All write-paths in the project should resolve through this module.
"""
from __future__ import annotations
import os
import tempfile
def _base_tmp() -> str:
explicit = os.environ.get("FSCANNER_TMP_DIR", "").strip()
if explicit:
os.makedirs(explicit, exist_ok=True)
return explicit
# Prefer /tmp when it exists (HF Spaces); otherwise the OS temp dir.
if os.path.isdir("/tmp"):
return "/tmp"
return tempfile.gettempdir()
TMP_DIR: str = _base_tmp()
CACHE_PATH: str = os.environ.get(
"FSCANNER_CACHE_PATH",
os.path.join(TMP_DIR, "us_flow_scanner_ohlcv.parquet"),
)
HISTORY_DIR: str = os.environ.get(
"FSCANNER_HISTORY_DIR",
os.path.join(TMP_DIR, "us_flow_scanner_history"),
)
SECTOR_CACHE_PATH: str = os.environ.get(
"FSCANNER_SECTOR_CACHE",
os.path.join(TMP_DIR, "us_flow_scanner_sectors.parquet"),
)
WATCHLIST_PATH: str = os.environ.get(
"FSCANNER_WATCHLIST",
os.path.join(TMP_DIR, "us_flow_scanner_watchlist.json"),
)
LEARNED_WEIGHTS_PATH: str = os.environ.get(
"FSCANNER_LEARNED_WEIGHTS",
os.path.join(TMP_DIR, "us_flow_scanner_learned_weights.json"),
)
PERFORMANCE_LOG_PATH: str = os.environ.get(
"FSCANNER_PERFORMANCE_LOG",
os.path.join(TMP_DIR, "us_flow_scanner_performance.parquet"),
)
RESULTS_CSV_PATH: str = os.path.join(TMP_DIR, "us_flow_scan_results.csv")
L2_CACHE_PATH: str = os.environ.get(
"FSCANNER_L2_CACHE",
os.path.join(TMP_DIR, "us_flow_scanner_l2.parquet"),
)
OPTIONS_CACHE_PATH: str = os.environ.get(
"FSCANNER_OPTIONS_CACHE",
os.path.join(TMP_DIR, "us_flow_scanner_options.parquet"),
)
TICK_CACHE_DIR: str = os.environ.get(
"FSCANNER_TICK_CACHE",
os.path.join(TMP_DIR, "us_flow_scanner_ticks"),
)
INTRADAY_CACHE_DIR: str = os.environ.get(
"FSCANNER_INTRADAY_CACHE",
os.path.join(TMP_DIR, "us_flow_scanner_intraday"),
)
STUB_DIR: str = os.environ.get(
"FSCANNER_STUB_DIR",
os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data", "stubs"),
)
def ensure_dirs() -> None:
for d in (TMP_DIR, HISTORY_DIR, TICK_CACHE_DIR, INTRADAY_CACHE_DIR):
try:
os.makedirs(d, exist_ok=True)
except OSError:
pass
ensure_dirs()