o
    QDi                   $   @   sr  d dl mZmZmZmZmZmZmZmZ d dl	m
Z
mZmZmZ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mZmZmZ ddlmZmZ ed	ed
efddZe	d*ddddde e e e ddddd	ddede de de de dededededeee ef deee! eee! df df deee! eee! df df ded
eegef fd dZ	d*ddddde e e e ddddd	ee dede de de de dededededeee ef deee! eee! df df deee! eee! df df ded
eeeegef f fd!dZG d"d# d#eZ"G d$d% d%eZ#G d&d' d'eZ$G d(d) d)eZ%dS )+    )AnyCallableOptionalSequenceTupleTypeUnionoverload)RetryCallState	retry_any
retry_baseretry_if_exception_typestop_after_attemptwait_exponentialwait_random_exponential)retry)	wait_base   )F)get_default_network_errorsget_default_timeoutsis_rate_limitedis_server_error)wait_context_awarewait_retry_afterfuncreturnc                 C      d S N r   r   r   I/var/www/Datamplify/venv/lib/python3.10/site-packages/retryhttp/_retry.pyr      s   r   N   Ti  i  i  i  )max_attempt_numberretry_server_errorsretry_network_errorsretry_timeoutsretry_rate_limitedwait_server_errorswait_network_errorswait_timeoutswait_rate_limitedserver_error_codesnetwork_errorstimeoutsr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   .r/   kwargsc                K   r   r   r   )r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r   r!   r      s   c             	      s   |du rt  }|du rt }g }|r|t|
d |r$|t|d |r.|t|d |r6|t  |s<td ddpEt	|  ddpVt
||||	|
||d d	dp`t|d
tdtf fdd}| ru|| S |S )a=	  Retry potentially transient HTTP errors with sensible default behavior.

    By default, retries the following errors, for a total of 3 attempts, with
    exponential backoff (except when rate limited, which defaults to the
    `Retry-After` header, if present):

    - HTTP status errors:
        - `429 Too Many Requests` (rate limited)
        - `500 Internal Server Error`
        - `502 Bad Gateway`
        - `503 Service Unavailable`
        - `504 Gateway Timeout`
    - Network errors:
        - `httpx.ConnectError`
        - `httpx.ReadError`
        - `httpx.WriteError`
        - `requests.ConnectionError`
        - `requests.exceptions.ChunkedEncodingError`
    - Timeouts:
        - `httpx.TimeoutException`
        - `requests.Timeout`

    Args:
        max_attempt_number: Total times to attempt a request. Includes the first attempt
            and any additional retries.
        retry_server_errors: Whether to retry 5xx server errors.
        retry_network_errors: Whether to retry network errors.
        retry_timeouts: Whether to retry timeouts.
        retry_rate_limited: Whether to retry when `Retry-After` header received.
        wait_server_errors: Wait strategy to use for server errors.
        wait_network_errors: Wait strategy to use for network errors.
        wait_timeouts: Wait strategy to use for timeouts.
        wait_rate_limited: Wait strategy to use when `Retry-After` header received.
        server_error_codes: One or more 5xx error codes that will trigger `wait_server_errors`
            if `retry_server_errors` is `True`. Defaults to 500, 502, 503, and 504.
        network_errors: One or more exceptions that will trigger `wait_network_errors` if
            `retry_network_errors` is `True`. Defaults to:

            - `httpx.ConnectError`
            - `httpx.ReadError`
            - `httpx.WriteError`
            - `requests.ConnectError`
            - `requests.exceptions.ChunkedEncodingError`
        timeouts: One or more exceptions that will trigger `wait_timeouts` if
            `retry_timeouts` is `True`. Defaults to:

            - `httpx.TimeoutException`
            - `requests.Timeout`

    Returns:
        Decorated function.

    Raises:
        RuntimeError: If `retry_server_errors`, `retry_network_errors`, `retry_timeouts`,
            and `retry_rate_limited` are all `False`.

    Nr-   )errors)r/   zNo retry strategies enabled.r   wait)r)   r*   r+   r,   r-   r.   r/   stopr   r   c                    s   t dd | S )N)r   r3   r4   r   )tenacity_retryr    r0   r   r4   r3   r   r!   	decorator   s   zretry.<locals>.decorator)r   r   appendretry_if_server_errorretry_if_network_errorretry_if_timeoutretry_if_rate_limitedRuntimeErrorpopr   r   r   r   )r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   retry_strategiesr7   r   r6   r!   r   5   s@   L
c                       H   e Zd ZdZ	ddeee eee df df ddf fddZ  Z	S )	r:   aV  Retry network errors.

    Args:
        errors: One or more exceptions to consider a network error. If omitted,
            defaults to:

            - `httpx.ConnectError`
            - `httpx.ReadError`
            - `httpx.WriteError`
            - `requests.ConnectionError`
            - `requests.exceptions.ChunkedEncodingError`

    Nr2   .r   c                    (   |d u rt  }|| _t j| jd d S N)exception_types)r   r2   super__init__)selfr2   	__class__r   r!   rE         zretry_if_network_error.__init__r   
__name__
__module____qualname____doc__r   r   BaseExceptionr   rE   __classcell__r   r   rG   r!   r:      s    r:   c                   @   s"   e Zd ZdZdedefddZdS )r<   z5Retry if server responds with a `Retry-After` header.retry_stater   c                 C   s    |j r|j jrt|j  S dS NF)outcomefailedr   	exception)rF   rQ   r   r   r!   __call__   s   zretry_if_rate_limited.__call__N)rK   rL   rM   rN   r
   boolrV   r   r   r   r!   r<      s    r<   c                   @   sD   e Zd ZdZ	ddeee ef ddfddZdede	fd	d
Z
dS )r9   zpRetry certain server errors (5xx).

    Args:
        server_error_codes: One or more 5xx errors to retry.

    r#   r-   r   Nc                 C   s
   || _ d S r   r1   )rF   r-   r   r   r!   rE      s   
zretry_if_server_error.__init__rQ   c                 C   s(   |j r|j jr|j  }t|| jS dS rR   )rS   rT   rU   r   r-   )rF   rQ   excr   r   r!   rV      s   
zretry_if_server_error.__call__)r#   )rK   rL   rM   rN   r   r   intrE   r
   rW   rV   r   r   r   r!   r9      s    	
r9   c                       r@   )	r;   a  Retry timeouts.

    Args:
        timeouts: One or more exceptions to consider a timeout. If omitted,
            defaults to:

            - `httpx.ConnectTimeout`
            - `httpx.ReadTimeout`
            - `httpx.WriteTimeout`
            - `requests.Timeout`
    Nr/   .r   c                    rA   rB   )r   r/   rD   rE   )rF   r/   rG   r   r!   rE      rI   zretry_if_timeout.__init__r   rJ   r   r   rG   r!   r;      s    r;   r   )&typingr   r   r   r   r   r   r   r	   tenacityr
   r   r   r   r   r   r   r   r5   tenacity.waitr   _typesr   _utilsr   r   r   r   _waitr   r   rY   rW   rO   r:   r<   r9   r;   r   r   r   r!   <module>   s   ( $		
	

w	