U
    Y+d6!                     @   s   d 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
 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.    )message_from_bytes)MIMEMessage)promise	transform)
AWSRequest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-rdvd7wfc/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   reason1   s    
zAsyncHTTPResponse.reasonc                 C   s
   t | jS r   )reprr   r+   r   r   r   __repr__7   s    zAsyncHTTPResponse.__repr__)N)__name__
__module____qualname____doc__r   r#   r(   r,   propertyr-   r/   r3   r5   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   rB   rA   rC   r   r   r   r   F   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   rE   rD   r    r$   r#   r   r   r   requestL   s    
zAsyncHTTPSConnection.requestc              	   C   s,   t | j}| j| j| j|| j| j| jddS )NF)rE   r$   r    connect_timeoutrequest_timeoutZvalidate_cert)r   r$   r	   rD   rE   r    rA   )r   r$   r   r   r   
getrequestY   s    
  zAsyncHTTPSConnection.getrequestc                 C   s&   |   }|t| j| | j|S r   )rK   Zthenr   ResponserC   Zadd_request)r   callbackrH   r   r   r   getresponse_   s    z AsyncHTTPSConnection.getresponsec                 C   s   d S r   r   )r   levelr   r   r   set_debugleveld   s    z#AsyncHTTPSConnection.set_debuglevelc                 C   s   d S r   r   r+   r   r   r   connectg   s    zAsyncHTTPSConnection.connectc                 C   s   d S r   r   r+   r   r   r   closej   s    zAsyncHTTPSConnection.closec                 C   s   || _ || _d S r   )rE   rD   )r   rE   rD   r   r   r   
putrequestm   s    zAsyncHTTPSConnection.putrequestc                 C   s   | j ||f d S r   )r$   append)r   headervaluer   r   r   	putheaderq   s    zAsyncHTTPSConnection.putheaderc                 C   s   d S r   r   r+   r   r   r   
endheaderst   s    zAsyncHTTPSConnection.endheadersc                 C   s    | j r|  j |7  _ n|| _ d S r   )r    )r   datar   r   r   sendw   s    zAsyncHTTPSConnection.sendc                 C   s   d|   dS )Nz<AsyncHTTPConnection: >)rK   r+   r   r   r   r5   }   s    zAsyncHTTPSConnection.__repr__)Nr@   N)NN)N)r6   r7   r8   r9   r	   r   rL   rE   rD   r    Zdefault_portsr   rH   rK   rN   rP   rQ   rR   rS   rW   rX   rZ   r5   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\   rC   r"   r   r   r   r      s    zAsyncConnection.__init__c                 C   s   t | jdS )N)rC   )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rM   )
r   r^   callablerE   rD   r    r$   rH   urlrN   )r   rH   ZsenderrM   connr   r   r   _mexe   s    
  zAsyncConnection._mexe)N)NN)r6   r7   r8   r9   r   r^   rd   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\   rC   Zhttp_client_paramsr"   	__class__r   r   r      s
    z AsyncAWSQueryConnection.__init__c                 C   sz   |  }|r||d< | jj}d}d|i}	| dkr@d}d|i}	tf ||d|	}
|j||
|d |
 }| j||d	S )
NActionstandardrY   r%   Z
presignurlparams)rE   rb   )signing_typer`   )copyr\   Z_request_signerlowerr   signpreparerd   )r   	operationZparams_rD   verbrM   rl   Zsignerrm   Zparam_payloadrH   prepared_requestr   r   r   make_request   s    z$AsyncAWSQueryConnection.make_requestr<   POSTc                 C   s&   | j ||||t| j||p| ||dS r_   )ru   r   _on_list_ready)r   rr   rl   markersrD   parentrs   rM   r   r   r   get_list   s          z AsyncAWSQueryConnection.get_listr;   c              
   C   s$   | j ||||t| j||p| |dS r_   )ru   r   _on_obj_readyr   rr   rl   rD   ry   rs   rM   r   r   r   
get_object   s          z"AsyncAWSQueryConnection.get_objectc              
   C   s$   | j ||||t| j||p| |dS r_   )ru   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_modelr/   STATUS_CODE_OKr   operation_modelr   STATUS_CODES_TIMEOUTSTATUS_CODES_SERVER_ERRORS_for_statusr#   )r   ry   rx   rr   r   r   _parsedr   r   r   rw      s    
 

z&AsyncAWSQueryConnection._on_list_readyc                 C   sD   | j jj}|j| jkr0t|||j\}}|S | ||	 d S r   )
r\   r   r   r/   r   r   r   r   r   r#   )r   ry   rr   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   r/   r   r   r   r   r.   r   r#   )r   ry   rr   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   r/   r3   )r   r   r    contextr   r   r   r   
  s       z#AsyncAWSQueryConnection._for_status)NN)N)r<   Nrv   N)r<   Nr;   N)r<   Nr;   N)r6   r7   r8   r9   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   ru   rz   r}   r   rw   r{   r~   r   __classcell__r   r   rh   r   re      s6     

	



re   N)r9   emailr   Zemail.mime.messager   Zviner   r   Zkombu.asynchronous.aws.extr   r   Zkombu.asynchronous.httpr   r	   r
   r   __all__r   r   r   re   r   r   r   r   <module>   s   %F