o
    i+T                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl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 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 d dlmZ d dl m!  m"Z" d dl#m$Z$ d dl%m&Z& d dl'Zd dl(Zd dl)Zd dl*m+Z+ d dl*m,Z, d dlm-Z- d dlm.Z. d dl/m0Z0 	 dZ1dZ2dZ3ej45dZ6e7e8Z9G dd dZ:dS )    N)	urlencode)codes)ClientException)ServerException)
error_code	error_msg)HttpResponse)
AcsRequest)format_type)SignerFactory)CommonRequest)ResolveEndpointRequest)DefaultEndpointResolver)RetryCondition)RetryPolicyContext)CaseInsensitiveDict)OrderedDict)compat)Session)HTTPAdapter
      ztimeout_config.jsonc                   @   s  e Zd ZdZ																	dXd	d
Zdd Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zed%d& Zed'd( Zd)d* Zd+d, Zd-d. Zed/d0 Zd1d2 Zd3d4 Z	dYd5d6ZdYd7d8ZdYd9d:Zd;d< Zd=d> Zd?d@ Z dAdB Z!dCdD Z"edEdF Z#dGdH Z$dIdJ Z%dKdL Z&dMdN Z'dOdP Z(dQdR Z)e*j+dSddfdTdUZ,e*j+dSfdVdWZ-dS )Z	AcsClientz9%(thread)d %(asctime)s %(name)s %(levelname)s %(message)sNcn-hangzhouTP     Fr   c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _i | _	|| _
|||
|||d}t||| j|| _t| | _t | _| jdtt| | jdtt| | jr]tj| j d| _ntj| _|| _dS )a  
        constructor for AcsClient
        :param ak: String, access key id
        :param secret: String, access key secret
        :param region_id: String, region id
        :param auto_retry: Boolean
        :param max_retry_time: Number
        :param pool_size:
            In a multithreaded environment,
            you should set the maxsize of the pool to a higher number,
            such as the number of threads.
        :return:
        )aksecretpublic_key_idprivate_keysession_period
credentialzhttps://zhttp://)max_retry_timesN)_max_retry_num_auto_retry_ak_secret
_region_id_user_agent_port_connect_timeout_read_timeout_extra_user_agent_verifyr   
get_signer_implementation_of_do_action_signerr   _endpoint_resolverr   sessionmountr   DEFAULT_POOL_CONNECTIONSretry_policyget_default_retry_policy_retry_policyNO_RETRY_POLICYproxy)selfr   r   	region_id
auto_retrymax_retry_time
user_agentportconnect_timeouttimeoutr   r   r    r!   debugverify	pool_sizer9    rE   H/home/ubuntu/.local/lib/python3.10/site-packages/aliyunsdkcore/client.py__init__M   s>   "



zAcsClient.__init__c                 C      | j S Nr'   r:   rE   rE   rF   get_region_id      zAcsClient.get_region_idc                 C   rH   rI   )r%   rK   rE   rE   rF   get_access_key   rM   zAcsClient.get_access_keyc                 C   rH   rI   )r&   rK   rE   rE   rF   get_access_secret   rM   zAcsClient.get_access_secretc                 C   rH   rI   r$   rK   rE   rE   rF   is_auto_retry   rM   zAcsClient.is_auto_retryc                 C   rH   rI   r#   rK   rE   rE   rF   get_max_retry_num   rM   zAcsClient.get_max_retry_numc                 C   rH   rI   r(   rK   rE   rE   rF   get_user_agent   rM   zAcsClient.get_user_agentc                 C   rH   rI   r-   rK   rE   rE   rF   
get_verify   rM   zAcsClient.get_verifyc                 C   
   || _ d S rI   rJ   )r:   regionrE   rE   rF   set_region_id      
zAcsClient.set_region_idc                 C   rX   rI   rR   )r:   numrE   rE   rF   set_max_retry_num   r[   zAcsClient.set_max_retry_numc                 C   
   || _ dS )zv
        set whether or not the client perform auto-retry
        :param flag: Booleans
        :return: None
        NrP   )r:   flagrE   rE   rF   set_auto_retry      
zAcsClient.set_auto_retryc                 C   r^   )zu
        User agent set to client will overwrite the request setting.
        :param agent:
        :return:
        NrT   )r:   agentrE   rE   rF   set_user_agent   ra   zAcsClient.set_user_agentc                 C   rX   rI   rV   )r:   rC   rE   rE   rF   
set_verify   r[   zAcsClient.set_verifyc                 C   s   | j ||i d S rI   )r,   update)r:   keyvaluerE   rE   rF   append_user_agent   s   zAcsClient.append_user_agentc                  C   s    ddt  t  t  f } | S )Nz%s (%s %s;%s)AlibabaCloud)platformsystemreleasemachine)baserE   rE   rF   user_agent_header   s   zAcsClient.user_agent_headerc                  C   sF   t  } t | d< tdj| d< tdt t g ddj| d< t| S )NPythonaliyunsdkcoreCorez+aliyunsdkcore.vendored.requests.__version__)vendoredrequests__version__r   zpython-requests)r   rj   python_version
__import__ru   globalslocalsr   )default_agentrE   rE   rF   default_user_agent   s   
zAcsClient.default_user_agentc                 C   s>   i }|   d ur|d|   i t|S || j t|S )Nclient)rU   re   r,   r   )r:   client_user_agentrE   rE   rF   r}      s   zAcsClient.client_user_agentc                 C   rH   rI   )r)   rK   rE   rE   rF   get_port   rM   zAcsClient.get_portc                 C   s   d S rI   rE   rK   rE   rE   rF   get_location_service   s   zAcsClient.get_location_servicec                 C   sF   | d u r|S |d u r| S |   }| D ]\}}|| vr |||< q|S rI   )copyitems)rz   extra_agentr>   rf   rg   rE   rE   rF   merge_user_agent   s   zAcsClient.merge_user_agentc                 C   s   | j r
| j   d S d S rI   )r2   closerK   rE   rE   rF   __del__   s   zAcsClient.__del__c                 C   sR   |   }| }|d u r|S |d u r|S |D ]}||v r!|| q|| |S rI   )r}   request_user_agentpopre   )r:   requestclient_agentrequest_agentrf   rE   rE   rF   handle_extra_agent   s   

zAcsClient.handle_extra_agentc                 C   s  |  }|rC| d}|rtj|v rt|}|| n4|r3tj|v r3t	j
j|}|| n t|}|| |tj n| rSd| vrS|tj | }	t|tr`|  |d u rg| jn|}
| }|
| j|\}}|| |  }| |}|  }| ||}| D ]\}}|d||f 7 }q||d< d|d< | }t |||	||| | j!||| " | j#| j$d}|r||d| d |S )NzContent-Typez %s/%sz
User-Agentzpython/2.0.0zx-sdk-client)read_timeoutr@   rC   r2   r9   utf-8)%get_body_paramsget_headersgetr
   APPLICATION_JSONjsondumpsset_contentAPPLICATION_XMLrq   utilsparameter_helperto_xmlr   set_content_typeAPPLICATION_FORMget_contentAPPLICATION_OCTET_STREAM
get_method
isinstancer   trans_to_acs_requestr0   signr'   re   ro   r   r{   r   r   get_protocol_typer   r)   rW   r2   r9   )r:   endpointr   r   r@   specific_signerbody_paramscontent_typebodymethodsignerheadersigned_headerurlrn   r   rz   r>   rf   rg   protocolresponserE   rE   rF   _make_http_response  s^   




zAcsClient._make_http_responsec                 C   sN   t |tsttjtd|dd |jr|j}n| 	|}| 
|||S )NSDK_INVALID_REQUESTzAccept-Encodingidentity)r   r	   r   r   r   r   get_msg
add_headerr   _resolve_endpoint_handle_retry_and_timeout)r:   r   r   r   rE   rE   rF   r/   A  s   

z&AcsClient._implementation_of_do_actionc                 C   s*   t dt | ||\}}}}|||fS )Nz2implementation_of_do_action() method is deprecatedwarningswarnDeprecationWarningr/   )r:   r   r   statusheadersr   	exceptionrE   rE   rF   implementation_of_do_actionQ  s   
z%AcsClient.implementation_of_do_actionc                 C   sF   t |drt |dr| }|s!tjj }|| d S d S d S d S )Nset_ClientTokenget_ClientToken)hasattrr   rq   r   r   get_uuidr   )r:   r   client_tokenrE   rE   rF   _add_request_client_tokenZ  s   z#AcsClient._add_request_client_tokenc                 C   sx   |j r|j S | jr| jS | d u rtS d|  | | }t	|t
}|d u r/tS tjj|d t|tS )Nz"{0}"."{1}"."{2}"rA   )_request_read_timeoutr+   get_productDEFAULT_READ_TIMEOUTformatlowerget_versionget_action_namejmespathsearch_api_timeout_config_datarq   r   
validationassert_integer_positivemax)r:   r   pathrA   rE   rE   rF   _get_request_read_timeoutb  s   
z#AcsClient._get_request_read_timeoutc                 C   s   |j r|j S | jr| jS tS rI   )_request_connect_timeoutr*   DEFAULT_CONNECTION_TIMEOUT)r:   r   rE   rE   rF   _get_request_connect_timeoutw  s
   z&AcsClient._get_request_connect_timeoutc                 C   s   t |d dd }| j|tj@ r| | | |}| |}d}	 | |||||\}}	}
}t ||||}| j|}|tj	@ rBnt
d| | ||_| j|}t|d  |d7 }q"t|trg|||	|
|fS )Nr   Tz$Retry needed. Request:%s Retries :%dg     @@   )r   r7   should_retryr   SHOULD_RETRY_WITH_CLIENT_TOKENr   r   r   _handle_single_requestNO_RETRYloggerrB   r   	retryablecompute_delay_before_next_retrytimesleepr   r   )r:   r   r   r   retry_policy_contextrequest_read_timeoutrequest_connect_timeoutretriesr   r   r   r   r   time_to_sleeprE   rE   rF   r     s<   





z#AcsClient._handle_retry_and_timeoutc              
   C   s   |  |||||}t| }|dd  td| || z	| \}}	}
W n3 t	y\ } z't
tjtd| }d|tj|f }tt| d d d |fW  Y d }~S d }~ww | ||
||j}||	|
|fS )NAccessKeyIdz3Request received. Product:%s Endpoint:%s Params: %sz%sz=HttpError occurred. Host:%s SDK-Version:%s ClientException:%s)r   r   deepcopyget_query_paramsr   r   rB   r   get_response_objectIOErrorr   r   SDK_HTTP_ERRORr   ensure_stringrq   ru   error_get_server_exceptionstring_to_sign)r:   r   r   r   r@   r   http_responseparamsr   r   r   er   msgrE   rE   rF   r     s*   
z AcsClient._handle_single_requestc                 C   sz   t j}td| f }zt| }d|v r|d }d|v r&|d }W ||fS W ||fS  ty<   td|  Y ||fS w )NzServerResponseBody: %sCodeMessage4Failed to parse response as json format. Response:%s)	r   SDK_UNKNOWN_SERVER_ERRORr   r   r   loads
ValueErrorr   warning)response_bodyerror_code_to_returnerror_message_to_returnbody_objrE   rE   rF   $_parse_error_info_from_response_body  s   

z.AcsClient._parse_error_info_from_response_bodyc              
   C   s   d }zt |d}|d}W n tttfy#   td| Y nw |t	j
k s.|t	jkrh| |d\}}|t	jkrN|dkrN||dd krNd}d}t||||d	}	d
|tj|	f }
tt|
 |	S d S )Nr   	RequestIdr   SignatureDoesNotMatch:r   InvalidAccessKeySecretzTThe AccessKeySecret is incorrect. Please check your AccessKeyId and AccessKeySecret.)http_status
request_idzCServerException occurred. Host:%s SDK-Version:%s ServerException:%s)r   r   decoder   r   	TypeErrorAttributeErrorr   r   r   OKMULTIPLE_CHOICESr   BAD_REQUESTsplitr   rq   ru   r   r   r   )r:   r  r   r   r   r  r   server_error_codeserver_error_messager   r   rE   rE   rF   r     s6   zAcsClient._get_server_exceptionc                 C   s:   | d | |\}}}}|r|td| | |S )NJSONz/Response received. Product:%s Response-body: %s)set_accept_formatr/   r   rB   r   r:   acs_requestr   r   r   r   rE   rE   rF   do_action_with_exception  s   
z"AcsClient.do_action_with_exceptionc                 C   s   | j rtjj| j dd |jrtjj|jdd |jr'tjj|jdd t| j | |	 |
 }|j|_|j|_|j|_|j|_| j|S )Nr;   z^[a-zA-Z0-9_-]+$suffixnetwork)r'   rq   r   r   validate_patternproduct_suffixrequest_networkr   r   get_location_service_codeget_location_endpoint_typeendpoint_mapendpoint_regionalr1   resolve)r:   r   resolve_requestrE   rE   rF   r     s.   zAcsClient._resolve_endpointc                 C   s"   t dt | |\}}}}|S )NzPdo_action() method is deprecated, please use do_action_with_exception() instead.r   r  rE   rE   rF   	do_action  s   zAcsClient.do_actionc                 C   s
   |  |S rI   )r   )r:   r  rE   rE   rF   get_response  r[   zAcsClient.get_responsec                 C   s   | j ||| d S rI   )r1   put_endpoint_entry)r:   r;   product_coder   rE   rE   rF   add_endpoint   s   zAcsClient.add_endpointrq   c                 C   sX   t |}|| t |}|| |d u r| j}t |}|| || d S rI   )logging	getLoggersetLevelStreamHandler
LOG_FORMAT	FormattersetFormatter
addHandler)r:   	log_levellogger_namestreamformat_stringlogch	formatterrE   rE   rF   set_stream_logger$  s   





zAcsClient.set_stream_loggerc                 C   sL   t |}|| t |}|| t | j}|| || d S rI   )r"  r#  r$  FileHandlerr'  r&  r(  r)  )r:   r   r*  r+  r.  fhr0  rE   rE   rF   set_file_logger0  s   




zAcsClient.set_file_logger)NNr   TNNr   NNNNr   NFNr   NrI   ).__name__
__module____qualname__r&  rG   rL   rN   rO   rQ   rS   rU   rW   rZ   r]   r`   rc   rd   rh   staticmethodro   r{   r}   r~   r   r   r   r   r   r/   r   r   r   r   r   r   r   r   r  r   r  r  r!  r"  DEBUGr1  r4  rE   rE   rE   rF   r   J   s    
E
	

	


:
		(
 
r   );r   r   r   r"  r   r   rj   sysrq   -aliyunsdkcore.vendored.six.moves.urllib.parser   aliyunsdkcore.vendored.requestsr   &aliyunsdkcore.acs_exception.exceptionsr   r   aliyunsdkcore.acs_exceptionr   r    aliyunsdkcore.http.http_responser   aliyunsdkcore.requestr	   aliyunsdkcore.httpr
   )aliyunsdkcore.auth.signers.signer_factoryr   r   0aliyunsdkcore.endpoint.resolver_endpoint_requestr   0aliyunsdkcore.endpoint.default_endpoint_resolverr    aliyunsdkcore.retry.retry_policyretryr5   #aliyunsdkcore.retry.retry_conditionr   (aliyunsdkcore.retry.retry_policy_contextr   aliyunsdkcore.utils$aliyunsdkcore.utils.parameter_helperaliyunsdkcore.utils.validation*aliyunsdkcore.vendored.requests.structuresr   r   r   r   (aliyunsdkcore.vendored.requests.adaptersr   r   r   r4   r   _load_json_from_data_dirr   r#  r5  r   r   rE   rE   rE   rF   <module>   sN   
