config.py 892 B

1234567891011121314151617181920212223242526272829
  1. import os
  2. from dataclasses import dataclass
  3. from typing import Mapping
  4. @dataclass(frozen=True)
  5. class Config:
  6. api_key: str
  7. api_secret: str
  8. api_passphrase: str
  9. trading_env: str = "demo"
  10. def load_config(env: Mapping[str, str] | None = None) -> Config:
  11. source = os.environ if env is None else env
  12. api_key = source.get("OKX_API_KEY")
  13. api_secret = source.get("OKX_API_SECRET")
  14. api_passphrase = source.get("OKX_API_PASSPHRASE")
  15. if not api_key or not api_secret or not api_passphrase:
  16. raise ValueError("OKX credentials are required")
  17. trading_env = source.get("OKX_TRADING_ENV", "demo")
  18. if trading_env not in {"demo", "live"}:
  19. raise ValueError("OKX_TRADING_ENV must be demo or live")
  20. return Config(
  21. api_key=api_key,
  22. api_secret=api_secret,
  23. api_passphrase=api_passphrase,
  24. trading_env=trading_env,
  25. )