Team Ai
Apppublic

PCNUSMSE/transcript_service

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes
error_handler.cpython-310.pyc136 linesDownload Raw Back to __pycache__
1o

2W��h�-�@s�dZddlZddlZddlZddlmZmZmZmZm	Z	m3Z4ddlmZddl
mZddlmZGdd	�d	e�ZGd5d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�d�ZGdd�d�Ze�Zdefdfdeededefdd�Zdefdfdeededefd d!�Zd"ed#ee eeeffd$d%�Z!d"ed#ee eeeffd&d'�Z"d#efd(d)�Z#dS)*uf错误处理和容错机制模块6 7提供统一的错误处理、重试逻辑和异常恢复功能。8�N)�Any�Callable�Dict�Optional�Type�Union)�Enum�)�9get_config)�get_task_loggerc@s`eZdZdZdZdZdZdZdZdZ	dZ10d	Zd11ZdZ
dZd
ZdZdZdZdZdZdZdZdZdS)�	ErrorCodeu错误代码ZFILE_001ZFILE_002ZFILE_003ZFILE_004ZNET_001ZNET_002ZNET_003ZAPI_001ZAPI_002ZAPI_003ZAPI_004ZOSS_001ZOSS_002ZOSS_003ZSYS_001ZSYS_002ZSYS_003ZGEN_001ZGEN_002ZGEN_003N)�__name__�12__module__�__qualname__�__doc__�FILE_NOT_FOUNDZFILE_TOO_LARGEZFILE_FORMAT_UNSUPPORTEDZFILE_CORRUPTED�NETWORK_TIMEOUT�NETWORK_CONNECTION_ERRORZNETWORK_DNS_ERROR�API_KEY_INVALID�API_QUOTA_EXCEEDED�API_SERVICE_UNAVAILABLE�API_RATE_LIMITEDZOSS_ACCESS_DENIEDZOSS_BUCKET_NOT_FOUND�OSS_UPLOAD_FAILED�SYSTEM_OUT_OF_MEMORYZSYSTEM_DISK_FULL�SYSTEM_PERMISSION_DENIED�
UNKNOWN_ERRORZ
TIMEOUT_ERROR�VALIDATION_ERROR�rr�H/Users/chengpeng/MyProject/transcript_service/src/utils/error_handler.pyrs,rcsLeZdZdZejdfdededef�fdd�
Zdeee	ffd	d13�Z14�ZS)�TranscriptServiceErroru服务自定义异常基类N�message�15error_code�detailscs0t��|�||_||_|pi|_t��|_dS)u�初始化异常16        17        Args:18            message: 错误消息19            error_code: 错误代码20            details: 额外详情21        N)�super�__init__r r!r"�time�	timestamp)�selfr r!r"��	__class__rrr$6s2223zTranscriptServiceError.__init__�returncCs|jj|j|j|jd�S)u转换为字典格式)r!r r"r&)r!�valuer r"r&�r'rrr�to_dictDs24�zTranscriptServiceError.to_dict)r
rrrrr�strrr$rr-�
__classcell__rrr(rr3s"rc@�eZdZdZdS)�FileValidationErroru文件验证错误N�r
rrrrrrrr1N�r1c@r0)�NetworkErroru网络相关错误Nr2rrrrr4Sr3r4c@r0)�APIErroruAPI调用错误Nr2rrrrr5Xr3r5c@r0)�OSSErroruOSS操作错误Nr2rrrrr6]r3r6c@r0)�SystemErroru系统错误Nr2rrrrr7br3r7c@sLeZdZdZ					ddeded	ed25edef26dd
�Zdedefdd�ZdS)�
RetryStrategyu重试策略���?�N@�@T�max_attempts�27base_delay�	max_delay�exponential_base�jittercCs"||_||_||_||_||_dS)u'初始化重试策略28        29        Args:30            max_attempts: 最大重试次数31            base_delay: 基础延迟时间(秒)32            max_delay: 最大延迟时间(秒)33            exponential_base: 指数退避基数34            jitter: 是否添加随机抖动35        N)r=r>r?r@rA)r'r=r>r?r@rArrrr$js3637zRetryStrategy.__init__�attemptr*cCsF|j|j|d}t||j�}|jr!ddl}|d|��d9}|S)u�计算延迟时间38        39        Args:40            attempt: 当前尝试次数(从1开始)41            42        Returns:43            延迟时间(秒)44        �rNg�?)r>r@�minr?rA�random)r'rB�delayrErrr�calculate_delay�s	zRetryStrategy.calculate_delayN)r9r:r;r<T)	r
rrr�int�float�boolr$rGrrrrr8gs&�����45�r8c@sTeZdZdZdd�Zdedefdd�Zdedefdd	�Z	ddede46defdd
�ZdS)�ErrorHandleru错误处理器c
Csvt�|_tdd�|_tttjftt	tj47ftjt
tjftt
tjftttjftttjfi|_tjtjtjtjtjh|_dS)u初始化错误处理器ztranscript_service.error��logger_nameN)r48�configr�logger�FileNotFoundErrorr1rr�PermissionErrorr7r�asyncio�TimeoutErrorr4r�ConnectionErrorr�49ValueErrorrr�RuntimeErrorr�
error_mappingrrr�retryable_errorsr,rrrr$�s5051525354�55�zErrorHandler.__init__�errorr*cCs�t|t�r|St|�}||jvr|j|\}}|t|�|�St|���}d|vr0tt|�tj�Sd|vr<t	t|�tj56�Sd|vrHtt|�tj�Sd|vsPd|vrXtt|�tj
�Stt|�tj�S)u�分类和包装错误57        58        Args:59            error: 原始异常60            61        Returns:62            分类后的服务异常63        �timeoutzpermission deniedzapi keyZquota�limit)�64isinstancer�typerWr.�lowerr4rrr7rr5rrr)r'rY�65error_typeZexception_classr!Z	error_msgrrr�classify_error�s 66	67zErrorHandler.classify_errorcCs|j|jvS)u�判断错误是否可重试68        69        Args:70            error: 服务异常71            72        Returns:73            是否可重试74        )r!rX)r'rYrrr�is_retryable�s	zErrorHandler.is_retryable��contextcCsN|�|�}d|�d|j��}|jtjtjfvr|j�|�|S|j�|�|S)u�处理错误75        76        Args:77            error: 原始异常78            context: 错误上下文79            80        Returns:81            处理后的服务异常82        u错误处理 - z: )	r`r r!rrrrO�	exceptionrY)r'rYrc�classified_errorZlog_msgrrr�handle_error�s83 84�zErrorHandler.handle_errorN)rb)r
rrrr$�	Exceptionrr`rJrar.rfrrrrrK�srKrb�strategy�85exceptionsrcc�(�durt��dtf���fdd�}|S)u�异步函数重试装饰器86    87    Args:88        strategy: 重试策略89        exceptions: 需要重试的异常类型90        context: 上下文信息91    N�funcc� t�������fdd��}|S)Nc�s��tdd�}td�jd�D]e}z
�|i|��IdHWS�ys}zJt�|�}|�jks4t�|�sI|���d|�d�j�dt|����|���|�}|�	��d|�d|d	�d92t|����t93�|�IdHWYd}~qd}~wwtdt
j���Nztranscript_service.retryrLrCu 最终失败 (尝试 �/z): u 第 u 次尝试失败,z.1fu秒后重试: u重试逻辑异常)r�ranger=�
error_handlerr`rarYr.rG�warningrR�sleeprrr��args�kwargsrOrB�ererF�rcrirkrhrr�wrappers �9495&96&��z/retry_async.<locals>.decorator.<locals>.wrapper��	functools�wraps�rkrx�rcrirh�rkr�	decorator�zretry_async.<locals>.decorator�r8r�rhrircrrr}r�retry_async��r�crj)u�同步函数重试装饰器97    98    Args:99        strategy: 重试策略100        exceptions: 需要重试的异常类型101        context: 上下文信息102    Nrkcrl)Ncs�tdd�}td�jd�D]_}z103�|i|��WS�yl}zGt�|�}|�jks0t�|�sE|���d|�d�j�dt|����|���|�}|�	��d|�d|d	�d104t|����t105�|�WYd}~q
d}~wwtdt
j��rm)rror=rpr`rarYr.rGrqr%rrrrrrsrwrrrx4s106107&108&��z.retry_sync.<locals>.decorator.<locals>.wrapperryr|r}r~rr3r�zretry_sync.<locals>.decoratorr�r�rr}r�109retry_sync$r�r�rkr*c110Os^z
||i|��}d|dfWSty.}zt�|d|j���}dd|fWYd}~Sd}~ww)u�安全执行函数111    112    Args:113        func: 要执行的函数114        *args: 位置参数115        **kwargs: 关键字参数116        117    Returns:118        (是否成功, 结果或None, 错误或None)119    TN�执行 F�rgrprfr
�rkrtru�resultrvrYrrr�safe_executePs��r�c120�sf�z||i|��IdH}d|dfWSty2}zt�|d|j���}dd|fWYd}~Sd}~ww)u�安全执行异步函数121    122    Args:123        func: 要执行的异步函数124        *args: 位置参数125        **kwargs: 关键字参数126        127    Returns:128        (是否成功, 结果或None, 错误或None)129    NTr�Fr�r�rrr�safe_execute_asynccs���r�cCstS)uP获取错误处理器实例130    131    Returns:132        错误处理器实例133    )rprrrr�get_error_handlervsr�)$rrRrzr%�typingrrrrrr�enumr�core.configr134�utils.loggerrrrgrr1r4r5r6r7r8rKrp�tupler.r�r�rJr�r�r�rrrr�<module>sR #-a���135�-���136� ,