
    E0j                     2   d dl Z d dlmZmZmZ dZdZ G d d          Z G d de          Z G d	 d
e          Z	 G d de          Z
 G d de          Z G d de          Z G d d          Z G d d          Z G d d          ZdededefdZdS )    N)ListAnyDicti d   c                   j    e Zd Zdeeef         fdZdddefdZe	deeef         dd fd            Z
dS )	BackoffPolicyoptionc                 :    |                     d          | _        d S )Npolicy)getr   )selfr	   s     ^/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/darabonba/policy/retry.py__init__zBackoffPolicy.__init__   s    jj**    ctxRetryPolicyContextreturnc                      t          d          )Nzun-implemented)NotImplementedErrorr   r   s     r   get_delay_timezBackoffPolicy.get_delay_time   s    !"2333r   c                    t           t          t          t          t          t          t          d}|                    |                     d                    }|r ||           S t          d|                     d                     )N)FixedRandomExponentialEqualJitterExponentialWithEqualJitter
FullJitterExponentialWithFullJitterr   zUnknown policy: )FixedBackoffPolicyRandomBackoffPolicyExponentialBackoffPolicyEqualJitterBackoffPolicyFullJitterBackoffPolicyr   
ValueError)r	   
policy_mappolicy_classs      r   new_backoff_policyz BackoffPolicy.new_backoff_policy   s     ()33*B1)@
 

 "~~fjj&:&:;; 	(<'''BFJJx,@,@BBCCCr   N)__name__
__module____qualname__r   strr   r   intr   staticmethodr(    r   r   r   r      s        +tCH~ + + + +4"6 43 4 4 4 4 D4S> Do D D D \D D Dr   r   c                   J     e Zd Zdeeef         f fdZd ZdddefdZ	 xZ
S )r    r	   c                 ~    t                                          |           |                    d          | _        d S )Nperiod)superr   r   r2   r   r	   	__class__s     r   r   zFixedBackoffPolicy.__init__   s2       jj**r   c                      | j         | j        dS )Nr   r2   r7   r   s    r   to_mapzFixedBackoffPolicy.to_map#   s    kk
 
 	
r   r   r   r   c                     | j         S N)r2   r   s     r   r   z!FixedBackoffPolicy.get_delay_time)   s
    {r   r)   r*   r+   r   r,   r   r   r9   r-   r   __classcell__r5   s   @r   r    r       s~        +tCH~ + + + + + +
 
 
"6 3        r   r    c                   J     e Zd Zdeeef         f fdZd ZdddefdZ	 xZ
S )r!   r	   c                     t                                          |           |                    d          | _        |                    dd          | _        d S )Nr2   capi N  r3   r   r   r2   rA   r4   s     r   r   zRandomBackoffPolicy.__init__-   sG       jj**::eY//r   c                 ,    | j         | j        | j        dS Nr   r2   rA   rE   r8   s    r   r9   zRandomBackoffPolicy.to_map2        kk8
 
 	
r   r   r   r   c                 p    t          j        d|j        | j        z            }t	          || j                  S )Nr   )randomrandintretries_attemptedr2   minrA   r   r   random_times      r   r   z"RandomBackoffPolicy.get_delay_time9   s/    nQ(=(KLL;)))r   r<   r>   s   @r   r!   r!   ,   s~        0tCH~ 0 0 0 0 0 0

 
 
*"6 *3 * * * * * * * *r   r!   c                   J     e Zd Zdeeef         f fdZd ZdddefdZ	 xZ
S )r"   r	   c                     t                                          |           |                    d          | _        |                    dd          | _        d S Nr2   rA   i srB   r4   s     r   r   z!ExponentialBackoffPolicy.__init__>   H       jj**::e%<==r   c                 ,    | j         | j        | j        dS rD   rE   r8   s    r   r9   zExponentialBackoffPolicy.to_mapC   rF   r   r   r   r   c                 P    t          d|j        | j        z  z  | j                  }|S )N   )rK   rJ   r2   rA   rL   s      r   r   z'ExponentialBackoffPolicy.get_delay_timeJ   s(    ! 5 CDdhOOr   r<   r>   s   @r   r"   r"   =   s~        >tCH~ > > > > > >

 
 
"6 3        r   r"   c                   J     e Zd Zdeeef         f fdZd ZdddefdZ	 xZ
S )r#   r	   c                     t                                          |           |                    d          | _        |                    dd          | _        d S rP   rB   r4   s     r   r   z!EqualJitterBackoffPolicy.__init__O   rQ   r   c                 ,    | j         | j        | j        dS rD   rE   r8   s    r   r9   zEqualJitterBackoffPolicy.to_mapU   rF   r   r   r   r   c                     t          | j        d|j        | j        z  z            }|dz  t	          j        d|dz            z   S NrT   r   rK   rA   rJ   r2   rH   rI   r   r   ceils      r   r   z'EqualJitterBackoffPolicy.get_delay_time\   sA    48Q3#84;#FGHHqy6>!TQY7777r   r<   r>   s   @r   r#   r#   N   s~        >tCH~ > > > > > >
 
 
8"6 83 8 8 8 8 8 8 8 8r   r#   c                   J     e Zd Zdeeef         f fdZd ZdddefdZ	 xZ
S )r$   r	   c                     t                                          |           |                    d          | _        |                    dd          | _        d S rP   rB   r4   s     r   r   z FullJitterBackoffPolicy.__init__a   rQ   r   c                 ,    | j         | j        | j        dS rD   rE   r8   s    r   r9   zFullJitterBackoffPolicy.to_mapf   rF   r   r   r   r   c                 v    t          | j        d|j        | j        z  z            }t	          j        d|          S rY   rZ   r[   s      r   r   z&FullJitterBackoffPolicy.get_delay_timem   s4    48Q3#84;#FGHH~a&&&r   r<   r>   s   @r   r$   r$   `   s~        >tCH~ > > > > > >

 
 
'"6 '3 ' ' ' ' ' ' ' 'r   r$   c                   f    e Zd Zdeeef         fdZd Zd Ze	deeef         dd fd            Z
dS )	RetryCondition	conditionc                 :   |                     dd           | _        |                     |                     dd                     | _        |                     dg           | _        |                     dg           | _        |                     dd           | _        d S NmaxAttemptsbackoff	exception	errorCodemaxDelay)r   max_attempts_ensure_backoff_policyrg   rh   
error_code	max_delayr   rc   s     r   r   zRetryCondition.__init__r   s~    %MM->>229==D3Q3QRR"{B77#--R88"z488r   c                     t          |t                    rt                              |          S t          |t                    r|S d S r;   )
isinstancedictr   r(   )r   rg   s     r   rl   z%RetryCondition._ensure_backoff_policyy   sI    gt$$ 	 33G<<<// 	N	 	r   c                     t                      }| j        r
| j        |d<   | j        r| j                                        |d<   | j        r
| j        |d<   | j        r
| j        |d<   | j        r
| j        |d<   |S re   )rr   rk   rg   r9   rh   rm   rn   r   results     r   r9   zRetryCondition.to_map   s     	6$($5F=!< 	6 $ 3 3 5 5F9> 	1"&.F;? 	2"&/F;> 	0!%F:r   datar   c           	          t          |                     d          |                     d          |                     dg           |                     dg           |                     d          d          S )Nrf   rg   rh   ri   rj   )rf   rg   rh   ri   rj   )rb   r   )rv   s    r   from_mapzRetryCondition.from_map   sm    88M22xx	**+r22+r22,,
 
   	r   N)r)   r*   r+   r   r,   r   r   rl   r9   r.   rx   r/   r   r   rb   rb   q   s        9$sCx. 9 9 9 9     tCH~ *:    \  r   rb   c                   r    e Zd Zdeeef         fdZd ZdefdZ	d Z
edeeef         dd fd            Zd	S )
RetryOptionsoptionsc                      |                     dd           _         fd|                     dg           D              _         fd|                     dg           D              _        d S )N	retryableTc                 :    g | ]}                     |          S r/   _ensure_retry_condition.0condr   s     r   
<listcomp>z)RetryOptions.__init__.<locals>.<listcomp>   s'    qqqt < <T B Bqqqr   retryConditionc                 :    g | ]}                     |          S r/   r   r   s     r   r   z)RetryOptions.__init__.<locals>.<listcomp>   s'    "v"v"v$4#?#?#E#E"v"v"vr   noRetryCondition)r   r}   retry_conditionno_retry_condition)r   r{   s   ` r   r   zRetryOptions.__init__   sy     [$77qqqqw{{[kmoOpOpqqq"v"v"v"vRYR]R]^prtRuRu"v"v"vr   c                     t          |t                    rt          |          S t          |t                    r|S t          d          )NzBCondition must be either a dictionary or a RetryCondition instance)rq   rr   rb   r%   ro   s     r   r   z$RetryOptions._ensure_retry_condition   sK    i&& 	c!),,,	>22 	cabbbr   r   c                 t   t          | j        t                    st          d          t          | j        t
                    rt          d | j        D                       st          d          t          | j        t
                    rt          d | j        D                       st          d          dS )Nzretryable must be a boolean.c              3   @   K   | ]}t          |t                    V  d S r;   rq   rb   r   r   s     r   	<genexpr>z(RetryOptions.validate.<locals>.<genexpr>   sN        AD  ADfjDR`AaAa  AD  AD  AD  AD  AD  ADr   z0retryCondition must be a list of RetryCondition.c              3   @   K   | ]}t          |t                    V  d S r;   r   r   s     r   r   z(RetryOptions.validate.<locals>.<genexpr>   sN        DJ  DJimJtUcDdDd  DJ  DJ  DJ  DJ  DJ  DJr   z2noRetryCondition must be a list of RetryCondition.T)rq   r}   boolr%   r   listallr   r8   s    r   validatezRetryOptions.validate   s    $.$// 	=;<<<$.55 	QS  AD  ADnr  oC  AD  AD  AD  >D  >D 	QOPPP$1488 	S  DJ  DJqu  rI  DJ  DJ  DJ  AJ  AJ 	SQRRRtr   c                     t                      }| j        r
| j        |d<   | j        rd | j        D             |d<   | j        rd | j        D             |d<   |S )Nr}   c                 6    g | ]}|                                 S r/   r9   r   s     r   r   z'RetryOptions.to_map.<locals>.<listcomp>   s     'W'W'W$'W'W'Wr   r   c                 6    g | ]}|                                 S r/   r   r   s     r   r   z'RetryOptions.to_map.<locals>.<listcomp>   s     )\)\)\D$++--)\)\)\r   r   )rr   r}   r   r   rt   s     r   r9   zRetryOptions.to_map   sv    > 	1"&.F; 	X'W'W$BV'W'W'WF#$" 	])\)\DD[)\)\)\F%&r   rv   c                     |                      dd          d |                      dg           D             d |                      dg           D             d}t          |          S )Nr}   Tc                     g | ]}|S r/   r/   r   s     r   r   z)RetryOptions.from_map.<locals>.<listcomp>   s    OOOtOOOr   r   c                     g | ]}|S r/   r/   r   s     r   r   z)RetryOptions.from_map.<locals>.<listcomp>   s     S S S$ S S Sr   r   )r}   r   r   )r   rz   )rv   r{   s     r   rx   zRetryOptions.from_map   sq     +t44OO9I20N0NOOO S S$((;Mr2R2R S S S
 

 G$$$r   N)r)   r*   r+   r   r,   r   r   r   r   r   r9   r.   rx   r/   r   r   rz   rz      s        wS#X w w w w
c c c$       %tCH~ %. % % % \% % %r   rz   c                       e Zd ZddZdS )r   Nc                 >    || _         || _        || _        || _        d S r;   )rJ   http_requesthttp_responserh   )r   rJ   r   r   rh   s        r   r   zRetryPolicyContext.__init__   s%    !2(*"r   )NNNN)r)   r*   r+   r   r/   r   r   r   r      s(        # # # # # #r   r   r{   r   r   c                 H   |j         }| j        D ]}|r|j        |j         v s|j        |j        v rm|j        pt          }t          |dd           }|t          ||          c S |j	        s	t          c S t          |j	                            |          |          c S t          S )N
retryAfter)rh   r   namecoderm   rn   MAX_DELAY_TIMEgetattrrK   rg   MIN_DELAY_TIMEr   )r{   r   exrc   rn   retry_afters         r   get_backoff_delayr      s    	B, 
I 
I	 		IBGy222bgAU6U6U!+=~I!"lD99K&;	22222$ &%%%%y(77<<iHHHHHr   )rH   typingr   r   r   r   r   r   r    r!   r"   r#   r$   rb   rz   r   r-   r   r/   r   r   <module>r      s    " " " " " " " " " "D D D D D D D D.       * * * * *- * * *"    }   "8 8 8 8 8} 8 8 8$' ' ' ' 'm ' ' '"$ $ $ $ $ $ $ $L(% (% (% (% (% (% (% (%T# # # # # # # #| 2D       r   