File manager - Edit - /opt/saltstack/salt/lib/python3.10/site-packages/libcloud/utils/__pycache__/retry.cpython-310.pyc
Back
o ;j� � @ s� d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dlm Z d dl mZ ddgZe� e�ZdZG d d � d e j�ZdZdZdZeejeje je jefZG d d� d�ZG dd� de�ZG dd� de�ZdS )� N)�datetime� timedelta��wraps)�httplib)�RateLimitReachedError�Retry�RetryForeverOnRateLimitErrorzThe read operation timed outc @ s e Zd ZdZdS )�TransientSSLErrorz-Represent transient SSL errors, e.g. timeoutsN)�__name__� __module__�__qualname__�__doc__� r r �H/opt/saltstack/salt/lib/python3.10/site-packages/libcloud/utils/retry.pyr % s r � � c @ s, e Zd Zeeefdd�Zdd� Zdd� ZdS )�MinimalRetryc C sD |du rt }|du rt}|du rt}t|d�}|| _|| _|| _dS )a� Wrapper around retrying that helps to handle common transient exceptions. This minimalistic version only retries SSL errors and rate limiting. :param retry_delay: retry delay between the attempts. :param timeout: maximum time to wait. :param backoff: multiplier added to delay between attempts. :Example: retry_request = MinimalRetry(timeout=1, retry_delay=1, backoff=1) retry_request(self.connection.request)() Nr )� DEFAULT_DELAY�DEFAULT_TIMEOUT�DEFAULT_BACKOFF�max�retry_delay�timeout�backoff)�selfr r r r r r �__init__; s zMinimalRetry.__init__c �$ dd� �t � �� ��fdd��}|S )Nc _ �F z| |i |��W S t jy" } z tt|�v rt|j� �|�d }~ww �N��ssl�SSLError�TRANSIENT_SSL_ERROR�strr �args��functionr% �kwargs�excr r r �transform_ssl_error_ � ��z2MinimalRetry.__call__.<locals>.transform_ssl_errorc s� �j }t�� t�jd� }d }t�� |k rhz�� g| �R i |��W S tya } z4|}t|t�rFt� d� |j r;|j nd}t�|� �j }n�� |�rVt�|� |�j9 }n� W Y d }~nd }~ww t�� |k s|�)N��secondsz*You are being rate limited, backing off...� )r r �nowr r � Exception� isinstancer �_logger�debug�retry_after�time�sleep�should_retryr )r% r( � current_delay�end�last_excr) r4 ��funcr r* r r � retry_looph s* ���z)MinimalRetry.__call__.<locals>.retry_loopr �r r<