o
    —¨Êh[!  ã                   @  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   úS/var/www/html/env/lib/python3.10/site-packages/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  ó   | 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#   ó   zAsyncHTTPResponse.getheaderc                 C  s   t | jj ¡ ƒS r!   )Úlistr   r&   Úitems©r   r   r   r   Ú
getheaders&   r+   zAsyncHTTPResponse.getheadersc                 C  s"   | j d u rtt|  ¡ ƒƒ| _ | j S r!   )r   r   r   r/   r.   r   r   r   Úmsg)   s   
zAsyncHTTPResponse.msgc                 C  r    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__r!   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r*   r/   Úpropertyr0   r2   r6   r8   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!   )r&   ÚtimeoutÚstrictr   Úhttp_client)r   rE   rD   rF   r   r   r   r   H   s   zAsyncHTTPSConnection.__init__c                 C  sd   || _ || _|d ur z|j}W n ty   || _Y nw |ƒ | _|d ur0| j t| ¡ ƒ¡ d S d S r!   )	ÚpathÚmethodr%   ÚAttributeErrorr"   r&   Úextendr,   r-   )r   rH   rG   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)rH   r&   r"   Úconnect_timeoutÚrequest_timeoutÚvalidate_cert)r	   r&   r
   rG   rH   r"   rD   )r   r&   r   r   r   Ú
getrequest[   s
   
þzAsyncHTTPSConnection.getrequestc                 C  s&   |   ¡ }| t| j|ƒ¡ | j |¡S r!   )rO   Úthenr   ÚResponserF   Úadd_request)r   ÚcallbackrK   r   r   r   Úgetresponsea   s   z AsyncHTTPSConnection.getresponsec                 C  ó   d S r!   r   )r   Úlevelr   r   r   Úset_debuglevelf   ó   z#AsyncHTTPSConnection.set_debuglevelc                 C  rU   r!   r   r.   r   r   r   Úconnecti   rX   zAsyncHTTPSConnection.connectc                 C  rU   r!   r   r.   r   r   r   Úclosel   rX   zAsyncHTTPSConnection.closec                 C  s   || _ || _d S r!   )rH   rG   )r   rH   rG   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  rU   r!   r   r.   r   r   r   Ú
endheadersv   rX   zAsyncHTTPSConnection.endheadersc                 C  s"   | j r|  j |7  _ d S || _ d S r!   )r"   )r   Údatar   r   r   Úsendy   s   
zAsyncHTTPSConnection.sendc                 C  s   d|   ¡ ›d�S )Nz<AsyncHTTPConnection: ú>)rO   r.   r   r   r   r8      r+   zAsyncHTTPSConnection.__repr__)NrC   N©NNr!   )r9   r:   r;   r<   r
   r   rQ   rH   rG   r"   Údefault_portsr   rK   rO   rT   rW   rY   rZ   r[   r_   r`   rb   r8   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   rf   rF   r$   r   r   r   r   †   s   zAsyncConnection.__init__c                 C  s   t | jd�S )N)rF   )r   rg   r.   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©rS   )
r   rh   ÚcallablerH   rG   r"   r&   rK   ÚurlrT   )r   rK   ÚsenderrS   Úconnr   r   r   Ú_mexe�   s   
ÿýÿzAsyncConnection._mexer!   rd   )r9   r:   r;   r<   r   rh   ro   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i |¤Ž d S r!   )Úsuperr   )r   rf   rF   Ú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d
||dœ|	¤Ž}
|j||
|d� |
 ¡ }| j||d	�S )NÚActionÚstandardra   r'   zpresign-urlÚparams)rH   rl   )Úsigning_typerj   r   )Úcopyrf   Ú_request_signerÚlowerr   ÚsignÚpreparero   )r   Ú	operationÚparams_rG   ÚverbrS   rx   Úsignerry   Úparam_payloadrK   Úprepared_requestr   r   r   Úmake_request¹   s   z$AsyncAWSQueryConnection.make_requestr?   ÚPOSTc                 C  s&   | j ||||t| j||p| ||ƒd�S ri   )r…   r   Ú_on_list_ready)r   r   rx   ÚmarkersrG   Úparentr�   rS   r   r   r   Úget_listÍ   s   þþz AsyncAWSQueryConnection.get_listr>   c              
   C  ó$   | j ||||t| j||p| |ƒd�S ri   )r…   r   Ú_on_obj_ready©r   r   rx   rG   r‰   r�   rS   r   r   r   Ú
get_objectÖ   ó   ÿþz"AsyncAWSQueryConnection.get_objectc              
   C  r‹   ri   )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!   )rf   ÚmetaÚservice_modelr2   Ú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!   )
rf   r’   r“   r2   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!   )rf   r’   r“   r2   r”   r   r•   r   r1   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   r2   r6   )r   r   r"   Úcontextr   r   r   r˜     s   ÿz#AsyncAWSQueryConnection._for_statusrd   r!   )r?   Nr†   N)r?   Nr>   N)r9   r:   r;   r<   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˜   Ú__classcell__r   r   rt   r   rp   ›   s8    ýýÿ


	


rp   N)r<   Ú
__future__r   Úemailr   Úemail.mime.messager   Úviner   r   Úkombu.asynchronous.aws.extr   r   Úkombu.asynchronous.httpr	   r
   r   r   Ú__all__r   r   r   rp   r   r   r   r   Ú<module>   s    %F