90 lines
1.8 KiB
Python
90 lines
1.8 KiB
Python
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
|
|
)
|