44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass, field
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
@dataclass
|
|
class Config:
|
|
admin_username: str = os.getenv("ADMIN_USERNAME", "admin")
|
|
admin_password: str = os.getenv("ADMIN_PASSWORD", "changeme")
|
|
admin_host: str = os.getenv("ADMIN_HOST", "127.0.0.1")
|
|
admin_port: int = int(os.getenv("ADMIN_PORT", "9000"))
|
|
db_path: str = os.getenv("DB_PATH", "data/tracker.db")
|
|
headless: bool = os.getenv("HEADLESS", "true").lower() == "true"
|
|
chrome_binary: str | None = os.getenv("CHROME_BINARY")
|
|
chromedriver_path: str = os.getenv("CHROMEDRIVER_PATH", "drivers/chromedriver")
|
|
record_sessions: bool = os.getenv("RECORD_SESSIONS", "false").lower() == "true"
|
|
recording_fps: int = int(os.getenv("RECORDING_FPS", "12"))
|
|
recording_max_files: int = int(os.getenv("RECORDING_MAX_FILES", "3"))
|
|
recordings_dir: str = os.getenv("RECORDINGS_DIR", "recordings")
|
|
|
|
# Scenario 1 — SMS-OTP: list of phone numbers (one per line in env or comma-separated)
|
|
phone_numbers: list[str] = field(default_factory=list)
|
|
|
|
# Flow steps — ordered list of step names to execute after login
|
|
# Override in .env as: FLOW_STEPS=step_home,step_browse,step_checkout
|
|
flow_steps: list[str] = field(default_factory=lambda: ["step_home"])
|
|
|
|
def __post_init__(self) -> None:
|
|
raw_phones = os.getenv("PHONE_NUMBERS", "")
|
|
if raw_phones:
|
|
self.phone_numbers = [p.strip() for p in raw_phones.split(",") if p.strip()]
|
|
|
|
raw_steps = os.getenv("FLOW_STEPS", "")
|
|
if raw_steps:
|
|
self.flow_steps = [s.strip() for s in raw_steps.split(",") if s.strip()]
|
|
|
|
|
|
config = Config()
|