U
    .eZ!                     @  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 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_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-48hrr5dg/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.   r0   r4   r6   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   rC   rB   rD   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   rF   rE   r!   r%   r$   r   r   r   requestN   s    
zAsyncHTTPSConnection.requestc              	   C  s,   t | j}| j| j| j|| j| j| jddS )NF)rF   r%   r!   connect_timeoutrequest_timeoutZvalidate_cert)r	   r%   r
   rE   rF   r!   rB   )r   r%   r   r   r   
getrequest[   s    
  zAsyncHTTPSConnection.getrequestc                 C  s&   |   }|t| j| | j|S r    )rL   Zthenr   ResponserD   Zadd_request)r   callbackrI   r   r   r   getresponsea   s    z AsyncHTTPSConnection.getresponsec                 C  s   d S r    r   )r   levelr   r   r   set_debuglevelf   s    z#AsyncHTTPSConnection.set_debuglevelc                 C  s   d S r    r   r,   r   r   r   connecti   s    zAsyncHTTPSConnection.connectc                 C  s   d S r    r   r,   r   r   r   closel   s    zAsyncHTTPSConnection.closec                 C  s   || _ || _d S r    )rF   rE   )r   rF   rE   r   r   r   
putrequesto   s    zAsyncHTTPSConnection.putrequestc                 C  s   | j ||f d S r    )r%   append)r   headervaluer   r   r   	putheaders   s    zAsyncHTTPSConnection.putheaderc                 C  s   d S r    r   r,   r   r   r   
endheadersv   s    zAsyncHTTPSConnection.endheadersc                 C  s    | j r|  j |7  _ n|| _ d S r    )r!   )r   datar   r   r   sendy   s    zAsyncHTTPSConnection.sendc                 C  s   d|   dS )Nz<AsyncHTTPConnection: >)rL   r,   r   r   r   r6      s    zAsyncHTTPSConnection.__repr__)NrA   N)NN)N)r7   r8   r9   r:   r
   r   rM   rF   rE   r!   Zdefault_portsr   rI   rL   rO   rQ   rR   rS   rT   rX   rY   r[   r6   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]   rD   r#   r   r   r   r      s    zAsyncConnection.__init__c                 C  s   t | jdS )N)rD   )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rN   )
r   r_   callablerF   rE   r!   r%   rI   urlrO   )r   rI   ZsenderrN   connr   r   r   _mexe   s    
  zAsyncConnection._mexe)N)NN)r7   r8   r9   r:   r   r_   re   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]   rD   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standardrZ   r&   Z
presignurlparams)rF   rc   )signing_typera   )copyr]   Z_request_signerlowerr   signpreparere   )r   	operationZparams_rE   verbrN   rm   Zsignerrn   Zparam_payloadrI   prepared_requestr   r   r   make_request   s    z$AsyncAWSQueryConnection.make_requestr=   POSTc                 C  s&   | j ||||t| j||p| ||dS r`   )rv   r   _on_list_ready)r   rs   rm   markersrE   parentrt   rN   r   r   r   get_list   s          z AsyncAWSQueryConnection.get_listr<   c              
   C  s$   | j ||||t| j||p| |dS r`   )rv   r   _on_obj_readyr   rs   rm   rE   rz   rt   rN   r   r   r   
get_object   s          z"AsyncAWSQueryConnection.get_objectc              
   C  s$   | j ||||t| j||p| |dS r`   )rv   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_modelr0   STATUS_CODE_OKr   operation_modelr   STATUS_CODES_TIMEOUTSTATUS_CODES_SERVER_ERRORS_for_statusr$   )r   rz   ry   rs   r   r   _parsedr   r   r   rx      s    
 

z&AsyncAWSQueryConnection._on_list_readyc                 C  sD   | j jj}|j| jkr0t|||j\}}|S | ||	 d S r    )
r]   r   r   r0   r   r   r   r   r   r$   )r   rz   rs   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   r0   r   r   r   r   r/   r   r$   )r   rz   rs   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   r0   r4   )r   r   r!   contextr   r   r   r     s       z#AsyncAWSQueryConnection._for_status)NN)N)r=   Nrw   N)r=   Nr<   N)r=   Nr<   N)r7   r8   r9   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   rv   r{   r~   r   rx   r|   r   r   __classcell__r   r   ri   r   rf      s6     

	



rf   N)r:   
__future__r   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   rf   r   r   r   r   <module>   s   %F