
    Xj                        d dl mZ d dlZd dlZd dlZd dlmZ  ee          Z e	h d          Z
 e	h d          Z G d d          Z edd	d
d          ZdS )    )annotationsN)
get_logger>	                     >             c                  Z    e Zd ZdddZedd            Zedd            ZdddZddZdS ) RetryPolicy          @      N@333333?max_retriesint
base_delayfloat	max_delayjitterc                >    || _         || _        || _        || _        d S Nr   r   r   r   )selfr   r   r   r   s        Z/lsinfo/ai/hellotax_ai/data_center/backend/app/services/tax_data_processor/retry_policy.py__init__zRetryPolicy.__init__   s#    &$"    status_codereturnboolc                :    | t           v rdS | t          v rdS | dk    S )NFTr   )_NO_RETRY_STATUS_RETRY_STATUS)r&   s    r#   should_retry_statuszRetryPolicy.should_retry_status   s.    ***5-''4c!!r%   excBaseExceptionc                    t          | t          j        t          j        z  t          j        z  t          j        z  t          z  t          z            S r    )
isinstancehttpxTimeoutExceptionConnectError	ReadErrorRemoteProtocolErrorConnectionErrorTimeoutError)r-   s    r#   should_retry_errorzRetryPolicy.should_retry_error   sP    #u58JJU_\_d_xx  |K   K  NZ   Z  [  [  	[r%   Nattempt
int | Nonec                    |dk    r
| j         dz  n| j         }t          |d|dz
  z  z  | j                  }|dt          j        | j         | j                  z   z  }t          |d          S )Nr   r         g?)r   minr   randomuniformr   max)r"   r9   r&   basedelays        r#   compute_delayzRetryPolicy.compute_delay#   sm    &1S&8&8t""doD11--t~>>V^T[L$+>>>>5#r%   httpx.Responsec                0  K   d }d}|| j         k    rr	  ||i | d {V }|j        dk     r|S |                     |j                  sCt                              d|j         d|r|d         nd            |                                 || j         k    r>t                              d| j          d|j                    |                                 |                     |dz   |j                  }t                              d	|j         d
|dz    d| j          d|dd	           t          j	        |           d {V  |dz  }n0# t          j        $ r  t          $ r}|                     |          s3t                              dt          |          j         d|             |}|| j         k    r;t                              d| j          dt          |          j         d|             |                     |dz             }t                              dt          |          j         d
|dz    d| j          d|dd	           t          j	        |           d {V  |dz  }Y d }~nd }~ww xY w|| j         k    r|r|t!          d          )Nr   r   u   [retry] 不可重试状态码 u   ，终止:  u   [retry] 达到最大重试 (z	) status=r=   z[retry] status=z	 attempt=/u    等待 z.1fsu   [retry] 不可重试异常 z: z) error=z[retry] zretry policy internal error)r   r&   r,   loggerwarningraise_for_statuserrorrD   asynciosleepr1   HTTPStatusError	Exceptionr8   type__name__RuntimeError)	r"   
request_fnargskwargslast_excr9   resprC   r-   s	            r#   executezRetryPolicy.execute)   sX     )-)))-7Z-H-H-H'H'H'H'H'H'H#c))K//0@AA ,NN#|DDT#|#|mqbybfghbibiwy#|#|}}}))+++d...LL!m@P!m!m[_[k!m!mnnn))+++**7Q;8HII   A1A   A   AGVWK   A   AZ^Zj   A   Aty   A   A   A   A  B  B  BmE*********1(      ..s33 LL!ZtCyy?Q!Z!ZUX!Z!Z[[[d...LL!u@P!u!uZ^_bZcZcZl!u!ups!u!uvvv**7Q;77{$s))*<{{wQR{{{UYUe{{ot{{{{|||mE*********1# ))):  	N8999s   E	 DE	 	I6#D	I11I6)r   r   r   r   )r   r   r   r   r   r   r   r   )r&   r   r'   r(   )r-   r.   r'   r(   r    )r9   r   r&   r:   r'   r   )r'   rE   )	rS   
__module____qualname__r$   staticmethodr,   r8   rD   rZ    r%   r#   r   r      s             " " " \" [ [ [ \[    ": ": ": ": ": ":r%   r   r   r   r   r   r!   )
__future__r   rN   r?   r1   common_loggingr   rS   rJ   	frozensetr*   r+   r   default_retry_policyr^   r%   r#   <module>rc      s    " " " " " "    % % % % % %	H		 9JJJKK 	33344<: <: <: <: <: <: <: <:z #{qSDY\]]]   r%   