o
    iC                     @   s  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 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Z d dlmZ 	 dZdZejadd Zdd Z ee j!G dd dZ"G dd de"Z#G dd de"Z$G dd de"Z%dS )    N)iterkeys)	iteritems)add_metaclass)protocol_type)method_type)format_type)rpc_signature_composer)roa_signature_composer)md5_sum)	sha_hmac1)
exceptions)
error_code)ensure_string)CaseInsensitiveDictRPCROAc                 C   s*   | t jks
| t jkr| ad S ttjd)Nz4Invalid 'protocol_type', should be 'http' or 'https')r   HTTPHTTPS_default_protocol_typer   ClientExceptionr   SDK_INVALID_PARAMS)user_protocol_type r   I/home/ubuntu/.local/lib/python3.10/site-packages/aliyunsdkcore/request.pyset_default_protocol_type0   s   r   c                   C   s   t S N)r   r   r   r   r   get_default_protocol_type<   s   r   c                   @   s  e Zd ZdZ							dZd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d d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&e'j(dJdK Z)e'j(dLdM Z*e'j(dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dS )[
AcsRequestzV
    Acs request base class. This class wraps up common parameters for a request.
    NopenAPIc	           	      C   s   || _ || _|| _|| _| jdu rt| _|| _i | _|| _i | _|dur*| 	d| |dur4| 	d| i | _
d| _d| _d| _|| _|| _| 	dd d| _i | _d| _d| _d| _d| _d| _d| _d| _dS )z

        :param product:
        :param version:
        :param action_name:
        :param params:
        :param resource_owner_account:
        :param protocol_type:
        :param accept_format:
        :return:
        Nx-acs-actionx-acs-versionx-sdk-invoke-typenormal public)_version_product_action_name_protocol_typer   _accept_format_params_method_header
add_header_body_params_uri_pattern_uri_params_content_location_service_code_location_endpoint_typeendpoint_extra_user_agentstring_to_sign_request_connect_timeout_request_read_timeoutrequest_networkproduct_suffixendpoint_mapendpoint_regional)	selfproductversionaction_namelocation_service_codelocation_endpoint_typeaccept_formatr   methodr   r   r   __init__F   s<   

zAcsRequest.__init__c                 C      || j |< d S r   r*   r=   kvr   r   r   add_query_paramx      zAcsRequest.add_query_paramc                 C   rF   r   r.   rH   r   r   r   add_body_params{   rL   zAcsRequest.add_body_paramsc                 C      | j S r   rM   r=   r   r   r   get_body_params~      zAcsRequest.get_body_paramsc                 C   rO   r   r/   rP   r   r   r   get_uri_pattern   rR   zAcsRequest.get_uri_patternc                 C   rO   r   r0   rP   r   r   r   get_uri_params   rR   zAcsRequest.get_uri_paramsc                 C   rO   r   r&   rP   r   r   r   get_product   rR   zAcsRequest.get_productc                 C   rO   r   )r%   rP   r   r   r   get_version   rR   zAcsRequest.get_versionc                 C   rO   r   )r'   rP   r   r   r   get_action_name   rR   zAcsRequest.get_action_namec                 C   rO   r   r)   rP   r   r   r   get_accept_format   rR   zAcsRequest.get_accept_formatc                 C   rO   r   r(   rP   r   r   r   get_protocol_type   rR   zAcsRequest.get_protocol_typec                 C   rO   r   rG   rP   r   r   r   get_query_params   rR   zAcsRequest.get_query_paramsc                 C   rO   r   r+   rP   r   r   r   
get_method   rR   zAcsRequest.get_methodc                 C   
   || _ d S r   rS   )r=   patternr   r   r   set_uri_pattern      
zAcsRequest.set_uri_patternc                 C   rb   r   rU   r=   paramsr   r   r   set_uri_params   re   zAcsRequest.set_uri_paramsc                 C   rb   r   r`   )r=   rD   r   r   r   
set_method   re   zAcsRequest.set_methodc                 C   rb   r   rW   r=   r>   r   r   r   set_product   re   zAcsRequest.set_productc                 C      || j d< || _d S Nr    )r,   r%   )r=   r?   r   r   r   set_version      

zAcsRequest.set_versionc                 C   rl   )Nr   )r,   r'   )r=   r@   r   r   r   set_action_name   ro   zAcsRequest.set_action_namec                 C   rb   r   r[   )r=   rC   r   r   r   set_accept_format   re   zAcsRequest.set_accept_formatc                 C   rb   r   r]   )r=   r   r   r   r   set_protocol_type   re   zAcsRequest.set_protocol_typec                 C   rb   r   rG   rf   r   r   r   set_query_params   re   zAcsRequest.set_query_paramsc                 C   rb   r   rM   )r=   body_paramsr   r   r   set_body_params   re   zAcsRequest.set_body_paramsc                 C   
   || _ dS )z=

        :param content: ByteArray
        :return:
        Nr1   )r=   contentr   r   r   set_content      
zAcsRequest.set_contentc                 C   rO   )z%

        :return: ByteArray
        rw   rP   r   r   r   get_content      zAcsRequest.get_contentc                 C   rO   )z 

        :return: Dict
        r,   rP   r   r   r   get_headers   r|   zAcsRequest.get_headersc                 C   rv   )z8

        :param headers: Dict
        :return:
        Nr}   )r=   headersr   r   r   set_headers   rz   zAcsRequest.set_headersc                 C   rF   r   r}   rH   r   r   r   r-      rL   zAcsRequest.add_headerc                 C      |  d| d S )N
User-Agentr-   )r=   agentr   r   r   set_user_agent      zAcsRequest.set_user_agentc                 C   s   | j ||i d S r   )r5   update)r=   keyvaluer   r   r   append_user_agent   s   zAcsRequest.append_user_agentc                 C   sD   i }d|   v r|d|   di t|S || j t|S )Nr   request)r~   r   getr5   r   )r=   request_user_agentr   r   r   r      s   zAcsRequest.request_user_agentc                 C   rb   r   r2   )r=   rA   r   r   r   set_location_service_code   re   z$AcsRequest.set_location_service_codec                 C   rO   r   r   rP   r   r   r   get_location_service_code   rR   z$AcsRequest.get_location_service_codec                 C   rO   r   )r3   rP   r   r   r   get_location_endpoint_type   rR   z%AcsRequest.get_location_endpoint_typec                 C   r   )NzContent-Typer   )r=   content_typer   r   r   set_content_type   r   zAcsRequest.set_content_typec                 C      d S r   r   rP   r   r   r   	get_style      zAcsRequest.get_stylec                 C   r   r   r   r=   	region_idaksecretr   r   r   get_url   r   zAcsRequest.get_urlc                 C   r   r   r   r   r   r   r   get_signed_header  r   zAcsRequest.get_signed_headerc                 C   rb   r   r4   )r=   r4   r   r   r   set_endpoint  re   zAcsRequest.set_endpointc                 C   rO   r   r7   rP   r   r   r   get_connect_timeout
  rR   zAcsRequest.get_connect_timeoutc                 C   rb   r   r   )r=   connect_timeoutr   r   r   set_connect_timeout  re   zAcsRequest.set_connect_timeoutc                 C   rO   r   r8   rP   r   r   r   get_read_timeout  rR   zAcsRequest.get_read_timeoutc                 C   rb   r   r   )r=   read_timeoutr   r   r   set_read_timeout  re   zAcsRequest.set_read_timeout)NNNr   NNN)1__name__
__module____qualname____doc__rE   rK   rN   rQ   rT   rV   rX   rY   rZ   r\   r^   r_   ra   rd   rh   ri   rk   rn   rp   rq   rr   rs   ru   ry   r{   r~   r   r-   r   r   r   r   r   r   r   abcabstractmethodr   r   r   r   r   r   r   r   r   r   r   r   r   @   sn    
2


r   c                   @   sF   e Zd ZdZddddefddZdd Zdd	 Zd
d ZdddZ	dS )
RpcRequestz5
    Class to compose an RPC style request with.
    Nr   c	           	      C   s,   t | |||||||tj	 t| _|| _d S r   )r   rE   mtGET	STYLE_RPC_style_signer)	r=   r>   r?   r@   rA   rB   formatprotocolsignerr   r   r   rE     s   


zRpcRequest.__init__c                 C   rO   r   r   rP   r   r   r   r   3  rR   zRpcRequest.get_stylec                 C   s<   |   }|d u r
i }|  |d< |  |d< |  |d< |S )NVersionActionFormat)r_   rY   rZ   r\   r=   
req_paramsr   r   r   _get_sign_params6  s   zRpcRequest._get_sign_paramsc              	   C   sR   t |  }dt|vr||d< t||||  |  |  | j\}}|| _	|S )NRegionId)
dictr   r   
rpc_signerget_signed_urlr\   ra   rQ   r   r6   )r=   r   access_key_idaccess_key_secretsign_paramsurlr6   r   r   r   r   @  s   zRpcRequest.get_urlc                 C   s:   i }t |  D ]\}}|ds|dr|||< q|S )Nzx-acs-zx-sdk-)r   r~   
startswith)r=   r   r   r   r   	headerKeyheaderValuer   r   r   r   O  s   zRpcRequest.get_signed_header)NNN)
r   r   r   r   r   rE   r   r   r   r   r   r   r   r   r     s    	

r   c                   @   sb   e Zd ZdZ							dddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dddZdS )
RoaRequestz5
    Class to compose an ROA style request with.
    Nr   c                 C   sF   t | |||||tj|
|	 t| _|| _|dur|| _|| _|	| _	dS )a<  

        :param product: String, mandatory
        :param version: String, mandatory
        :param action_name: String, mandatory
        :param method: String
        :param headers: Dict
        :param uri_pattern: String
        :param path_params: Dict
        :param protocol: String
        :return:
        N)
r   rE   ftRAW	STYLE_ROAr   r+   r,   r/   _path_params)r=   r>   r?   r@   rA   rB   rD   r   uri_patternpath_paramsr   r   r   r   rE   \  s"   

zRoaRequest.__init__c                 C   rO   )z"

        :return: String
        r   rP   r   r   r   r     r|   zRoaRequest.get_stylec                 C   rO   r   r   rP   r   r   r   get_path_params  rR   zRoaRequest.get_path_paramsc                 C   rb   r   r   r=   r   r   r   r   set_path_params  re   zRoaRequest.set_path_paramsc                 C      | j d u ri | _ || j |< d S r   r   rH   r   r   r   add_path_param     
zRoaRequest.add_path_paramc                 C   s(   |   }|d u r
i }| d|   |S rm   )r_   r-   rY   r   r   r   r   r     s
   zRoaRequest._get_sign_paramsc                 C   s   t |  }|  dur| dt|   d| vr(||d< | dt| t|||| 	 | 
  |  |  |  \}}|| _|S )z
        Generate signed header
        :param region_id: String
        :param ak: String
        :param secret: String
        :return: Dict
        NzContent-MD5r   zx-acs-region-id)r   r   r{   r-   r
   keysstr
roa_signerget_signature_headersr\   r~   copyrT   r   ra   r6   )r=   r   r   r   r   signed_headerssign_to_stringr   r   r   r     s(   
	zRoaRequest.get_signed_headerc                 C   s:   t |  }d| vr||d< t|  ||  }|S )zm
        Compose request url without domain
        :param region_id: String
        :return: String
        r   )r   r_   r   r   r   rT   r   )r=   r   r   r   r   r   r   r   r   r     s   zRoaRequest.get_url)Nr   NNNNN)NN)r   r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r   r   W  s"    	
)
r   c                       s   e Zd Z		d! f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dd Zdd  Z  ZS )"CommonRequestNr   c                    s`   t t| ||| d | _|| _|| _|| _|| _|| _|| _	t
| _| dd d | _d| _d S )Nr!   commonr   )superr   rE   r   r4   r%   r'   r/   r&   r3   r   r   r-   r   r+   )r=   domainr?   r@   r   r>   rB   	__class__r   r   rE     s   
zCommonRequest.__init__c                 C   rO   r   r   rP   r   r   r   r     rR   zCommonRequest.get_path_paramsc                 C   rb   r   r   r   r   r   r   r     re   zCommonRequest.set_path_paramsc                 C   r   r   r   rH   r   r   r   r     r   zCommonRequest.add_path_paramc                 C   rb   r   r   )r=   r   r   r   r   
set_domain  re   zCommonRequest.set_domainc                 C   rO   r   r   rP   r   r   r   
get_domain  rR   zCommonRequest.get_domainc                 C   rb   r   rS   )r=   r   r   r   r   rd     re   zCommonRequest.set_uri_patternc                 C   rO   r   rS   rP   r   r   r   rT     rR   zCommonRequest.get_uri_patternc                 C   rb   r   rW   rj   r   r   r   rk     re   zCommonRequest.set_productc                 C   rO   r   rW   rP   r   r   r   rX     rR   zCommonRequest.get_productc                 C   s   | j s
ttjd| js| jsttjd| js$| js$ttjd| jrAt	| _
t|  |  |  |  d| _|   d S t| _
t|  |  |  |  d| _|   d S )Nz4common params [version] is required, cannot be emptyz6At least one of [action] and [uri_pattern] has a valuez7At least one of [domain] and [product_name] has a value)r>   r?   r@   rB   )r%   r   r   r   r   r'   r/   r4   r&   r   r   r   rX   rY   rZ   r   r   fill_paramsr   r   rP   r   r   r   trans_to_acs_request  s8   z"CommonRequest.trans_to_acs_requestc                 C   rO   r   r   rP   r   r   r   r     rR   zCommonRequest.get_stylec                 C      | j |||S r   )r   r   r   r   r   r   r     r   zCommonRequest.get_urlc                 C   r   r   )r   r   )r=   r   r   r   r   r   r   r     r   zCommonRequest.get_signed_headerc                 C   s   | j |   | j |   |  tkr| j |   | j 	| 
  | j |   | j |   | j |   | j |   | j |   | j |   | j |   | j |   | j |   | j |   d S r   )r   rd   rT   rh   rV   r   r   r   r   ri   ra   rk   rX   rn   rY   rp   rZ   rq   r\   rr   r^   rs   r_   ry   r{   r   r~   r   r   ru   rQ   rP   r   r   r   r   !  s"   zCommonRequest.fill_params)NNNNNr   )r   r   r   rE   r   r   r   r   r   rd   rT   rk   rX   r   r   r   r   r   __classcell__r   r   r   r   r     s$    r   )&r   aliyunsdkcore.vendored.sixr   r   r   aliyunsdkcore.httpr   r   r   r   r   aliyunsdkcore.auth.composerr   r   r	   r   $aliyunsdkcore.utils.parameter_helperr
   aliyunsdkcore.auth.algorithmr   aliyunsdkcore.acs_exceptionr   r   aliyunsdkcore.compatr   *aliyunsdkcore.vendored.requests.structuresr   r   r   r   r   r   r   ABCMetar   r   r   r   r   r   r   r   <module>   s6    W@v