o
    —¨Êh¬%  ã                   @  s„   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ dZG dd„ de	ƒZdS )zAmazon SQS Connection.é    )ÚannotationsN)Ú
Serializer)Ú	transform)ÚAsyncAWSQueryConnection)Ú
AWSRequesté   )Úboto3)ÚAsyncMessage)Ú
AsyncQueue)ÚAsyncSQSConnectionc                      s
  e Zd ZdZd7‡ fdd„	Zdd„ Zdd	„ Zd8d
d„Z	d9dd„Zd:dd„Z	dd„ Z
d;dd„Zd8dd„Z			d<dd„Zd8dd„Zd8dd„Z	d8d d!„Z	d9d"d#„Zd8d$d%„Z	d8d&d'„Zd8d(d)„Zd=d+d,„Zd8d-d.„ZeZd/d0„ Zd8d1d2„Z	d8d3d4„Zd8d5d6„Z‡  ZS )>r   zAsync SQS Connection.r   Nc                   s.   t d u rtdƒ‚tƒ j|f||dœ|¤Ž d S )Nzboto3 is not installed)Úregion_nameÚdebug)r   ÚImportErrorÚsuperÚ__init__)ÚselfÚsqs_connectionr   ÚregionÚkwargs©Ú	__class__© úW/var/www/html/env/lib/python3.10/site-packages/kombu/asynchronous/aws/sqs/connection.pyr      s   ÿþ
ýzAsyncSQSConnection.__init__c                 C  sD   |  ¡ }|r
||d< d|i}| ¡ dkrd|i}td||dœ|¤ŽS )NÚActionÚdataÚgetÚparams©ÚmethodÚurlr   )ÚcopyÚlowerr   )r   Ú	operationr   Ú	queue_urlr   Úparam_payloadr   r   r   Ú_create_query_request    s   z(AsyncSQSConnection._create_query_requestc                 C  sž   |  ¡ }||d< | jjj}| |¡}| jjj}i }|jd }d|› �}	|	|d< d |jd |j	¡}
|
|d< t
 |¡|dœ}|j d	tj¡}td||d
œ|¤ŽS )NÚQueueUrlÚjsonVersionzapplication/x-amz-json-zContent-Typez{}.{}ÚtargetPrefixzX-Amz-Target)r   Úheadersr   r   r   )r    r   ÚmetaÚservice_modelÚoperation_modelÚ	_endpointÚhostÚmetadataÚformatÚnameÚjsonÚdumpsÚhttpr   r   ÚDEFAULT_METHODr   )r   r"   r   r#   r+   r,   r   r)   Újson_versionÚcontent_typeÚtargetr$   r   r   r   r   Ú_create_json_request-   s0   




þþþýz'AsyncSQSConnection._create_json_requestc                 C  s–   | j j}| j jj}|j}|dkr|  ||||¡}	n|dkr%|  |||¡}	ntd|› d�ƒ‚|	j 	¡ dkr6dnd}
|j
||	|
d� |	 ¡ }| j||d	�S )
ai  
        Overide make_request to support different protocols.

        botocore is soon going to change the default protocol of communicating
        with SQS backend from 'query' to 'json', so we need a special
        implementation of make_request for SQS. More information on this can
        be found in: https://github.com/celery/kombu/pull/1807.
        Úqueryr2   zUnsupported protocol: Ú.r   zpresign-urlÚstandard)Úsigning_type©Úcallback)r   Ú_request_signerr*   r+   Úprotocolr%   r9   Ú	Exceptionr   r!   ÚsignÚprepareÚ_mexe)r   Úoperation_namer   r#   Úverbr?   Úsignerr+   rA   Úrequestr=   Úprepared_requestr   r   r   Úmake_requestO   s$   	
ÿÿÿzAsyncSQSConnection.make_requestc                 C  s*   d|i}|rt |dƒ|d< | jd||d�S )NÚ	QueueNameÚdÚDefaultVisibilityTimeoutÚCreateQueuer>   )r0   Ú
get_object)r   Ú
queue_nameÚvisibility_timeoutr?   r   r   r   r   Úcreate_queuen   s   ÿÿzAsyncSQSConnection.create_queueFc                 C  s   | j dd |j|d�S )NÚDeleteQueuer>   ©Ú
get_statusÚid)r   ÚqueueÚforce_deletionr?   r   r   r   Údelete_queuex   s   ÿzAsyncSQSConnection.delete_queuec                 C  s   | j j|d�}|d S )N)rL   r&   )r   Úget_queue_url)r   rX   Úresr   r   r   r[   |   s   z AsyncSQSConnection.get_queue_urlÚAllc                 C  ó   | j dd|i|j|d�S )NÚGetQueueAttributesÚAttributeNamer>   )rP   rW   )r   rX   Ú	attributer?   r   r   r   Úget_queue_attributes€   s   þz'AsyncSQSConnection.get_queue_attributesc                 C  ó   | j d||dœ|j|d�S )NÚSetQueueAttribute)zAttribute.NamezAttribute.Valuer>   rU   )r   rX   ra   Úvaluer?   r   r   r   Úset_queue_attribute†   s
   ýz&AsyncSQSConnection.set_queue_attributer   ©ÚApproximateReceiveCountc                 C  sx   d|i}|r
||d< |r&i }	t |ƒD ]\}
}||	dt|
d ƒ < q| |	¡ |d ur.||d< | jd|dtfg|||d�S )	NÚMaxNumberOfMessagesÚVisibilityTimeoutzAttributeName.r   ÚWaitTimeSecondsÚReceiveMessageÚMessage)r?   Úparent)Ú	enumerateÚstrÚupdateÚget_listr	   )r   rX   r#   Únumber_messagesrR   Ú
attributesÚwait_time_secondsr?   r   ÚattrsÚidxÚattrr   r   r   Úreceive_message�   s   
þz"AsyncSQSConnection.receive_messagec                 C  s   |   |||¡S ©N)Údelete_message_from_handle©r   rX   Úreceipt_handler?   r   r   r   Údelete_message¡   s   ÿz!AsyncSQSConnection.delete_messagec                 C  s\   i }t |ƒD ]\}}d|d › �}| |› d�|j|› d�|ji¡ q| jd||jd|d�S )NzDeleteMessageBatchRequestEntry.r   ú.Idú.ReceiptHandleÚDeleteMessageBatchÚPOST©rG   r?   ©ro   rq   rW   r}   rP   )r   rX   Úmessagesr?   r   ÚiÚmÚprefixr   r   r   Údelete_message_batch¦   s   þþz'AsyncSQSConnection.delete_message_batchc                 C  s   | j dd|i||d�S )NÚDeleteMessageÚReceiptHandler>   )rV   r|   r   r   r   r{   ³   s   þz-AsyncSQSConnection.delete_message_from_handlec                 C  s.   d|i}|rt |ƒ|d< | jd||jd|d�S )NÚMessageBodyÚDelaySecondsÚSendMessager‚   rƒ   )ÚintrP   rW   )r   rX   Úmessage_contentÚdelay_secondsr?   r   r   r   r   Úsend_messageº   s   þzAsyncSQSConnection.send_messagec              
   C  sn   i }t |ƒD ]%\}}d|d › �}| |› d�|d |› d�|d |› d�|d i¡ q| jd||jd	|d
�S )NzSendMessageBatchRequestEntry.r   r   r   z.MessageBodyz.DelaySecondsé   ÚSendMessageBatchr‚   rƒ   )ro   rq   rP   rW   )r   rX   r…   r?   r   r†   Úmsgrˆ   r   r   r   Úsend_message_batchÄ   s   ýþz%AsyncSQSConnection.send_message_batchc                 C  rc   )NÚChangeMessageVisibility)r‹   rj   r>   rU   )r   rX   r}   rR   r?   r   r   r   Úchange_message_visibilityÒ   s   ÿüz,AsyncSQSConnection.change_message_visibilityc              
   C  sr   i }t |ƒD ]'\}}d|d › �}| |› d�|d j|› d�|d j|› d�|d i¡ q| jd||jd|d	�S )
Nz)ChangeMessageVisibilityBatchRequestEntry.r   r   r   r€   z.VisibilityTimeoutÚChangeMessageVisibilityBatchr‚   rƒ   r„   )r   rX   r…   r?   r   r†   ÚtÚprer   r   r   Úchange_message_visibility_batchÛ   s   ýþz2AsyncSQSConnection.change_message_visibility_batchÚ c                 C  s(   i }|r||d< | j d|dtfg|d�S )NÚQueueNamePrefixÚ
ListQueuesr&   r>   )rr   r
   )r   rˆ   r?   r   r   r   r   Úget_all_queuesé   s   þz!AsyncSQSConnection.get_all_queuesc                 C  s   |   |t| j||ƒ¡S rz   )r    r   Ú_on_queue_ready)r   rQ   r?   r   r   r   Ú	get_queueò   s   þzAsyncSQSConnection.get_queuec                   s   t ‡ fdd„|D ƒd ƒS )Nc                 3  s    � | ]}|j  ˆ ¡r|V  qd S rz   )r   Úendswith)Ú.0Úq©r1   r   r   Ú	<genexpr>ü   s   € z5AsyncSQSConnection._on_queue_ready.<locals>.<genexpr>)Únext)r   r1   Úqueuesr   r¦   r   r¡   ú   s   ÿz"AsyncSQSConnection._on_queue_readyc                 C  s   | j dd|jidtfg|d�S )NÚListDeadLetterSourceQueuesr&   r>   )rr   r   r
   )r   rX   r?   r   r   r   Úget_dead_letter_source_queuesÿ   s
   
ýz0AsyncSQSConnection.get_dead_letter_source_queuesc                 C  s   | j d|||dœ|j|d�S )NÚAddPermission)ÚLabelÚAWSAccountIdÚ
ActionNamer>   rU   )r   rX   ÚlabelÚaws_account_idÚaction_namer?   r   r   r   Úadd_permission  s   þûz!AsyncSQSConnection.add_permissionc                 C  r^   )NÚRemovePermissionr­   r>   rU   )r   rX   r°   r?   r   r   r   Úremove_permission  s   ÿz$AsyncSQSConnection.remove_permission)r   Nrz   )NN)FN)r]   N)r   Nrg   NN)r�   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r9   rK   rS   rZ   r[   rb   rf   ry   r~   r‰   r{   r’   r–   r˜   rœ   r    r¢   Úlookupr¡   r«   r³   rµ   Ú__classcell__r   r   r   r   r      sD    	
" 
ÿ




ý


ÿ
ÿ


ÿ
	

	

ÿ
r   )r¹   Ú
__future__r   r2   Úbotocore.serializer   Úviner   Ú!kombu.asynchronous.aws.connectionr   Úkombu.asynchronous.aws.extr   Úextr   Úmessager	   rX   r
   Ú__all__r   r   r   r   r   Ú<module>   s    