
    'j                         d dl Z d dlZd dl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mZ  G d
 de          Z G d de          Z G d de          ZdS )    N)RemoteDisconnected)OptionalListType)URLError)RetryIntervalCalculator)
RetryState)HttpRequest)HttpResponse)RetryHandler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 )ConnectionErrorRetryHandlerz7RetryHandler 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       f/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/http_retry/builtin_handlers.pyr   z$ConnectionErrorRetryHandler.__init__   s.     	*=>>>)4&&&    Nresponseerrorstaterequestr   r   returnc                z    |dS t          |t                    r|dS | j        D ]}t          ||          r dS dS )NFT)
isinstancer   r   )r   r    r!   r   r   
error_types         r   
_can_retryz&ConnectionErrorRetryHandler._can_retry   s`     =5eX&& 	#u8 	 	J%,, ttur   )__name__
__module____qualname____doc__r   r   ConnectionResetErrorr   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 )RateLimitErrorRetryHandlerz7RetryHandler that does retries for rate limited errors.Nr   r    r!   r   r   r"   c                     |d uo
|j         dk    S )Ni  status_coder   r    r!   r   r   s        r   r&   z%RateLimitErrorRetryHandler._can_retry7   s     t#C(<(CCr   c                   ||d|_         d }|j                                        D ]}|                                dk    r|} nd}||t	          j                    z  }nAt          |j                            |          d                   t	          j                    z   }t          j        |           |	                                 d S )NTzretry-afterr   r   )
next_attempt_requestedheaderskeyslowerrandomr,   gettimesleepincrement_current_attempt)r   r    r!   r   r   retry_after_header_namekdurations           r   prepare_for_next_attemptz3RateLimitErrorRetryHandler.prepare_for_next_attemptA   s     K'+$15!&&(( 	 	AwwyyM))*+' * "*'HH8+//0GHHKLLv}^H
8'')))))r   )r'   r(   r)   r*   r	   r
   r   r   r-   r.   r&   rD    r   r   r2   r2   4   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 )ServerErrorRetryHandlerz1RetryHandler 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 ServerErrorRetryHandler.__init___   s&    
 	*=>>>>>r   Nr   r    r!   r   r   r"   c                    |d uo|j         dv S )N)i  i  r4   r6   s        r   r&   z"ServerErrorRetryHandler._can_retryf   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   \   s        ;;  !7R? ?? 5? ? ? ? ? ? ,0%)K K K K 	K
 <(K 	"K 
K K K K K K K Kr   rG   )r<   r>   http.clientr   typingr   r   r   urllib.errorr   (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   r   r2   rG   rE   r   r   <module>rR      sM     * * * * * * ' ' ' ' ' ' ' ' ' ' ! ! ! ! ! ! L L L L L L 1 1 1 1 1 1 4 4 4 4 4 4 6 6 6 6 6 6 R R R R R R R R# # # # #, # # #L%* %* %* %* %* %* %* %*PK K K K Kl K K K K Kr   