Files
QuantumTerminal/backend/data_manager/__init__.py
T

51 lines
1.7 KiB
Python

"""
Data Management Module (DMM)
============================
Unified data access layer for the Quantum Terminal quant platform.
Parquet-cached, gap-filling, source-agnostic data delivery.
Quick start (singleton — shares one cache across all scripts):
from data_manager import dm
df = dm.get_bars("EURUSD", "D1", n_bars=1500)
Or instantiate with custom settings:
from data_manager import DataManager
dm = DataManager(library_root="D:/MyData", auto_init_mt5=True)
df = dm.get_bars("XAUUSD", "M15", date_from=..., date_to=...)
"""
from .data_manager import DataManager
from .data_store import DataStore
from .data_catalog import DataCatalog
import logging
# Configure DMM logging — INFO by default, callers can override
logging.getLogger("dmm").setLevel(logging.INFO)
# ── Lazy singleton ───────────────────────────────────────────────────────────
# Created on first access. Uses default library_root (../data_library/).
# The forecaster's MT5 init is expected to happen BEFORE first dm.get_bars().
_dm_instance = None
def get_dm(**kwargs) -> DataManager:
"""Get or create the module-level DataManager singleton."""
global _dm_instance
if _dm_instance is None:
_dm_instance = DataManager(**kwargs)
return _dm_instance
# Convenience alias — `from data_manager import dm` gives you the singleton
class _LazyDM:
"""Proxy that creates the real DataManager on first attribute access."""
def __getattr__(self, name):
return getattr(get_dm(), name)
dm = _LazyDM()
__all__ = ["DataManager", "DataStore", "DataCatalog", "dm", "get_dm"]