Initial commit: Quantum Terminal — Free & Open Source Trading Platform
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
================================================================================
|
||||
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())
|
||||
Reference in New Issue
Block a user