from dataclasses import dataclass from typing import Tuple import yaml @dataclass class GlobalConfig: max_concurrency: int timeout: int retry_times: int @dataclass class DatabaseConfig: path: str pool_size: int @dataclass class ProxyConfig: api_url: str batch_size: int check_interval: int @dataclass class RegisterConfig: delay_range: Tuple[int, int] batch_size: int @dataclass class EmailConfig: file_path: str @dataclass class CapsolverConfig: api_key: str website_url: str website_key: str @dataclass class YesCaptchaConfig: client_key: str website_url: str website_key: str use_cn_server: bool @dataclass class CaptchaConfig: provider: str capsolver: CapsolverConfig yescaptcha: YesCaptchaConfig @dataclass class Config: global_config: GlobalConfig database_config: DatabaseConfig proxy_config: ProxyConfig register_config: RegisterConfig email_config: EmailConfig captcha_config: CaptchaConfig @classmethod def from_yaml(cls, path: str = "config.yaml"): with open(path, 'r', encoding='utf-8') as f: data = yaml.safe_load(f) # 创建 captcha 配置对象 captcha_data = data['captcha'] captcha_config = CaptchaConfig( provider=captcha_data['provider'], capsolver=CapsolverConfig(**captcha_data['capsolver']), yescaptcha=YesCaptchaConfig(**captcha_data['yescaptcha']) ) return cls( global_config=GlobalConfig(**data['global']), database_config=DatabaseConfig(**data['database']), proxy_config=ProxyConfig(**data['proxy']), register_config=RegisterConfig(**data['register']), email_config=EmailConfig(**data['email']), captcha_config=captcha_config )