
     h                         d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZ 	 dd	lmZ n# e$ r dZY nw xY wd
 ej        D             Z G d dej                  Z G d dej                  ZdS )a  Azure Storage Queues transport module for kombu.

More information about Azure Storage Queues:
https://azure.microsoft.com/en-us/services/storage/queues/

Features
========
* Type: Virtual
* Supports Direct: *Unreviewed*
* Supports Topic: *Unreviewed*
* Supports Fanout: *Unreviewed*
* Supports Priority: *Unreviewed*
* Supports TTL: *Unreviewed*

Connection String
=================

Connection string has the following format:

.. code-block::

    azurestoragequeues://:STORAGE_ACCOUNT_ACCESS kEY@STORAGE_ACCOUNT_NAME

Note that if the access key for the storage account contains a slash, it will
have to be regenerated before it can be used in the connection URL.

Transport Options
=================

* ``queue_name_prefix``
    N)Empty)safe_str)dumpsloads)cached_property   )virtual)QueueServicec                 .    i | ]}t          |          d S )-   )ord).0cs     ^/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/kombu/transport/azurestoragequeues.py
<dictcomp>r   1   s-       CFFD      c                        e Zd ZdZdZdZi ZdZ e            Z	 fdZ
 fdZefdZd Z fd	Zd
 ZddZd Zd Zed             Zed             Zed             Zed             Z xZS )ChannelzAzure Storage Queues channel.zkombu%(vhost)sNTc                     t           t          d           t                      j        |i | | j                                        D ]}|| j        |<   d S )NzGAzure Storage Queues transport requires the azure-storage-queue library)r
   ImportErrorsuper__init__queue_servicelist_queues_queue_name_cache)selfargskwargs
queue_name	__class__s       r   r   zChannel.__init__?   sv     < = = = 	$)&))),88:: 	< 	<J1;D":..	< 	<r   c                 x    |r| j                             |            t                      j        ||g|R i |S N)_noack_queuesaddr   basic_consume)r   queueno_ackr   r   r    s        r   r%   zChannel.basic_consumeI   s[     	*""5)))$uww$UF 6&*6 6 6.46 6 	6r   c                 `    t          t          |                                        |          S )z=Format AMQP queue name into a valid Azure Storage Queue name.)strr   	translate)r   nametables      r   entity_namezChannel.entity_nameP   s$    8D>>"",,U333r   c                     |                      | j        |z             }	 | j        |         S # t          $ r- | j                            |d           |x}| j        |<   |cY S w xY w)zEnsure a queue exists.F)fail_on_exist)r-   queue_name_prefixr   KeyErrorr   create_queue)r   r&   qs      r   _ensure_queuezChannel._ensure_queueT   s      !7%!?@@	)%00 	 	 	++E+GGG055A&u-HHH	s   , 4A#"A#c                     |                      |          }| j                            |d           | j                            |           t                                          |           dS )zDelete queue by name.N)r-   r   popr   delete_queuer   _delete)r   r&   r   r   r   r    s        r   r8   zChannel._delete^   sb    %%e,,
"":t444''
333
#####r   c                     |                      |          }t          |          }| j                            ||           dS )zPut message onto queue.N)r4   r   r   put_message)r   r&   messager   r3   encoded_messages         r   _putzChannel._pute   s?    u%%..&&q/:::::r   c                 B   |                      |          }| j                            |d|          }|st                      |d         }| j                            |j                  }t          |          }| j                            ||j        |j	                   |S )z/Try to retrieve a single message off ``queue``.r   )num_messagestimeoutr   )
r4   r   get_messagesr   decode_functioncontentr   delete_messageidpop_receipt)r   r&   r@   r3   messagesr;   raw_contentrC   s           r   _getzChannel._getk   s    u%%%2211;B 3 D D 	''M1+(88II$$))!WZ9LMMMr   c                 n    |                      |          }| j                            |          }|j        S )z)Return the number of messages in a queue.)r4   r   get_queue_metadataapproximate_message_count)r   r&   r3   metadatas       r   _sizezChannel._size|   s4    u%%%88;;11r   c                     |                      |          }|                     |          }| j                            |           |S )z'Delete all current messages in a queue.)r4   rN   r   clear_messages)r   r&   r3   ns       r   _purgezChannel._purge   s@    u%%JJqMM))!,,,r   c                 r    | j         *t          | j        j        | j        j                  | _         | j         S )N)account_nameaccount_key)_queue_servicer
   conninfohostnamepasswordr   s    r   r   zChannel.queue_service   s=    &".!]3 M2#4 #4 #4D ""r   c                     | j         j        S r"   )
connectionclientrZ   s    r   rW   zChannel.conninfo   s    %%r   c                 $    | j         j        j        S r"   )r\   r]   transport_optionsrZ   s    r   r_   zChannel.transport_options   s    %77r   c                 8    | j                             dd          S )Nr0    )r_   getrZ   s    r   r0   zChannel.queue_name_prefix   s    %))*=rBBBr   r"   )__name__
__module____qualname____doc__domain_formatrV   r   r'   setr#   r   r%   CHARS_REPLACE_TABLEr-   r4   r8   r=   rI   rN   rR   propertyr   rW   r_   r   r0   __classcell__)r    s   @r   r   r   6   sl       ''$MNFCEEM< < < < <6 6 6 6 6 ': 4 4 4 4  $ $ $ $ $; ; ;   "2 2 2   # # X# & & X& 8 8 X8 C C _C C C C Cr   r   c                       e Zd ZdZeZdZdZdS )	TransportzAzure Storage Queues transport.r   N)rc   rd   re   rf   r   polling_intervaldefault_port r   r   rm   rm      s$        ))GLLLr   rm   )rf   stringr&   r   kombu.utils.encodingr   kombu.utils.jsonr   r   kombu.utils.objectsr   ra   r	   azure.storage.queuer
   r   punctuationri   r   rm   rp   r   r   <module>rw      sO   @        ) ) ) ) ) ) ) ) ) ) ) ) ) ) / / / / / /      0000000   LLL
  ,   
fC fC fC fC fCgo fC fC fCR    !     s   / 99