o
    ig                      @   s  d dl Z d dlZd dlZd dlm  mZ d dlmZm	Z	 d dl
m  mZ eeZ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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G dd deZdS )    N)ClientExceptionServerExceptionc                 C   s6   |  d u rd S d|   | | }t||S )Nz"{0}"."{1}"."{2}")get_productformatlowerget_versionjmespathsearch)key_namerequestretry_configpath r   W/home/ubuntu/.local/lib/python3.10/site-packages/aliyunsdkcore/retry/retry_condition.py_find_data_in_retry_config   s   r   c                   @   s(   e Zd ZdZdZdZdZdZdd ZdS )	RetryConditionr               c                 C   s   dS )z6Decide whether the previous request should be retried.Nr   selfretry_policy_contextr   r   r   should_retry+   s   zRetryCondition.should_retryN)	__name__
__module____qualname__BLANK_STATUSNO_RETRYSHOULD_RETRYSHOULD_RETRY_WITH_CLIENT_TOKEN$SHOULD_RETRY_WITH_THROTTLING_BACKOFFr   r   r   r   r   r   #   s    r   c                   @   s   e Zd Zdd ZdS )NoRetryConditionc                 C   s   t jS N)r   r   r   r   r   r   r   2   s   zNoRetryCondition.should_retryN)r   r   r   r   r   r   r   r   r"   0   s    r"   c                   @      e Zd Zdd Zdd ZdS )MaxRetryTimesConditionc                 C   s   t |d || _d S )Nmax_retry_times)
validationassert_integer_positiver&   r   r&   r   r   r   __init__8   s   
zMaxRetryTimesCondition.__init__c                 C   s&   |j | jk r	tjS td|j  tjS )Nz0Reached the maximum number of retry. Attempts:%d)retries_attemptedr&   r   r   loggerdebugr   r   r   r   r   r   <   s   z#MaxRetryTimesCondition.should_retryNr   r   r   r*   r   r   r   r   r   r%   6   s    r%   c                   @   r$   )RetryOnExceptionConditionc                 C   
   || _ d S r#   r   r   r   r   r   r   r*   H      
z"RetryOnExceptionCondition.__init__c                 C   s   |j }|j}t|tr| tjkrtd| t	j
S t|trY| }td|| j}t|tr=||v r=td| t	j
S td|| j}t|trY||v rYtd| t	j
t	jB S t	jS )Nz6Retryable ClientException occurred. ClientException:%sRetryableNormalErrorsz6Retryable ServerException occurred. ServerException:%sRetryableThrottlingErrorsz6Retryable ThrottlingError occurred. ThrottlingError:%s)original_request	exception
isinstancer   get_error_code
error_codeSDK_HTTP_ERRORr,   r-   r   r   r   r   r   listr!   r   )r   r   r   r7   error_code_normal_errorsthrottling_errorsr   r   r   r   K   s>   

z&RetryOnExceptionCondition.should_retryNr.   r   r   r   r   r/   F       r/   c                   @   s&   e Zd Zg dZdddZdd ZdS )RetryOnHttpStatusCondition)i  i  i  i  Nc                 C   s   |r|| _ d S | j| _ d S r#   )retryable_http_status_list"DEFAULT_RETRYABLE_HTTP_STATUS_LIST)r   rB   r   r   r   r*   r   s   
z#RetryOnHttpStatusCondition.__init__c                 C   s&   |j | jv rtd|j  tjS tjS )Nz3Retryable HTTP error occurred. HTTP status code: %s)http_status_coderB   r,   r-   r   r   r   r   r   r   r   r   x   s   z'RetryOnHttpStatusCondition.should_retryr#   )r   r   r   rC   r*   r   r   r   r   r   rA   l   s    
rA   c                   @   r$   )RetryOnApiConditionc                 C   r0   r#   r1   r2   r   r   r   r*      r3   zRetryOnApiCondition.__init__c                 C   s6   |j }td|| j}t|tr| |v rtjS tjS )NRetryableAPIs)	r6   r   r   r8   r<   get_action_namer   r   r   r   r   r   retryable_apisr   r   r   r      s
   z RetryOnApiCondition.should_retryNr.   r   r   r   r   rE      r@   rE   c                   @   r$   )"RetryOnApiWithClientTokenConditionc                 C   r0   r#   r1   r2   r   r   r   r*      r3   z+RetryOnApiWithClientTokenCondition.__init__c                 C   s<   |j }td|| j}t|tr| |v rtjtjB S tj	S )NRetryableAPIsWithClientToken)
r6   r   r   r8   r<   rG   r   r   r!   r   rH   r   r   r   r      s   z/RetryOnApiWithClientTokenCondition.should_retryNr.   r   r   r   r   rJ      r@   rJ   c                   @   r$   )AndRetryConditionc                 C   r0   r#   
conditionsr   rN   r   r   r   r*      r3   zAndRetryCondition.__init__c                 C   s$   t j}| jD ]	}|||O }q|S r#   )r   r   rN   r   )r   r   	retryable	conditionr   r   r   r      s   
zAndRetryCondition.should_retryNr.   r   r   r   r   rL      r@   rL   c                   @   r$   )OrRetryConditionc                 C   r0   r#   rM   rO   r   r   r   r*      r3   zOrRetryCondition.__init__c                 C   s^   t j}t j}t j}|t jO }|t jO }| jD ]}||}|||@ O }||t j@ M }q||B S r#   )r   r   r   r   r    r!   rN   r   )r   r   rP   no_retry_flagmaskrQ   retr   r   r   r      s   



zOrRetryCondition.should_retryNr.   r   r   r   r   rR      r@   rR   c                   @   r$   )MixedRetryConditionc                 C   s@   t |  tt|tt|t|gtt|t gg| _	d S r#   )
r   r*   rL   r%   rR   rE   rJ   r/   rA   _inner_condition)r   r&   r   r   r   r   r*      s   
zMixedRetryCondition.__init__c                 C   s   | j |S r#   )rW   r   r   r   r   r   r      s   z MixedRetryCondition.should_retryNr.   r   r   r   r   rV      s    rV   c                   @   s"   e Zd ZdZdZdZdddZdS )DefaultConfigRetryCondition   zretry_config.jsonNc                 C   s8   | j stj| j| _ |d u r| j}t| || j  d S r#   )_loaded_retry_configaliyunsdkcoreutils_load_json_from_data_dirRETRY_CONFIG_FILEDEFAULT_MAX_RETRY_TIMESrV   r*   r)   r   r   r   r*      s   z$DefaultConfigRetryCondition.__init__r#   )r   r   r   r_   r^   rZ   r*   r   r   r   r   rX      s
    rX   )r   loggingaliyunsdkcore.utilsr[   aliyunsdkcore.utils.validationr\   r'   &aliyunsdkcore.acs_exception.exceptionsr   r   &aliyunsdkcore.acs_exception.error_codeacs_exceptionr:   	getLoggerr   r,   r   objectr   r"   r%   r/   rA   rE   rJ   rL   rR   rV   rX   r   r   r   r   <module>   s&   
	&