
    Ih"                    l   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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j2                  D  ci c]  }  e|       d c} Z G d dej8                        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)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QueueServiceClient | None_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/planif/env/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,   r1   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*   )
r5   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)r5   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)rF   )r>   receive_messagesnextStopIterationr   r	   contentdelete_message)r'   r*   rK   r=   messagesrF   rO   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>   rU   rB   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 r/   )
connectionclientr]   s    r,   r!   zChannel.conninfo   s    %%%r-   c                B    | j                   j                  j                  S r/   )r_   r`   transport_optionsr]   s    r,   rb   zChannel.transport_options   s    %%777r-   c                :    | j                   j                  dd      S )Nr7    )rb   getr]   s    r,   r7   zChannel.queue_name_prefix   s    %%))*=rBBr-   )returnr   r/   )rf   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   setr   r   r1   CHARS_REPLACE_TABLEr5   r>   rC   rH   rR   rU   rY   propertyr%   r!   rb   r
   r7   __classcell__)r+   s   @r,   r   r   V   s    ')M3)04N-4(*~*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
int | None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://rd   @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   rf   ztuple[str | dict, str])Fz**)r   r   r   r   r   r   rf   r   )rg   rh   ri   rj   r   rr   rk   rs   rt   staticmethodr    classmethodr    r-   r,   r   r      ss    )Gc#L*#M4. .` CG

)-
=@
	
 
r-   r   )rj   
__future__r   stringr*   r   typingr   azure.core.exceptionsr   kombu.utils.encodingr   kombu.utils.jsonr   r	   kombu.utils.objectsr
   rd   r   azure.storage.queuer   r   azure.identityr   r   punctuationordrm   r   r   )cs   0r,   <module>r      s   2h #    5 ) ) / 6%; !,,CFDL 
mCgoo mC`A
!! A
C    %! $%s)   B B" B1BB"	B.-B.