Spaces:
Running
Running
| import os | |
| from dataclasses import dataclass, field | |
| from typing import List, Optional | |
| class AccountConfig: | |
| email: str | |
| password: str | |
| name: str = "" | |
| proxy: Optional[str] = None | |
| class ServerConfig: | |
| host: str = "0.0.0.0" | |
| port: int = 5001 | |
| admin_key: str = "admin" | |
| class BrowserConfig: | |
| headless: bool = True | |
| humanize: bool = True | |
| timeout: int = 60000 | |
| viewport_width: int = 1920 | |
| viewport_height: int = 1080 | |
| max_concurrent_per_account: int = 3 | |
| class Config: | |
| server: ServerConfig = field(default_factory=ServerConfig) | |
| browser: BrowserConfig = field(default_factory=BrowserConfig) | |
| accounts: List[AccountConfig] = field(default_factory=list) | |
| api_keys: List[str] = field(default_factory=lambda: ["sk-default"]) | |
| default_proxy: Optional[str] = None | |
| def from_env(cls) -> "Config": | |
| accounts = [] | |
| # Format: email:password[:name[:proxy]] separated by semicolons | |
| account_str = os.getenv("DS2API_ACCOUNTS", "") | |
| if account_str: | |
| for acc in account_str.split(";"): | |
| # maxsplit=3 yields at most 4 parts: email, password, name, proxy | |
| parts = acc.split(":", 3) | |
| if len(parts) >= 2: | |
| accounts.append(AccountConfig( | |
| email=parts[0], | |
| password=parts[1], | |
| name=parts[2] if len(parts) > 2 else "", | |
| proxy=parts[3] if len(parts) > 3 else None, | |
| )) | |
| return cls( | |
| server=ServerConfig( | |
| host=os.getenv("DS2API_HOST", "0.0.0.0"), | |
| port=int(os.getenv("DS2API_PORT", "5001")), | |
| admin_key=os.getenv("DS2API_ADMIN_KEY", "admin"), | |
| ), | |
| browser=BrowserConfig( | |
| headless=os.getenv("DS2API_HEADLESS", "true").lower() == "true", | |
| humanize=os.getenv("DS2API_HUMANIZE", "true").lower() == "true", | |
| timeout=int(os.getenv("DS2API_TIMEOUT", "60000")), | |
| max_concurrent_per_account=int(os.getenv("DS2API_MAX_CONCURRENT", "3")), | |
| ), | |
| accounts=accounts, | |
| api_keys=os.getenv("DS2API_KEYS", "sk-default").split(","), | |
| default_proxy=os.getenv("DS2API_DEFAULT_PROXY"), | |
| ) | |
| def load_config() -> Config: | |
| return Config.from_env() | |