52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
from __future__ import annotations
|
|
import os
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
BASE_DIR = Path(__file__).resolve().parents[2]
|
|
ENV_FILE = BASE_DIR / ".env"
|
|
load_dotenv(ENV_FILE)
|
|
@dataclass(slots=True)
|
|
class Settings:
|
|
bot_token: str
|
|
bot_parse_mode: str
|
|
app_env: str
|
|
log_level: str
|
|
tz: str
|
|
exchange_enabled: bool
|
|
exchange_name: str
|
|
exchange_base_url: str
|
|
exchange_api_key: str
|
|
exchange_api_secret: str
|
|
exchange_timeout_sec: int
|
|
exchange_testnet: bool
|
|
default_symbol: str
|
|
def _parse_bool(raw_value: str, default: bool = False) -> bool:
|
|
value = (raw_value or "").strip().lower()
|
|
if not value:
|
|
return default
|
|
return value in {"1", "true", "yes", "on"}
|
|
def _parse_int(raw_value: str, default: int) -> int:
|
|
value = (raw_value or "").strip()
|
|
if not value:
|
|
return default
|
|
return int(value)
|
|
def load_settings() -> Settings:
|
|
bot_token = os.getenv("BOT_TOKEN", "").strip()
|
|
if not bot_token:
|
|
raise RuntimeError("BOT_TOKEN is not set in app/.env")
|
|
return Settings(
|
|
bot_token=bot_token,
|
|
bot_parse_mode=os.getenv("BOT_PARSE_MODE", "HTML").strip() or "HTML",
|
|
app_env=os.getenv("APP_ENV", "dev").strip() or "dev",
|
|
log_level=os.getenv("LOG_LEVEL", "INFO").strip().upper() or "INFO",
|
|
tz=os.getenv("TZ", "Europe/Madrid").strip() or "Europe/Madrid",
|
|
exchange_enabled=_parse_bool(os.getenv("EXCHANGE_ENABLED", "false")),
|
|
exchange_name=os.getenv("EXCHANGE_NAME", "dzengi").strip() or "dzengi",
|
|
exchange_base_url=os.getenv("EXCHANGE_BASE_URL", "").strip(),
|
|
exchange_api_key=os.getenv("EXCHANGE_API_KEY", "").strip(),
|
|
exchange_api_secret=os.getenv("EXCHANGE_API_SECRET", "").strip(),
|
|
exchange_timeout_sec=_parse_int(os.getenv("EXCHANGE_TIMEOUT_SEC", "10"), 10),
|
|
exchange_testnet=_parse_bool(os.getenv("EXCHANGE_TESTNET", "false")),
|
|
default_symbol=os.getenv("DEFAULT_SYMBOL", "BTCUSDT").strip() or "BTCUSDT",
|
|
) |