o
    ³©iª  ã                   @   sx   d dl Z d dlm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G dd„ deƒZG dd„ deƒZ	dS )é    N)ÚRetryConditionc                   @   ó   e Zd Zdd„ ZdS )ÚBackoffStrategyc                 C   s   dS )z=Compute delay for request need to be retried, in millisecondsN© ©ÚselfÚretry_policy_contextr   r   úX/home/ubuntu/.local/lib/python3.10/site-packages/aliyunsdkcore/retry/backoff_strategy.pyÚcompute_delay_before_next_retry   s   z/BackoffStrategy.compute_delay_before_next_retryN©Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r	   r      ó    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFixedDelayStrategyc                 C   s
   || _ d S ©N©Úfixed_delay)r   r   r   r   r	   Ú__init__   s   
zFixedDelayStrategy.__init__c                 C   s   | j S r   r   r   r   r   r	   r
      s   z2FixedDelayStrategy.compute_delay_before_next_retryN)r   r   r   r   r
   r   r   r   r	   r      s    r   c                   @   r   )ÚNoDelayStrategyc                 C   s   t  | d¡ d S )Nr   )r   r   ©r   r   r   r	   r   %   s   zNoDelayStrategy.__init__N)r   r   r   r   r   r   r   r	   r   #   r   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚExponentialBackoffStrategyé   c                 C   s   || _ || _d S r   )Úbase_delay_in_millisecondsÚmax_delay_in_milliseconds)r   r   r   r   r   r	   r   -   s   
z#ExponentialBackoffStrategy.__init__c                 C   s$   t | j|jƒ}t | j| j|> ƒ}|S r   )ÚminÚMAX_RETRY_LIMITÚretries_attemptedr   r   )r   r   ÚretriesÚdelayr   r   r	   r
   1   s   z:ExponentialBackoffStrategy.compute_delay_before_next_retryN)r   r   r   r   r   r
   r   r   r   r	   r   )   s    r   c                   @   r   )Ú"JitteredExponentialBackoffStrategyc                 C   s(   t  | |¡}|d t dt|d ƒ¡ S )Né   r   )r   r
   ÚrandomÚrandintÚint)r   r   r   r   r   r	   r
   9   s   ÿzBJitteredExponentialBackoffStrategy.compute_delay_before_next_retryNr   r   r   r   r	   r    7   r   r    c                   @   s(   e Zd ZdZdZdZdd„ Zdd„ ZdS )	ÚDefaultMixedBackoffStrategyéd   iô  i N  c                 C   s$   t | j| jƒ| _t| j| jƒ| _d S r   )r   ÚSDK_DEFAULT_BASE_DELAYÚSDK_DEFAULT_MAX_BACKOFFÚ_default_backoff_strategyr    ÚSDK_DEFAULT_TROTTLED_BASE_DELAYÚ#_default_throttled_backoff_strategyr   r   r   r	   r   F   s   þ
þz$DefaultMixedBackoffStrategy.__init__c                 C   s(   |j }|tj@ r| j |¡S | j |¡S r   )Ú	retryabler   Ú$SHOULD_RETRY_WITH_THROTTLING_BACKOFFr+   r
   r)   )r   r   r,   r   r   r	   r
   P   s   
ÿÿz;DefaultMixedBackoffStrategy.compute_delay_before_next_retryN)r   r   r   r'   r*   r(   r   r
   r   r   r   r	   r%   ?   s    
r%   )
r"   Ú#aliyunsdkcore.retry.retry_conditionr   Úobjectr   r   r   r   r    r%   r   r   r   r	   Ú<module>   s   	