o
    wvXj—#  ã                   @   sü   d Z ddlmZ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lmZmZ ddlZzddlmZ dd	lmZ d
d„ ZW n eyU   ddlmZ dd„ ZY nw dZeG dd„ deƒƒZeG dd„ deƒƒZG dd„ deƒZG dd„ deƒZdS )zAmazon AWS Connection.é    )Úabsolute_importÚunicode_literals)ÚpromiseÚ	transform)Ú
AWSRequestÚget_response)ÚHeadersÚRequestÚ
get_client)ÚitemsÚpython_2_unicode_compatibleN)Úmessage_from_bytes)ÚMIMEMessagec                 C   s    d  dd„ | D ƒ¡}t| ¡ ƒS )Nz
c                 s   ó   � | ]}d j |Ž V  qdS )z{}: {}N©Úformat©Ú.0Úh© r   ú^/var/www/html/myproject/venv/lib/python3.10/site-packages/kombu/asynchronous/aws/connection.pyÚ	<genexpr>   s   € ú'message_from_headers.<locals>.<genexpr>)Újoinr   Úencode)ÚhdrÚbsr   r   r   Úmessage_from_headers   s   r   )ÚMessagec                 C   s   t  d dd„ | D ƒ¡¡S )Ns   
c                 s   r   )s   {0}: {1}Nr   r   r   r   r   r      s   € 

ÿr   )ÚioÚBytesIOr   )r   r   r   r   r      s   
ÿ)Ú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   ó   | 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   Ú	getheader1   ó   zAsyncHTTPResponse.getheaderc                 C   s   t t| jjƒƒS r+   )Úlistr   r%   r0   ©r(   r   r   r   Ú
getheaders4   r5   zAsyncHTTPResponse.getheadersc                 C   s"   | j d u rtt|  ¡ ƒƒ| _ | j S r+   )r&   r   r   r8   r7   r   r   r   Úmsg7   s   
zAsyncHTTPResponse.msgc                 C   r*   r+   )r%   Úcoder7   r   r   r   Ústatus=   s   zAsyncHTTPResponse.statusc                 C   s   | j jr	| j jjS dS )NÚ )r%   ÚerrorÚmessager7   r   r   r   ÚreasonA   s   
zAsyncHTTPResponse.reasonc                 C   s
   t | jƒS r+   )Úreprr%   r7   r   r   r   Ú__repr__G   s   
zAsyncHTTPResponse.__repr__r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r/   r4   r8   Úpropertyr9   r;   r?   rA   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ú/NéP   i»  )ÚhttpÚhttpsç      4@c                 C   s"   g | _ || _|| _|ptƒ | _d S r+   )r0   ÚtimeoutÚstrictr
   Úhttp_client)r(   rN   rM   rO   r   r   r   r)   W   s   zAsyncHTTPSConnection.__init__c                 C   sd   || _ || _|d ur z|j}W n ty   || _Y nw |ƒ | _|d ur0| j tt|ƒƒ¡ d S d S r+   )	ÚpathÚmethodr/   ÚAttributeErrorr,   r0   Úextendr6   r   )r(   rQ   rP   r,   r0   r/   r   r   r   Úrequest]   s   

ÿÿzAsyncHTTPSConnection.requestc              	   C   s,   t | jƒ}| j| j| j|| j| j| jdd�S )NF)rQ   r0   r,   Úconnect_timeoutÚrequest_timeoutÚvalidate_cert)r   r0   r	   rP   rQ   r,   rM   )r(   r0   r   r   r   Ú
getrequestj   s
   
þzAsyncHTTPSConnection.getrequestc                 C   s&   |   ¡ }| t| j|ƒ¡ | j |¡S r+   )rX   Úthenr   ÚResponserO   Úadd_request)r(   ÚcallbackrT   r   r   r   Úgetresponsep   s   z AsyncHTTPSConnection.getresponsec                 C   ó   d S r+   r   )r(   Úlevelr   r   r   Úset_debuglevelu   ó   z#AsyncHTTPSConnection.set_debuglevelc                 C   r^   r+   r   r7   r   r   r   Úconnectx   ra   zAsyncHTTPSConnection.connectc                 C   r^   r+   r   r7   r   r   r   Úclose{   ra   zAsyncHTTPSConnection.closec                 C   s   || _ || _d S r+   )rQ   rP   )r(   rQ   rP   r   r   r   Ú
putrequest~   s   
zAsyncHTTPSConnection.putrequestc                 C   s   | j  ||f¡ d S r+   )r0   Úappend)r(   ÚheaderÚvaluer   r   r   Ú	putheader‚   s   zAsyncHTTPSConnection.putheaderc                 C   r^   r+   r   r7   r   r   r   Ú
endheaders…   ra   zAsyncHTTPSConnection.endheadersc                 C   s"   | j r|  j |7  _ d S || _ d S r+   )r,   )r(   Údatar   r   r   Úsendˆ   s   
zAsyncHTTPSConnection.sendc                 C   s   d  |  ¡ ¡S )Nz<AsyncHTTPConnection: {0!r}>)r   rX   r7   r   r   r   rA   Ž   s   zAsyncHTTPSConnection.__repr__)NrL   N©NNr+   )rB   rC   rD   rE   r	   r#   rZ   rQ   rP   r,   Údefault_portsr)   rT   rX   r]   r`   rb   rc   rd   rh   ri   rk   rA   r   r   r   r   r!   K   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(   rn   rO   r.   r   r   r   r)   •   s   zAsyncConnection.__init__c                 C   s   t | jd�S )N)rO   )r!   ro   r7   r   r   r   Úget_http_connection™   s   z#AsyncConnection.get_http_connectionc                 C   s`   |pt ƒ }|  ¡ }t|ƒr|||j|j|j|j|ƒ |S | |j|j|j|j¡ |j	|d� |S ©N©r\   )
r   rp   ÚcallablerQ   rP   r,   r0   rT   Úurlr]   )r(   rT   Úsenderr\   Úconnr   r   r   Ú_mexeœ   s   
ÿýÿzAsyncConnection._mexer+   rl   )rB   rC   rD   rE   r)   rp   rw   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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d	S )#ÚAsyncAWSQueryConnectionzAsync AWS Query Connection.éÈ   i˜  iW  iô  iö  i÷  iø  Nc                 K   s"   |si }t j| ||fi |¤Ž d S r+   )r"   r)   )r(   rn   rO   Úhttp_client_paramsr.   r   r   r   r)   Á   s
   
ÿz AsyncAWSQueryConnection.__init__c                 C   sz   |  ¡ }|r
||d< | jj}d}d|i}	| ¡ dkr d}d|i}	td
||dœ|	¤Ž}
|j||
|d� |
 ¡ }| j||d	�S )NÚActionÚstandardrj   r1   Ú
presignurlÚparams)rQ   rt   )Úsigning_typerr   r   )Úcopyrn   Ú_request_signerÚlowerr   ÚsignÚpreparerw   )r(   Ú	operationÚparams_rP   Úverbr\   r~   Úsignerr   Úparam_payloadrT   Úprepared_requestr   r   r   Úmake_requestÈ   s   z$AsyncAWSQueryConnection.make_requestrH   ÚPOSTc                 C   s&   | j ||||t| j||p| ||ƒd�S rq   )r‹   r   Ú_on_list_ready)r(   r…   r~   ÚmarkersrP   Úparentr‡   r\   r   r   r   Úget_listÜ   s   þþz AsyncAWSQueryConnection.get_listrG   c              
   C   ó$   | j ||||t| j||p| |ƒd�S rq   )r‹   r   Ú_on_obj_ready©r(   r…   r~   rP   r�   r‡   r\   r   r   r   Ú
get_objectå   ó   ÿþz"AsyncAWSQueryConnection.get_objectc              
   C   r‘   rq   )r‹   r   Ú_on_status_readyr“   r   r   r   Ú
get_statusí   r•   z"AsyncAWSQueryConnection.get_statusc                 C   s\   | j jj}|j| jkrt| |¡|jƒ\}}|S |j| jv s$|j| j	v r&g S |  
|| ¡ ¡‚r+   )rn   ÚmetaÚservice_modelr;   ÚSTATUS_CODE_OKr   Úoperation_modelr%   ÚSTATUS_CODES_TIMEOUTÚSTATUS_CODES_SERVER_ERRORSÚ_for_statusr/   )r(   r�   rŽ   r…   r%   r™   Ú_Úparsedr   r   r   r�   õ   s   
ÿz&AsyncAWSQueryConnection._on_list_readyc                 C   s@   | j jj}|j| jkrt| |¡|jƒ\}}|S |  || 	¡ ¡‚r+   )
rn   r˜   r™   r;   rš   r   r›   r%   rž   r/   )r(   r�   r…   r%   r™   rŸ   r    r   r   r   r’     s   
ÿz%AsyncAWSQueryConnection._on_obj_readyc                 C   sB   | j jj}|j| jkrt| |¡|jƒ\}}|jS |  	|| 
¡ ¡‚r+   )rn   r˜   r™   r;   rš   r   r›   r%   r:   rž   r/   )r(   r�   r…   r%   r™   Ú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;   r?   )r(   r%   r,   Úcontextr   r   r   rž     s   ÿz#AsyncAWSQueryConnection._for_statusrl   r+   )rH   NrŒ   N)rH   NrG   N)rB   rC   rD   rE   rš   ÚSTATUS_CODE_REQUEST_TIMEOUTÚ)STATUS_CODE_NETWORK_CONNECT_TIMEOUT_ERRORÚSTATUS_CODE_INTERNAL_ERRORÚSTATUS_CODE_BAD_GATEWAYÚ%STATUS_CODE_SERVICE_UNAVAILABLE_ERRORÚSTATUS_CODE_GATEWAY_TIMEOUTr�   rœ   r)   r‹   r�   r”   r—   r�   r’   r–   rž   r   r   r   r   rx   ª   s8    ýý
ÿ


	


rx   ) rE   Ú
__future__r   r   Úviner   r   Úkombu.asynchronous.aws.extr   r   Úkombu.asynchronous.httpr   r	   r
   Ú
kombu.fiver   r   r   Úemailr   Úemail.mime.messager   r   ÚImportErrorÚ	mimetoolsr   Ú__all__Úobjectr#   r!   r"   rx   r   r   r   r   Ú<module>   s,   ü	%F