Files
2026-10-05 17:30:47 +08:00

95 lines
2.9 KiB
Python

"""
模块名称:modules.proxypool.core.domain.exceptions
功能描述:代理池全域的异常类型定义:所有异常源于 ProxyPoolException,按出错层次分族,覆盖数据访问、依赖注入、插件、参数、验证、HTTP 客户端、写队列与应用编排。
职责边界:负责:异常类型定义及少数类型携带的结构化信息(reason 失败分类、文案键与实参);不负责:抛出的时机与捕获策略(各业务模块自定)、错误文案的渲染(由 Web 边界完成)。
关键依赖:无
已知限制:
1. 异常不携带 HTTP 状态码,路由层要映射状态码只能另行判断。
2. message_key 为空时按普通异常处理,message 原样透出。
3. InvalidParameterException 同时继承 ValueError 是有意的:适配层按 ValueError 映射成 400 invalid_parameter。
4. HttpClientException.reason 是机器可读的失败分类(proxy_connect / connect_timeout 等),调用方按它分支,不要解析 message。
5. ProxyValidationException 无任何抛出点,仅登记在 Web 适配层异常映射表;验证结论(含无结论)均由结果对象表达,不抛异常。
6. WriteQueueFullException 是背压信号而非故障;WriteQueueException 也用于启停失败,批次重试用尽后由消费者丢弃并计数、不向写入方抛出;队列不做重投。
"""
from typing import Any
class ProxyPoolException(Exception):
message_key: str = ""
message_args: tuple = ()
def with_message_key(self, key: str, *args) -> "ProxyPoolException":
self.message_key = key
self.message_args = args
return self
class RepositoryException(ProxyPoolException):
pass
class DataValidationException(RepositoryException):
pass
class DatabaseConnectionException(RepositoryException):
pass
class InvalidParameterException(ProxyPoolException, ValueError):
def __init__(self, key: str, *args: Any):
self.message_key = key
self.message_args = args
super().__init__(f"{key} {args}" if args else key)
class QueryBuildException(RepositoryException):
pass
class DependencyInjectionException(ProxyPoolException):
pass
class DependencyNotRegisteredError(DependencyInjectionException):
pass
class PluginException(ProxyPoolException):
pass
class PluginExecutionException(PluginException):
pass
class ProxyValidationException(ProxyPoolException):
pass
class HttpClientException(ProxyPoolException):
def __init__(self, message: str = "", reason: str = "unknown"):
super().__init__(message)
self.reason = reason
class HttpRequestException(HttpClientException):
pass
class HttpTimeoutException(HttpClientException):
pass
class WriteQueueException(ProxyPoolException):
pass
class WriteQueueFullException(WriteQueueException):
pass
class ApplicationException(ProxyPoolException):
pass