U
    dt                     @   sX   d 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.    )	transform)AsyncAWSQueryConnection   )boto3)AsyncMessage)
AsyncQueue)AsyncSQSConnectionc                       s   e Zd ZdZd1 fdd	Zd2ddZd3d	d
Zdd Zd4ddZd5ddZ	d6ddZ
d7ddZd8ddZd9ddZd:ddZd;ddZd<d d!Zd=d"d#Zd>d%d&Zd?d'd(ZeZd)d* Zd@d+d,ZdAd-d.ZdBd/d0Z  ZS )Cr   zAsync SQS Connection.r   Nc                    s.   t d krtdt j|f||d| d S )Nzboto3 is not installed)Zregion_namedebug)r   ImportErrorsuper__init__)selfsqs_connectionr	   Zregionkwargs	__class__ I/tmp/pip-unpacked-wheel-hqfrjlvz/kombu/asynchronous/aws/sqs/connection.pyr      s     zAsyncSQSConnection.__init__c                 C   s*   d|i}|rt |d|d< | jd||dS )N	QueueNamedZDefaultVisibilityTimeoutZCreateQueuecallback)format
get_object)r   
queue_namevisibility_timeoutr   paramsr   r   r   create_queue   s     zAsyncSQSConnection.create_queueFc                 C   s   | j dd |j|dS )NZDeleteQueuer   
get_statusid)r   queueZforce_deletionr   r   r   r   delete_queue$   s    zAsyncSQSConnection.delete_queuec                 C   s   | j j|d}|d S )N)r   QueueUrl)r   get_queue_url)r   r!   resr   r   r   r$   (   s    z AsyncSQSConnection.get_queue_urlAllc                 C   s   | j dd|i|j|dS )NZGetQueueAttributesZAttributeNamer   )r   r    )r   r!   	attributer   r   r   r   get_queue_attributes,   s      z'AsyncSQSConnection.get_queue_attributesc                 C   s   | j d||d|j|dS )NZSetQueueAttribute)zAttribute.NamezAttribute.Valuer   r   )r   r!   r'   valuer   r   r   r   set_queue_attribute2   s     z&AsyncSQSConnection.set_queue_attributer   ZApproximateReceiveCountc                 C   sx   d|i}|r||d< |rLi }	t |D ]\}
}||	dt|
d  < q$||	 |d k	r\||d< | jd|dtfg|||dS )	NZMaxNumberOfMessagesVisibilityTimeoutzAttributeName.r   ZWaitTimeSecondsZReceiveMessageMessage)r   parent)	enumeratestrupdateget_listr   )r   r!   Z	queue_urlZnumber_messagesr   
attributesZwait_time_secondsr   r   attrsidxattrr   r   r   receive_message9   s$    
    z"AsyncSQSConnection.receive_messagec                 C   s   |  |||S N)delete_message_from_handler   r!   receipt_handler   r   r   r   delete_messageM   s
      z!AsyncSQSConnection.delete_messagec                 C   s\   i }t |D ]8\}}d|d  }|| d|j| d|ji q| jd||jd|dS )NzDeleteMessageBatchRequestEntry.r   .Id.ReceiptHandleZDeleteMessageBatchPOSTZverbr   r/   r1   r    r;   r   )r   r!   messagesr   r   imprefixr   r   r   delete_message_batchR   s          z'AsyncSQSConnection.delete_message_batchc                 C   s   | j dd|i||dS )NZDeleteMessageReceiptHandler   )r   r:   r   r   r   r9   _   s      z-AsyncSQSConnection.delete_message_from_handlec                 C   s.   d|i}|rt ||d< | jd||jd|dS )NZMessageBodyZDelaySecondsZSendMessager?   r@   )intr   r    )r   r!   Zmessage_contentZdelay_secondsr   r   r   r   r   send_messagef   s       zAsyncSQSConnection.send_messagec              
   C   sn   i }t |D ]J\}}d|d  }|| d|d | d|d | d|d i q| jd||jd	|d
S )NzSendMessageBatchRequestEntry.r   r=   r   z.MessageBodyz.DelaySeconds   ZSendMessageBatchr?   r@   )r/   r1   r   r    )r   r!   rB   r   r   rC   msgrE   r   r   r   send_message_batchp   s$          z%AsyncSQSConnection.send_message_batchc                 C   s   | j d||d|j|dS )NZChangeMessageVisibility)rG   r,   r   r   )r   r!   r;   r   r   r   r   r   change_message_visibility~   s     z,AsyncSQSConnection.change_message_visibilityc              
   C   sr   i }t |D ]N\}}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.VisibilityTimeoutZChangeMessageVisibilityBatchr?   r@   rA   )r   r!   rB   r   r   rC   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 )NZQueueNamePrefixZ
ListQueuesr#   r   )r2   r   )r   rE   r   r   r   r   r   get_all_queues   s      z!AsyncSQSConnection.get_all_queuesc                 C   s   |  |t| j||S r8   )rR   r   _on_queue_ready)r   r   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 r8   )urlendswith).0qnamer   r   	<genexpr>   s      z5AsyncSQSConnection._on_queue_ready.<locals>.<genexpr>)next)r   rZ   Zqueuesr   rY   r   rS      s     z"AsyncSQSConnection._on_queue_readyc                 C   s   | j dd|jidtfg|dS )NZListDeadLetterSourceQueuesr#   r   )r2   rU   r   )r   r!   r   r   r   r   get_dead_letter_source_queues   s     z0AsyncSQSConnection.get_dead_letter_source_queuesc                 C   s   | j d|||d|j|dS )NZAddPermission)LabelZAWSAccountIdZ
ActionNamer   r   )r   r!   labelZaws_account_idaction_namer   r   r   r   add_permission   s     z!AsyncSQSConnection.add_permissionc                 C   s   | j dd|i|j|dS )NZRemovePermissionr^   r   r   )r   r!   r_   r   r   r   r   remove_permission   s       z$AsyncSQSConnection.remove_permission)r   N)NN)FN)r&   N)N)r   Nr+   NN)N)N)N)NN)N)N)N)rQ   N)N)N)N)N)__name__
__module____qualname____doc__r   r   r"   r$   r(   r*   r7   r<   rF   r9   rI   rL   rM   rP   rR   rT   lookuprS   r]   ra   rb   __classcell__r   r   r   r   r      sD   
   




       


 
   


 
	

	

 

r   N)rf   Zviner   Z!kombu.asynchronous.aws.connectionr   extr   messager   r!   r   __all__r   r   r   r   r   <module>   s   