
    'j                         d dl Z d dlZd dlmZmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  G d
 de          Z G d de          Z G d de          Zdee         fdZdS )    N)OptionalListType)ServerDisconnectedErrorServerConnectionErrorClientOSError)AsyncRetryHandler)RetryIntervalCalculator)
RetryState)HttpRequest)HttpResponse)default_interval_calculatorc                        e Zd ZdZdeeeegfdede	de
ee                  f fdZdddd	ed
edee         dee         def
dZ xZS ) AsyncConnectionErrorRetryHandlerz7RetryHandler that does retries for connectivity issues.   max_retry_countinterval_calculatorerror_typesc                 Z    t                                          ||           || _        d S N)super__init__error_types_to_do_retries)selfr   r   r   	__class__s       l/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/http_retry/builtin_async_handlers.pyr   z)AsyncConnectionErrorRetryHandler.__init__   s.     	*=>>>)4&&&    Nresponseerrorstaterequestr   r    returnc                L   K   |dS | j         D ]}t          ||          r dS dS )NFT)r   
isinstance)r   r!   r"   r   r    
error_types         r   _can_retry_asyncz1AsyncConnectionErrorRetryHandler._can_retry_async    sG       =58 	 	J%,, ttur   )__name__
__module____qualname____doc__r   r   r   r   intr
   r   r   	Exceptionr   r   r   r   r   boolr'   __classcell__r   s   @r   r   r      s        AA  !7R!#	.
	5 55 55 $y/*	5 5 5 5 5 5& ,0%)    	
 <( 	" 
       r   r   c                       e Zd ZdZddddededee         dee         de	f
d	Z
ddddededee         dee         ddf
d
ZdS )AsyncRateLimitErrorRetryHandlerz7RetryHandler that does retries for rate limited errors.Nr   r!   r"   r   r    r#   c                $   K   |d uo
|j         dk    S )Ni  status_coder   r!   r"   r   r    s        r   r'   z0AsyncRateLimitErrorRetryHandler._can_retry_async4   s        t#C(<(CCr   c                  K   ||d|_         d }|j                                        D ]}|                                dk    r|} nd}||t	          j                    z  }nAt          |j                            |          d                   t	          j                    z   }t          j        |           d {V  |	                                 d S )NTzretry-afterr   r   )
next_attempt_requestedheaderskeyslowerrandomr,   getasynciosleepincrement_current_attempt)r   r!   r"   r   r    retry_after_header_namekdurations           r   prepare_for_next_attempt_asyncz>AsyncRateLimitErrorRetryHandler.prepare_for_next_attempt_async>   s       K'+$15!&&(( 	 	AwwyyM))*+' * "*'HH8+//0GHHKLLv}^HmH%%%%%%%%%'')))))r   )r(   r)   r*   r+   r   r   r   r   r-   r.   r'   rD    r   r   r2   r2   1   s        AA ,0%)D D D D 	D
 <(D 	"D 
D D D D ,0%)* * * * 	*
 <(* 	"* 
* * * * * *r   r2   c                   n     e Zd ZdZdefdedef fdZdddded	e	d
e
e         de
e         def
dZ xZS )AsyncServerErrorRetryHandlerz1RetryHandler that does retries for server errors.r   r   r   c                 L    t                                          ||           d S r   )r   r   )r   r   r   r   s      r   r   z%AsyncServerErrorRetryHandler.__init__\   s&    
 	*=>>>>>r   Nr   r!   r"   r   r    r#   c                    K   |d uo|j         dv S )N)i  i  r4   r6   s        r   r'   z-AsyncServerErrorRetryHandler._can_retry_asyncc   s        t#J(<
(JJr   )r(   r)   r*   r+   r   r,   r
   r   r   r   r   r   r-   r.   r'   r/   r0   s   @r   rG   rG   Y   s        ;;  !7R? ?? 5? ? ? ? ? ? ,0%)K K K K 	K
 <(K 	"K 
K K K K K K K Kr   rG   r#   c                       t                      gS r   )r   rE   r   r   async_default_handlersrK   n   s    ,..//r   )r>   r<   typingr   r   r   aiohttpr   r   r   "slack_sdk.http_retry.async_handlerr	   (slack_sdk.http_retry.interval_calculatorr
   slack_sdk.http_retry.stater   slack_sdk.http_retry.requestr   slack_sdk.http_retry.responser   slack_sdk.http_retry.handlerr   r   r2   rG   rK   rE   r   r   <module>rT      su     ' ' ' ' ' ' ' ' ' ' Q Q Q Q Q Q Q Q Q Q @ @ @ @ @ @ L L L L L L 1 1 1 1 1 1 4 4 4 4 4 4 6 6 6 6 6 6 D D D D D D    '8   D%* %* %* %* %*&7 %* %* %*PK K K K K#4 K K K*0%6 7 0 0 0 0 0 0r   