o
    Df[!                     @  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   Z/home/ubuntu/webapp/venv/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/NP   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