Files

69 lines
2.2 KiB
Python

"""
================================================================================
Quantum Terminal — Provider Registry
================================================================================
Maps provider type names to their implementation classes.
To add a new provider:
1. Create providers/my_provider.py implementing BaseProvider
2. Add "my_provider": MyProvider to PROVIDER_REGISTRY below
3. Add account config in user_config.json under providers.accounts
That's it — the config_manager will instantiate and manage it.
================================================================================
"""
from providers.base_provider import BaseProvider
from providers.mt5_provider import MT5Provider
# ── Rithmic provider (graceful if async_rithmic not installed) ──
try:
from providers.rithmic_provider import RithmicProvider
RITHMIC_AVAILABLE = True
except ImportError:
RithmicProvider = None
RITHMIC_AVAILABLE = False
# ── Provider type → class mapping ──
# Key = the "type" field in account config
# Value = class that implements BaseProvider
PROVIDER_REGISTRY = {
"mt5": MT5Provider,
}
# Register Rithmic only if async_rithmic is installed
if RITHMIC_AVAILABLE:
PROVIDER_REGISTRY["rithmic"] = RithmicProvider
def create_provider(account_config: dict) -> BaseProvider:
"""
Factory: create a provider instance from account config dict.
Expected config shape:
{
"id": "mt5_primary",
"type": "mt5",
"label": "MT5 — CFI (Live)",
"terminal_path": null,
"aliases": {}
}
Raises KeyError if provider type is not registered.
"""
provider_type = account_config.get("type", "")
if provider_type not in PROVIDER_REGISTRY:
registered = ", ".join(PROVIDER_REGISTRY.keys())
raise KeyError(
f"Unknown provider type: '{provider_type}'. "
f"Registered types: {registered}"
)
cls = PROVIDER_REGISTRY[provider_type]
return cls(account_config)
def list_provider_types() -> list:
"""Return list of registered provider type names."""
return list(PROVIDER_REGISTRY.keys())