59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
|
|
|
|
def _env_flag(name: str, default: bool = False) -> bool:
|
|
raw = os.environ.get(name)
|
|
if raw is None:
|
|
return default
|
|
return raw.strip().lower() in {"1", "true", "yes", "on"}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class MigrationFlags:
|
|
"""Migration modes for contract-first backend rollout."""
|
|
|
|
executor_mode: str = "legacy"
|
|
response_mode: str = "contract_first"
|
|
write_mode: str = "dual_write"
|
|
read_mode: str = "dual_read"
|
|
request_context_enabled: bool = True
|
|
|
|
@property
|
|
def use_application_services(self) -> bool:
|
|
return self.executor_mode in {"legacy", "direct", "auto"}
|
|
|
|
@property
|
|
def use_result_store(self) -> bool:
|
|
return self.read_mode in {"dual_read", "contract_only"}
|
|
|
|
@property
|
|
def use_request_context(self) -> bool:
|
|
return self.request_context_enabled
|
|
|
|
|
|
def load_migration_flags() -> MigrationFlags:
|
|
"""Load service migration modes from the environment with boolean compatibility."""
|
|
executor_mode = os.environ.get("TRADINGAGENTS_EXECUTOR_MODE")
|
|
if executor_mode is None:
|
|
executor_mode = "legacy" if _env_flag("TRADINGAGENTS_USE_APPLICATION_SERVICES", default=False) else "legacy"
|
|
|
|
response_mode = os.environ.get("TRADINGAGENTS_RESPONSE_MODE", "contract_first")
|
|
write_mode = os.environ.get("TRADINGAGENTS_WRITE_MODE")
|
|
if write_mode is None:
|
|
write_mode = "dual_write" if _env_flag("TRADINGAGENTS_USE_RESULT_STORE", default=False) else "dual_write"
|
|
|
|
read_mode = os.environ.get("TRADINGAGENTS_READ_MODE")
|
|
if read_mode is None:
|
|
read_mode = "dual_read" if _env_flag("TRADINGAGENTS_USE_RESULT_STORE", default=False) else "legacy_only"
|
|
|
|
return MigrationFlags(
|
|
executor_mode=executor_mode,
|
|
response_mode=response_mode,
|
|
write_mode=write_mode,
|
|
read_mode=read_mode,
|
|
request_context_enabled=_env_flag("TRADINGAGENTS_USE_REQUEST_CONTEXT", default=True),
|
|
)
|