o
    ?Zc6!                     @   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   W/var/www/chikooza/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   reason1   s   
zAsyncHTTPResponse.reasonc                 C   s
   t | jS r    )reprr   r-   r   r   r   __repr__7   s   
zAsyncHTTPResponse.__repr__r    )__name__
__module____qualname____doc__r   r$   r)   r.   propertyr/   r1   r5   r7   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   rD   rC   rE   r   r   r   r   F   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   rG   rF   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)rG   r%   r!   connect_timeoutrequest_timeoutvalidate_cert)r   r%   r	   rF   rG   r!   rC   )r   r%   r   r   r   
getrequestY   s
   
zAsyncHTTPSConnection.getrequestc                 C   s&   |   }|t| j| | j|S r    )rN   thenr   ResponserE   add_request)r   callbackrJ   r   r   r   getresponse_   s   z AsyncHTTPSConnection.getresponsec                 C      d S r    r   )r   levelr   r   r   set_debugleveld      z#AsyncHTTPSConnection.set_debuglevelc                 C   rT   r    r   r-   r   r   r   connectg   rW   zAsyncHTTPSConnection.connectc                 C   rT   r    r   r-   r   r   r   closej   rW   zAsyncHTTPSConnection.closec                 C   s   || _ || _d S r    )rG   rF   )r   rG   rF   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   rT   r    r   r-   r   r   r   
endheaderst   rW   zAsyncHTTPSConnection.endheadersc                 C   s"   | j r|  j |7  _ d S || _ d S r    )r!   )r   datar   r   r   sendw   s   
zAsyncHTTPSConnection.sendc                 C   s   d|   dS )Nz<AsyncHTTPConnection: >)rN   r-   r   r   r   r7   }   r*   zAsyncHTTPSConnection.__repr__)NrB   NNNr    )r8   r9   r:   r;   r	   r   rP   rG   rF   r!   default_portsr   rJ   rN   rS   rV   rX   rY   rZ   r^   r_   ra   r7   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   re   rE   r#   r   r   r   r      s   zAsyncConnection.__init__c                 C   s   t | jdS )N)rE   )r   rf   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rR   )
r   rg   callablerG   rF   r!   r%   rJ   urlrS   )r   rJ   senderrR   connr   r   r   _mexe   s   
zAsyncConnection._mexer    rc   )r8   r9   r:   r;   r   rg   rn   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   re   rE   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standardr`   r&   
presignurlparams)rG   rk   )signing_typeri   r   )copyre   _request_signerlowerr   signpreparern   )r   	operationparams_rF   verbrR   rx   signerry   param_payloadrJ   prepared_requestr   r   r   make_request   s   z$AsyncAWSQueryConnection.make_requestr>   POSTc                 C   s&   | j ||||t| j||p| ||dS rh   )r   r   _on_list_ready)r   r   rx   markersrF   parentr   rR   r   r   r   get_list   s   z AsyncAWSQueryConnection.get_listr=   c              
   C   $   | j ||||t| j||p| |dS rh   )r   r   _on_obj_readyr   r   rx   rF   r   r   rR   r   r   r   
get_object      z"AsyncAWSQueryConnection.get_objectc              
   C   r   rh   )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    )re   metaservice_modelr1   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    )
re   r   r   r1   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    )re   r   r   r1   r   r   r   r   r0   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   r1   r5   )r   r   r!   contextr   r   r   r   
  s   z#AsyncAWSQueryConnection._for_statusrc   r    )r>   Nr   N)r>   Nr=   N)r8   r9   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   rs   r   ro      s8    


	


ro   N)r;   emailr   email.mime.messager   viner   r   kombu.asynchronous.aws.extr   r   kombu.asynchronous.httpr   r	   r
   r   __all__r   r   r   ro   r   r   r   r   <module>   s    %F