ds2api-browser / config.py
nacho
fix: 全面代码审查修复
466f6e2
import os
from dataclasses import dataclass, field
from typing import List, Optional
@dataclass
class AccountConfig:
email: str
password: str
name: str = ""
proxy: Optional[str] = None
@dataclass
class ServerConfig:
host: str = "0.0.0.0"
port: int = 5001
admin_key: str = "admin"
@dataclass
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
@dataclass
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
@classmethod
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()