U
    bh"                     @  s   d 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mZmZ ddlmZmZmZ dd	 Zd
ZG dd dZG dd dZG dd dZG dd deZdS )zAmazon AWS Connection.    )annotations)message_from_bytes)MIMEMessage)promise	transform)
AWSRequestget_cert_pathget_response)HeadersRequest
get_clientc                 C  s    d dd | D }t| S )Nz
c                 s  s   | ]}d j | V  qdS )z{}: {}N)format).0h r   E/tmp/pip-unpacked-wheel-earovzxb/kombu/asynchronous/aws/connection.py	<genexpr>   s     z'message_from_headers.<locals>.<genexpr>)joinr   encode)hdrbsr   r   r   message_from_headers   s    r   )AsyncHTTPSConnectionAsyncConnectionc                   @  s^   e Zd ZdZdd Zdd ZdddZd	d
 Zedd Z	edd Z
edd Zdd ZdS )AsyncHTTPResponsezAsync HTTP Response.c                 C  s   || _ d | _d| _d S )N
   )response_msgversion)selfr   r   r   r   __init__   s    zAsyncHTTPResponse.__init__c                 O  s   | j jS N)r   body)r   argskwargsr   r   r   read    s    zAsyncHTTPResponse.readNc                 C  s   | j j||S r!   )r   headersget)r   namedefaultr   r   r   	getheader#   s    zAsyncHTTPResponse.getheaderc                 C  s   t | jj S r!   )listr   r&   itemsr   r   r   r   
getheaders&   s    zAsyncHTTPResponse.getheadersc                 C  s"   | j d krtt|  | _ | j S r!   )r   r   r   r.   r-   r   r   r   msg)   s    
zAsyncHTTPResponse.msgc                 C  s   | j jS r!   )r   coder-   r   r   r   status/   s    zAsyncHTTPResponse.statusc                 C  s   | j jr| j jjS dS )N )r   errormessager-   r   r   r   reason3   s    
zAsyncHTTPResponse.reasonc                 C  s
   t | jS r!   )reprr   r-   r   r   r   __repr__9   s    zAsyncHTTPResponse.__repr__)N)__name__
__module____qualname____doc__r    r%   r*   r.   propertyr/   r1   r5   r7   r   r   r   r   r      s   



r   c                   @  s   e Zd ZdZeZeZdZdZdZ	dddZ
d!d	d
Zd"ddZd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 Zdd  ZdS )$r   zAsync HTTP Connection.GET/NP   i  )httphttps      4@c                 C  s"   g | _ || _|| _|pt | _d S r!   )r&   timeoutstrictr   http_client)r   rD   rC   rE   r   r   r   r    H   s    zAsyncHTTPSConnection.__init__c                 C  sb   || _ || _|d k	rBz
|j}W n tk
r8   || _Y n
X | | _|d k	r^| jt|  d S r!   )	pathmethodr%   AttributeErrorr"   r&   extendr+   r,   )r   rG   rF   r"   r&   r%   r   r   r   requestN   s    
zAsyncHTTPSConnection.requestc              
   C  s2   t | j}| j| j| j|| j| j| jdtddS )NT)rG   r&   r"   connect_timeoutrequest_timeoutZvalidate_certca_certs)r
   r&   r   rF   rG   r"   rC   r   )r   r&   r   r   r   
getrequest[   s    
  zAsyncHTTPSConnection.getrequestc                 C  s&   |   }|t| j| | j|S r!   )rN   Zthenr   ResponserE   Zadd_request)r   callbackrJ   r   r   r   getresponseb   s    z AsyncHTTPSConnection.getresponsec                 C  s   d S r!   r   )r   levelr   r   r   set_debuglevelg   s    z#AsyncHTTPSConnection.set_debuglevelc                 C  s   d S r!   r   r-   r   r   r   connectj   s    zAsyncHTTPSConnection.connectc                 C  s   d S r!   r   r-   r   r   r   closem   s    zAsyncHTTPSConnection.closec                 C  s   || _ || _d S r!   )rG   rF   )r   rG   rF   r   r   r   
putrequestp   s    zAsyncHTTPSConnection.putrequestc                 C  s   | j ||f d S r!   )r&   append)r   headervaluer   r   r   	putheadert   s    zAsyncHTTPSConnection.putheaderc                 C  s   d S r!   r   r-   r   r   r   
endheadersw   s    zAsyncHTTPSConnection.endheadersc                 C  s    | j r|  j |7  _ n|| _ d S r!   )r"   )r   datar   r   r   sendz   s    zAsyncHTTPSConnection.sendc                 C  s   d|   dS )Nz<AsyncHTTPConnection: >)rN   r-   r   r   r   r7      s    zAsyncHTTPSConnection.__repr__)NrB   N)NN)N)r8   r9   r:   r;   r   r   rO   rG   rF   r"   Zdefault_portsr    rJ   rN   rQ   rS   rT   rU   rV   rZ   r[   r]   r7   r   r   r   r   r   =   s&   



r   c                   @  s,   e Zd ZdZd	ddZdd Zd
ddZdS )r   zAsync AWS Connection.Nc                 K  s   || _ |pt | _d S r!   )sqs_connectionr   _httpclient)r   r_   rE   r$   r   r   r   r       s    zAsyncConnection.__init__c                 C  s   t | jdS )N)rE   )r   r`   r-   r   r   r   get_http_connection   s    z#AsyncConnection.get_http_connectionc                 C  s^   |pt  }|  }t|r6|||j|j|j|j| n$||j|j|j|j |j	|d |S )NrP   )
r   ra   callablerG   rF   r"   r&   rJ   urlrQ   )r   rJ   ZsenderrP   connr   r   r   _mexe   s    
  zAsyncConnection._mexe)N)NN)r8   r9   r:   r;   r    ra   rf   r   r   r   r   r      s   
r   c                      s   e Zd ZdZdZdZdZdZdZdZ	dZ
eee	fZeee
fZd fd
d	Zd ddZd!ddZd"ddZd#ddZdd Zdd Zdd Zdd Z  ZS )$AsyncAWSQueryConnectionzAsync AWS Query Connection.   i  iW  i  i  i  i  Nc                   s   |si }t  j||f| d S r!   )superr    )r   r_   rE   Zhttp_client_paramsr$   	__class__r   r   r       s
    z AsyncAWSQueryConnection.__init__c                 C  s   |  }||pi di  |r*||d< | jj}d}	d|i}
| dkrVd}	d|i}
tf ||d|
}|j|||	d	 | }| j	||d
S )NqueryActionstandardr\   r'   zpresign-urlparams)rG   rd   )signing_typerb   )
copyupdater'   r_   Z_request_signerlowerr   signpreparerf   )r   	operationZparams_rF   verbrP   protocol_paramsro   Zsignerrp   Zparam_payloadrJ   prepared_requestr   r   r   make_request   s    z$AsyncAWSQueryConnection.make_requestr>   POSTc	           	      C  s(   | j ||||t| j||p| |||dS N)rP   rx   )rz   r   _on_list_ready)	r   rv   ro   markersrF   parentrw   rP   rx   r   r   r   get_list   s          z AsyncAWSQueryConnection.get_listr=   c              
   C  s&   | j ||||t| j||p| ||dS r|   )rz   r   _on_obj_readyr   rv   ro   rF   r   rw   rP   rx   r   r   r   
get_object   s          z"AsyncAWSQueryConnection.get_objectc              
   C  s&   | j ||||t| j||p| ||dS r|   )rz   r   _on_status_readyr   r   r   r   
get_status   s          z"AsyncAWSQueryConnection.get_statusc                 C  s`   | j jj}|j| jkr0t|||j\}}|S |j| jksH|j| j	krLg S | 
|| d S r!   )r_   metaservice_modelr1   STATUS_CODE_OKr	   operation_modelr   STATUS_CODES_TIMEOUTSTATUS_CODES_SERVER_ERRORS_for_statusr%   )r   r   r~   rv   r   r   _parsedr   r   r   r}      s    
 

z&AsyncAWSQueryConnection._on_list_readyc                 C  sD   | j jj}|j| jkr0t|||j\}}|S | ||	 d S r!   )
r_   r   r   r1   r   r	   r   r   r   r%   )r   r   rv   r   r   r   r   r   r   r   r      s    
 z%AsyncAWSQueryConnection._on_obj_readyc                 C  sF   | j jj}|j| jkr2t|||j\}}|jS | 	||
 d S r!   )r_   r   r   r1   r   r	   r   r   r0   r   r%   )r   r   rv   r   r   Zhttpresr   r   r   r   r     s    
 z(AsyncAWSQueryConnection._on_status_readyc                 C  s$   |sdnd}t d||j|j|S )Nz
Empty bodyz
HTTP ErrorzRequest {}  HTTP {}  {} ({}))	Exceptionr   r1   r5   )r   r   r"   contextr   r   r   r     s       z#AsyncAWSQueryConnection._for_status)NN)NN)r>   Nr{   NN)r>   Nr=   NN)r>   Nr=   NN)r8   r9   r:   r;   r   ZSTATUS_CODE_REQUEST_TIMEOUTZ)STATUS_CODE_NETWORK_CONNECT_TIMEOUT_ERRORZSTATUS_CODE_INTERNAL_ERRORZSTATUS_CODE_BAD_GATEWAYZ%STATUS_CODE_SERVICE_UNAVAILABLE_ERRORZSTATUS_CODE_GATEWAY_TIMEOUTr   r   r    rz   r   r   r   r}   r   r   r   __classcell__r   r   rj   r   rg      s:     
  

	
	

rg   N)r;   
__future__r   emailr   Zemail.mime.messager   Zviner   r   Zkombu.asynchronous.aws.extr   r   r	   Zkombu.asynchronous.httpr
   r   r   r   __all__r   r   r   rg   r   r   r   r   <module>   s   %G