
    i"                    p   d Z ddlmZ ddl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mZ dd	lmZ d
dlmZ 	 ddlmZ 	 ddlmZmZ ej4                  D  ci c]  }  e|       d c} Z G d dej:                        Z G d dej<                        Zy# e$ r dZY ^w xY w# e$ r dZdZY dw xY wc c} w )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 formats:

.. code-block::

    azurestoragequeues://<STORAGE_ACCOUNT_ACCESS_KEY>@<STORAGE_ACCOUNT_URL>
    azurestoragequeues://<SAS_TOKEN>@<STORAGE_ACCOUNT_URL>
    azurestoragequeues://DefaultAzureCredential@<STORAGE_ACCOUNT_URL>
    azurestoragequeues://ManagedIdentityCredential@<STORAGE_ACCOUNT_URL>

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

.. code-block::

    azurestoragequeues://DefaultAzureCredential@<STORAGE_ACCOUNT_URL>
    azurestoragequeues://ManagedIdentityCredential@<STORAGE_ACCOUNT_URL>

If you wish to use an `Azure Managed Identity` you may use the
``DefaultAzureCredential`` format of the connection string which will use
``DefaultAzureCredential`` class in the azure-identity package. You may want to
read the `azure-identity documentation` for more information on how the
``DefaultAzureCredential`` works.

.. _azure-identity documentation:
https://learn.microsoft.com/en-us/python/api/overview/azure/identity-readme?view=azure-python
.. _Azure Managed Identity:
https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview

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

* ``queue_name_prefix``
    )annotationsN)Empty)AnyOptional)ResourceExistsError)safe_str)dumpsloads)cached_property   )virtual)QueueServiceClient)DefaultAzureCredentialManagedIdentityCredential-   c                       e Zd ZU dZdZded<   dZded<   i Zded	<   d
Zded<    e	       Z
ded<    fdZ fdZefddZd Zd Zd ZddZd Zd Zedd       Zed        Zed        Zedd       Z xZS )ChannelzAzure Storage Queues channel.zkombu%(vhost)sstrdomain_formatNzOptional[QueueServiceClient]_queue_servicezdict[Any, Any]_queue_name_cacheTboolno_ackzset[Any]_noack_queuesc                   t         t        d      t        |   |i | t        j                  | j                  j                        \  | _        | _	        | j                  j                         D ]  }|| j                  |d   <    y )NzGAzure Storage Queues transport requires the azure-storage-queue libraryname)r   ImportErrorsuper__init__	Transport	parse_uriconninfohostname_credential_urlqueue_servicelist_queuesr   )selfargskwargsqueue	__class__s       /var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/kombu/transport/azurestoragequeues.pyr   zChannel.__init___   s    % < = = 	$)&)&/&9&9MM""'
#$) ''335 	:E49D""5=1	:    c                f    |r| j                   j                  |       t        |   ||g|i |S N)r   addr   basic_consume)r(   r+   r   r)   r*   r,   s        r-   r2   zChannel.basic_consumem   s@    ""5)w$UF 6&*6.46 	6r.   c                H    t        t        |            j                  |      S )z=Format AMQP queue name into a valid Azure Storage Queue name.)r   r   	translate)r(   r   tables      r-   entity_namezChannel.entity_namet   s    8D>",,U33r.   c                   | j                  | j                  |z         }	 | j                  j                  | j                  |         }|S # t
        $ ri 	 | j                  j                  |      }n+# t        $ r | j                  j                  |      }Y nw xY w|j                         | j                  |<   Y |S w xY w)zEnsure a queue exists.)r+   )
r6   queue_name_prefixr   get_queue_clientr   KeyErrorr&   create_queuer   get_queue_propertiesr(   r+   qs      r-   _ensure_queuezChannel._ensure_queuex   s      !7!7%!?@
	E##44,,U3 5 A   	EF&&33E:& F''88u8EF -.,B,B,DD""5)	Es5   )A 	B=A10B=1%BB=B B=<B=c                    | j                  |      }| j                  j                  |d       | j                  j	                  |       y)zDelete queue by name.N)r6   r   popr&   delete_queue)r(   r+   r)   r*   
queue_names        r-   _deletezChannel._delete   s<    %%e,
"":t4''
3r.   c                ^    | j                  |      }t        |      }|j                  |       y)zPut message onto queue.N)r?   r	   send_message)r(   r+   messager*   r>   encoded_messages         r-   _putzChannel._put   s'    u%.	'r.   c                    | j                  |      }|j                  d|      }	 t        |      }t        |j                        }|j                  |       |S # t        $ r t	               w xY w)z/Try to retrieve a single message off ``queue``.r   )messages_per_pagetimeout)rG   )r?   receive_messagesnextStopIterationr   r
   contentdelete_message)r(   r+   rL   r>   messagesrG   rP   s          r-   _getzChannel._get   ss    u%%%7%K	8nG (	)  	'M	s   A A.c                X    | j                  |      }|j                         j                  S )z)Return the number of messages in a queue.)r?   r<   approximate_message_countr=   s      r-   _sizezChannel._size   s'    u%%%'AAAr.   c                ~    | j                  |      }| j                  |j                        }|j                          |S )z'Delete all current messages in a queue.)r?   rV   rC   clear_messages)r(   r+   r>   ns       r-   _purgezChannel._purge   s5    u%JJq||$	r.   c                ~    | j                   &t        | j                  | j                        | _         | j                   S )N)account_url
credential)r   r   r%   r$   r(   s    r-   r&   zChannel.queue_service   s8    &"4 II$2B2B#D """r.   c                .    | j                   j                  S r0   )
connectionclientr^   s    r-   r"   zChannel.conninfo   s    %%%r.   c                B    | j                   j                  j                  S r0   )r`   ra   transport_optionsr^   s    r-   rc   zChannel.transport_options   s    %%777r.   c                :    | j                   j                  dd      S )Nr8    )rc   getr^   s    r-   r8   zChannel.queue_name_prefix   s    %%))*=rBBr.   )returnr   r0   )rg   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   setr   r   r2   CHARS_REPLACE_TABLEr6   r?   rD   rI   rS   rV   rZ   propertyr&   r"   rc   r   r8   __classcell__)r,   s   @r-   r   r   V   s    ')M3)37N07(*~*FD!eM8#:6 ': 4 4( B
 # # & & 8 8 C Cr.   r   c                  v    e Zd ZU dZeZdZded<   dZded<   dZd	ed
<   e	dd       Z
e	 d	 	 	 	 	 	 	 dd       Zy)r    zAzure Storage Queues transport.r   intpolling_intervalNzOptional[int]default_portTr   can_parse_urlc                   	 | j                  dd      } | j                  dd      \  }}dj                         |j                         k(  rt        t	        d      t               }nJdj                         |j                         k(  rt
        t	        d      t               }nd	|v r	d
|vrd	|d}t        ||g      sJ 	 ||fS # t        $ r t        d      w xY w)Nzazurestoragequeues://re   @r   r   z`Azure Storage Queues transport with a DefaultAzureCredential requires the azure-identity libraryr   zcAzure Storage Queues transport with a ManagedIdentityCredential requires the azure-identity librarydevstoreaccount1z.core.windows.net)account_nameaccount_keyzNeed a URI like azurestoragequeues://{SAS or access key}@{URL}, azurestoragequeues://DefaultAzureCredential@{URL}, , or azurestoragequeues://ManagedIdentityCredential@{URL})	replacersplitlowerr   r   r   all	Exception
ValueError)urir]   urls      r-   r!   zTransport.parse_uri   s   "	++5r:C!jja0OJ'--/:3C3C3EE)1% '? @ @ 45
,224
8H8H8JJ,4% '? @ @ 78
#s*/B#/M %7#-
 
C())) 3  	G 	s   B=C Cc                `    | j                  |      \  }}dj                  |r||      S ||      S )Nzazurestoragequeues://{}@{})r!   format)clsr   include_passwordmaskr]   r   s         r-   as_urizTransport.as_uri   s?     --,
C+22*Jc
 	
04c
 	
r.   )r   r   rg   ztuple[str | dict, str])Fz**)r   r   r   r   r   r   rg   r   )rh   ri   rj   rk   r   rs   rl   rt   ru   staticmethodr!   classmethodr    r.   r-   r    r       ss    )Gc"&L-&M4. .` CG

)-
=@
	
 
r.   r    )rk   
__future__r   stringr+   r   typingr   r   azure.core.exceptionsr   kombu.utils.encodingr   kombu.utils.jsonr	   r
   kombu.utils.objectsr   re   r   azure.storage.queuer   r   azure.identityr   r   punctuationordrn   r   r    )cs   0r-   <module>r      s   2h #     5 ) ) / 6%; !,,CFDL 
mCgoo mC`A
!! A
C    %! $%s)   B B$ B3B! B!$	B0/B0