Ë
    UV.jzG  ã                  óÖ  — d Z ddlmZ ddlZddlmZ ddlmZ ddlZ	ddl
Z	ddlZddlmZmZmZmZmZ ddlmZ 	 ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddl m!Z!  e"ejF                  «      h d£z
  Z$ e%d«       e%d«      ie$D � ci c]  }  e%| «       e%d«      “Œ c} ¥Z& G d„ d«      Z' G d„ de!jP                  «      Z( G d„ de!jR                  «      Z)y# e$ r dZdZY Œ w xY wc c} w )aX  Azure Service Bus Message Queue transport module for kombu.

Note that the Shared Access Policy used to connect to Azure Service Bus
requires Manage, Send and Listen claims since the broker will create new
queues and delete old queues as required.


Notes when using with Celery if you are experiencing issues with programs not
terminating properly. The Azure Service Bus SDK uses the Azure uAMQP library
which in turn creates some threads. If the AzureServiceBus Channel is closed,
said threads will be closed properly, but it seems there are times when Celery
does not do this so these threads will be left running. As the uAMQP threads
are not marked as Daemon threads, they will not be killed when the main thread
exits. Setting the ``uamqp_keep_alive_interval`` transport option to 0 will
prevent the keep_alive thread from starting


More information about Azure Service Bus:
https://azure.microsoft.com/en-us/services/service-bus/

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::

    azureservicebus://SAS_POLICY_NAME:SAS_KEY@SERVICE_BUSNAMESPACE
    azureservicebus://DefaultAzureCredential@SERVICE_BUSNAMESPACE
    azureservicebus://ManagedIdentityCredential@SERVICE_BUSNAMESPACE

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

* ``queue_name_prefix`` - String prefix to prepend to queue names in a
  service bus namespace.
* ``wait_time_seconds`` - Number of seconds to wait to receive messages.
  Default ``5``
* ``peek_lock_seconds`` - Number of seconds the message is visible for before
  it is requeued and sent to another consumer. Default ``60``
* ``uamqp_keep_alive_interval`` - Interval in seconds the Azure uAMQP library
  should send keepalive messages. Default ``30``
* ``retry_total`` - Azure SDK retry total. Default ``3``
* ``retry_backoff_factor`` - Azure SDK exponential backoff factor.
  Default ``0.8``
* ``retry_backoff_max`` - Azure SDK retry total time. Default ``120``
é    )ÚannotationsN)ÚEmpty)ÚAny)ÚServiceBusClientÚServiceBusMessageÚServiceBusReceiveModeÚServiceBusReceiverÚServiceBusSender)ÚServiceBusAdministrationClient)ÚDefaultAzureCredentialÚManagedIdentityCredential)Úbytes_to_strÚsafe_str)ÚdumpsÚloads)Úcached_propertyé   )Úvirtual>   Ú-Ú.Ú_r   r   r   c                  ó,   — e Zd ZdZ	 	 d	 	 	 dd„Zdd„Zy)ÚSendReceivez"Container for Sender and Receiver.Nc                ó    — || _         || _        y ©N)ÚreceiverÚsender)Úselfr   r   s      úaC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\kombu/transport/azureservicebus.pyÚ__init__zSendReceive.__init__`   s   € ð -5ˆŒØ(.ˆ�ó    c                óº   — | j                   r!| j                   j                  «        d | _         | j                  r"| j                  j                  «        d | _        y y r   )r   Úcloser   ©r   s    r   r#   zSendReceive.closef   sC   € Ø�=Š=Ø�M‰M×ÑÔ!Ø ˆDŒMØ�;Š;Ø�K‰K×ÑÔØˆD�Kð r!   ©NN)r   úServiceBusReceiver | Noner   úServiceBusSender | None©ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r#   © r!   r   r   r   ]   s'   „ Ù,ð 8<Ø37ð/Ø4ð/à0ó/ôr!   r   c                  óP  ‡ — e Zd ZU dZdZded<   dZded<   dZded<   d	Zded
<   dZ	ded<   dZ
ded<   dZded<   i Zded<    e«       Zded<   ˆ fd„Zd4d„Zˆ fd„Zˆ fd„Z	 	 d5	 	 	 	 	 	 	 d6d„Zd7d„Zej,                  df	 	 	 	 	 	 	 d8d„Z	 d9	 	 	 	 	 d:d„Zd;d „Zd7d!„Zd<d"„Zd<d#„Z	 d9	 	 	 	 	 d=d$„Zd>d?ˆ fd%„Zd@d&„ZdAd'„Z d4d(„Z!e"dBd)„«       Z#e"dCd*„«       Z$e%d+„ «       Z&e%d,„ «       Z'e"dDd-„«       Z(e"dAd.„«       Z)e"dAd/„«       Z*e"dAd0„«       Z+e"dAd1„«       Z,e"dEd2„«       Z-e"dAd3„«       Z.ˆ xZ/S )FÚChannelzAzure Service Bus channel.é   ÚintÚdefault_wait_time_secondsé<   Údefault_peek_lock_secondsé   Ú!default_uamqp_keep_alive_intervalé   Údefault_retry_totalgš™™™™™é?ÚfloatÚdefault_retry_backoff_factoréx   Údefault_retry_backoff_maxzkombu%(vhost)sÚstrÚdomain_formatzdict[str, SendReceive]Ú_queue_cachezset[str]Ú_noack_queuesc                óž   •— t        ‰| �  |i |¤Ž d | _        d | _        d | _        d | _        | j                  «        d| j                  _        y )NF)	Úsuperr    Ú
_namespaceÚ_policyÚ_sas_keyÚ_connection_stringÚ_try_parse_connection_stringÚqosÚrestore_at_shutdown)r   ÚargsÚkwargsÚ	__class__s      €r   r    zChannel.__init__€   sJ   ø€ Ü‰Ñ˜$Ð) &Ò)àˆŒØˆŒØˆŒØ"&ˆÔà×)Ñ)Ô+à',ˆ�‰Õ$r!   c                ó4  — t         j                  | j                  j                  «      \  | _        | _        t        �t        | j
                  t        «      s t        �t        | j
                  t        «      ry d| j
                  v r)| j
                  j                  dd«      \  | _
        | _        d| j                  z   | j                  | j                  dœ}dj                  |j                  «       D ��cg c]  \  }}|dz   |z   ‘Œ c}}«      | _        y c c}}w )NÚ:r   zsb://)ÚEndpointÚSharedAccessKeyNameÚSharedAccessKeyÚ;Ú=)Ú	TransportÚ	parse_uriÚconninfoÚhostnamerE   Ú_credentialr   Ú
isinstancer   ÚsplitrF   rG   ÚjoinÚitemsrH   )r   Ú	conn_dictÚkeyÚvalues       r   rI   z$Channel._try_parse_connection_stringŒ   sí   € Ü,5×,?Ñ,?Ø�M‰M×"Ñ"ó-$Ñ)ˆŒ˜Ô)ô #Ð.Ü˜4×+Ñ+Ô-CÔDä%Ð1Ü˜4×+Ñ+Ô-FÔGàà�$×"Ñ"Ñ"Ø*.×*:Ñ*:×*@Ñ*@ÀÀaÓ*HÑ'ˆDŒL˜$œ-ð   $§/¡/Ñ1Ø#'§<¡<Ø#Ÿ}™}ñ
ˆ	ð
 #&§(¡(Ø1:·±Ô1BÔCÑ1B¡: 3¨ˆS�3‰Y˜ÓÐ1BÒCó#EˆÕùÛCs   Ã4D
c                óf   •— |r| j                   j                  |«       t        ‰| �  ||g|¢­i |¤ŽS r   )rB   ÚaddrD   Úbasic_consume)r   ÚqueueÚno_ackrL   rM   rN   s        €r   rd   zChannel.basic_consume¤   sA   ø€ ÙØ×Ñ×"Ñ" 5Ô)Ü‰wÑ$Ø�6ð
Ø ò
Ø$*ñ
ð 	
r!   c                ó’   •— || j                   v r*| j                  |   }| j                  j                  |«       t        ‰| �  |«      S r   )Ú
_consumersÚ_tag_to_queuerB   ÚdiscardrD   Úbasic_cancel)r   Úconsumer_tagre   rN   s      €r   rk   zChannel.basic_cancel«   sC   ø€ Ø˜4Ÿ?™?Ñ*Ø×&Ñ& |Ñ4ˆEØ×Ñ×&Ñ& uÔ-Ü‰wÑ# LÓ1Ð1r!   Nc                óÎ   — || j                   v r;| j                   |   }|j                  xs ||_        |j                  xs ||_        |S t        ||«      }|| j                   |<   |S r   )rA   r   r   r   )r   Únamer   r   Úobjs        r   Ú_add_queue_to_cachezChannel._add_queue_to_cache±   sl   € ð
 �4×$Ñ$Ñ$Ø×#Ñ# DÑ)ˆCØŸ™Ò- vˆCŒJØŸ<™<Ò3¨8ˆCŒLð ˆ
ô ˜h¨Ó/ˆCØ&)ˆD×Ñ˜dÑ#Øˆ
r!   c                óÎ   — | j                   j                  |d «      }|�|j                  €:| j                  j	                  || j
                  ¬«      }| j                  ||¬«      }|S )N)Ú
keep_alive)r   )rA   Úgetr   Úqueue_serviceÚget_queue_senderÚuamqp_keep_alive_intervalrp   )r   re   Ú	queue_objr   s       r   Ú_get_asb_senderzChannel._get_asb_sender¿   sm   € Ø×%Ñ%×)Ñ)¨%°Ó6ˆ	ØÐ 	× 0Ñ 0Ð 8Ø×'Ñ'×8Ñ8Ø $×"@Ñ"@ð 9ó BˆFà×0Ñ0°¸vÐ0ÓFˆIØÐr!   c                óÜ   — |xs |}| j                   j                  |d «      }|�|j                  €;| j                  j	                  ||| j
                  ¬«      }| j                  ||¬«      }|S )N)Ú
queue_nameÚreceive_moderr   )r   )rA   rs   r   rt   Úget_queue_receiverrv   rp   )r   re   Ú	recv_modeÚqueue_cache_keyÚ	cache_keyrw   r   s          r   Ú_get_asb_receiverzChannel._get_asb_receiverÇ   s}   € ð $Ò, uˆ	Ø×%Ñ%×)Ñ)¨)°TÓ:ˆ	ØÐ 	× 2Ñ 2Ð :Ø×)Ñ)×<Ñ<Ø ¨yØ×9Ñ9ð =ó ;ˆHð ×0Ñ0°ÀXÐ0ÓNˆIØÐr!   c                óX   — t        t        |«      «      j                  |xs t        «      S )z:Format AMQP queue name into a valid ServiceBus queue name.)r?   r   Ú	translateÚCHARS_REPLACE_TABLE)r   rn   Útables      r   Úentity_namezChannel.entity_nameÔ   s$   € ô ”8˜D“>Ó"×,Ñ,¨UÒ-IÔ6IÓJÐJr!   c                 ó   — y r   r/   )r   Úmessages     r   Ú_restorezChannel._restoreÙ   s   € ð
 	r!   c                óœ  — | j                  | j                  |z   «      }	 | j                  |   S # t        $ r“ t	        j
                  t	        j                  | j                  ¬«      «      }	 | j                  j                  ||¬«       n-# t        j                  j                  j                  $ r Y nw xY w| j                  |«      cY S w xY w)z$Ensure a queue exists in ServiceBus.)Úseconds)rz   Úlock_duration)r…   Úqueue_name_prefixrA   ÚKeyErrorÚisodateÚduration_isoformatÚDurationÚpeek_lock_secondsÚqueue_mgmt_serviceÚcreate_queueÚazureÚcoreÚ
exceptionsÚResourceExistsErrorrp   )r   re   rM   r‹   s       r   Ú
_new_queuezChannel._new_queueà   sÀ   € à× Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆð	3Ø×$Ñ$ UÑ+Ð+øÜò 
	3ô $×6Ñ6Ü× Ñ ¨×)?Ñ)?Ô@óBˆMðØ×'Ñ'×4Ñ4Ø$°Mð 5õ Cøä—:‘:×(Ñ(×<Ñ<ò Ùðúà×+Ñ+¨EÓ2Ò2ð
	3ús3    / ¯<CÁ,B
Â	CÂ
'B4Â1CÂ3B4Â4CÃ
Cc                óÔ   — | j                  | j                  |z   «      }| j                  j                  |«       | j                  j                  |d«      }|r|j                  «        yy)zDelete queue by name.N)r…   rŒ   r’   Údelete_queuerA   Úpopr#   )r   re   rL   rM   Úsend_receive_objs        r   Ú_deletezChannel._deleteò   s^   € à× Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆà×Ñ×,Ñ,¨UÔ3Ø×,Ñ,×0Ñ0°¸Ó=ÐÙØ×"Ñ"Õ$ð r!   c                óÀ   — | j                  | j                  |z   «      }t        t        |«      «      }| j	                  |«      }|j
                  j                  |«       y)zPut message onto queue.N)r…   rŒ   r   r   rx   r   Úsend_messages)r   re   r‡   rM   Úmsgrw   s         r   Ú_putzChannel._putû   sO   € à× Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆÜ¤ g£Ó/ˆà×(Ñ(¨Ó/ˆ	Ø×Ñ×&Ñ& sÕ+r!   c                ó  — || j                   v rt        j                  nt        j                  }| j	                  | j
                  |z   «      }| j                  ||«      }|j                  j                  d|xs | j                  ¬«      }|s
t        «       ‚|d   }t        |j                  t        «      sdj                  |j                  «      }n|j                  }t        t!        |«      «      }||d   d   d<   ||d   d   d<   |S )	z/Try to retrieve a single message off ``queue``.r   ©Úmax_message_countÚmax_wait_timer   r!   Ú
propertiesÚdelivery_infoÚazure_messageÚazure_queue_name)rB   r   ÚRECEIVE_AND_DELETEÚ	PEEK_LOCKr…   rŒ   r€   r   Úreceive_messagesÚwait_time_secondsr   r[   ÚbodyÚbytesr]   r   r   )	r   re   Útimeoutr}   rw   Úmessagesr‡   r®   r    s	            r   Ú_getzChannel._get  s  € ð ˜×*Ñ*Ñ*ô *×<Ò<Ü0E×0OÑ0Oð 	ð × Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆà×*Ñ*¨5°)Ó<ˆ	Ø×%Ñ%×6Ñ6ØØ!Ò; T×%;Ñ%;ð 7ó =ˆñ Ü“'ˆMð ˜1‘+ˆÜ˜'Ÿ,™,¬Ô.Ø—8‘8˜GŸL™LÓ)‰Dà—<‘<ˆDä”L Ó&Ó'ˆØ>EˆˆLÑ˜/Ñ*¨?Ñ;ØAFˆˆLÑ˜/Ñ*Ð+=Ñ>àˆ
r!   c                óÀ  •— 	 | j                   j                  |«      j                  }|d   }| j                  |«      }	 |j                  j                  |d   «       t        ‰| �  |«       y # t        j                  j                  j                  $ r t        ‰| �  |«       Y y t        $ r t        ‰| �5  |«       Y y w xY w# t        $ r t        ‰| �  |«       Y y w xY w)Nr©   r¨   )rJ   rs   r§   r€   r   Úcomplete_messagerD   Ú	basic_ackr”   Ú
servicebusr–   ÚMessageAlreadySettledÚ	ExceptionÚbasic_rejectr�   )r   Údelivery_tagÚmultipler§   re   rw   rN   s         €r   rµ   zChannel.basic_ack#  sÏ   ø€ ð	0Ø ŸH™HŸL™L¨Ó6×DÑDˆMð "Ð"4Ñ5ˆEà×.Ñ.¨uÓ5ˆIð0Ø×"Ñ"×3Ñ3Ø! /Ñ2ô4ô ‘Ñ! ,Õ/øô ×#Ñ#×.Ñ.×DÑDò 0Ü‘Ñ! ,Ö/Üò 3Ü‘Ñ$ \Ö2ð3ûô ò 	,Ü‰GÑ˜lÖ+ð	,ús(   ƒ%C ¿A- Á-6B?Â%B?Â>B?ÃCÃCc                óŒ   — | j                  | j                  |z   «      }| j                  j                  |«      }|j                  S )z)Return the number of messages in a queue.)r…   rŒ   r’   Úget_queue_runtime_propertiesÚtotal_message_count)r   re   Úpropss      r   Ú_sizezChannel._size7  s?   € à× Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆØ×'Ñ'×DÑDÀUÓKˆà×(Ñ(Ð(r!   c                óz  — d}d}| j                  | j                  |z   «      }| j                  j                  |d«      }|| j                  vs|�|j
                  €$| j                  |t        j                  d|z   «      }	 |j
                  j                  |d¬«      }|t        |«      z  }t        |«      |k  r	 |S Œ=)z'Delete all current messages in a queue.r   é
   NÚpurge_gš™™™™™É?r£   )r…   rŒ   rA   rs   rB   r   r€   r   rª   r¬   Úlen)r   re   ÚnÚmax_purge_countrw   r±   s         r   Ú_purgezChannel._purge>  sÔ   € ð ˆØˆØ× Ñ  ×!7Ñ!7¸%Ñ!?Ó@ˆð ×%Ñ%×)Ñ)¨%°Ó6ˆ	Ø˜×*Ñ*Ñ*ØÐ 	× 2Ñ 2Ð :Ø×.Ñ.ØÜ%×8Ñ8¸(ÀUÑ:JóˆIð
 Ø ×)Ñ)×:Ñ:Ø"1Ø!ð ;ó ˆHð ”�X“ÑˆAä�8‹}˜Ò.Øàˆð r!   c                ó  — | j                   syd| _         | j                  j                  «       D ]  }|j                  «        Œ | j                  j	                  «        | j
                  �| j
                  j                  | «       y y y )NT)ÚclosedrA   Úvaluesr#   ÚclearÚ
connectionÚclose_channel)r   rw   s     r   r#   zChannel.closeZ  sk   € à�{Š{ØˆDŒKØ!×.Ñ.×5Ñ5Ö7�	Ø—‘Õ!ð 8à×Ñ×#Ñ#Ô%à�‰Ð*Ø—‘×-Ñ-¨dÕ3ð +ð r!   c                ó   — | j                   rAt        j                  | j                   | j                  | j                  | j
                  ¬«      S t        | j                  | j                  | j                  | j                  | j
                  ¬«      S )N)Úretry_totalÚretry_backoff_factorÚretry_backoff_max)rH   r   Úfrom_connection_stringrÏ   rÐ   rÑ   rE   rZ   r$   s    r   rt   zChannel.queue_servicee  s|   € à×"Ò"Ü#×:Ñ:Ø×'Ñ'Ø ×,Ñ,Ø%)×%>Ñ%>Ø"&×"8Ñ"8ô	ð ô  Ø�O‰OØ×ÑØ×(Ñ(Ø!%×!:Ñ!:Ø"×4Ñ4ô
ð 	
r!   c                ó˜   — | j                   rt        j                  | j                   «      S t        | j                  | j                  «      S r   )rH   r   rÒ   rE   rZ   r$   s    r   r’   zChannel.queue_mgmt_servicew  sE   € à×"Ò"Ü1×HÑHØ×'Ñ'óð ô .Ø�O‰O˜T×-Ñ-ó
ð 	
r!   c                ó.   — | j                   j                  S r   )rÌ   Úclientr$   s    r   rX   zChannel.conninfo‚  s   € à�‰×%Ñ%Ð%r!   c                óB   — | j                   j                  j                  S r   )rÌ   rÕ   Útransport_optionsr$   s    r   r×   zChannel.transport_options†  s   € à�‰×%Ñ%×7Ñ7Ð7r!   c                ó:   — | j                   j                  dd«      S )NrŒ   Ú )r×   rs   r$   s    r   rŒ   zChannel.queue_name_prefixŠ  s   € à×%Ñ%×)Ñ)Ð*=¸rÓBÐBr!   c                óN   — | j                   j                  d| j                  «      S )Nr­   )r×   rs   r4   r$   s    r   r­   zChannel.wait_time_secondsŽ  s)   € à×%Ñ%×)Ñ)Ð*=Ø*.×*HÑ*HóJð 	Jr!   c                ób   — t        | j                  j                  d| j                  «      d«      S )Nr‘   i,  )Úminr×   rs   r6   r$   s    r   r‘   zChannel.peek_lock_seconds“  s2   € ä�4×)Ñ)×-Ñ-Ð.AØ.2×.LÑ.LóNàóð 	r!   c                óN   — | j                   j                  d| j                  «      S )Nrv   )r×   rs   r8   r$   s    r   rv   z!Channel.uamqp_keep_alive_interval™  s'   € à×%Ñ%×)Ñ)Ø'Ø×2Ñ2ó
ð 	
r!   c                óN   — | j                   j                  d| j                  «      S )NrÏ   )r×   rs   r:   r$   s    r   rÏ   zChannel.retry_total   s&   € à×%Ñ%×)Ñ)Ø˜4×3Ñ3ó5ð 	5r!   c                óN   — | j                   j                  d| j                  «      S )NrÐ   )r×   rs   r<   r$   s    r   rÐ   zChannel.retry_backoff_factor¥  s(   € à×%Ñ%×)Ñ)Ø" D×$EÑ$EóGð 	Gr!   c                óN   — | j                   j                  d| j                  «      S )NrÑ   )r×   rs   r>   r$   s    r   rÑ   zChannel.retry_backoff_maxª  s(   € à×%Ñ%×)Ñ)Ø ×!?Ñ!?óAð 	Ar!   r(   r%   )rn   r?   r   r&   r   r'   r)   r   )re   r?   r)   r   )re   r?   r}   r   r~   z
str | Noner)   r   r   )rn   r?   r„   zdict[int, int] | Noner)   r?   )r‡   zvirtual.base.Messager)   r*   )re   r?   r)   r*   )re   r?   r°   zfloat | int | Noner)   zdict[str, Any])F)rº   r?   r»   Úboolr)   r*   )re   r?   r)   r3   )r)   r3   )r)   r   )r)   r   )r)   r?   )r)   r;   )0r+   r,   r-   r.   r4   Ú__annotations__r6   r8   r:   r<   r>   r@   rA   ÚsetrB   r    rI   rd   rk   rp   rx   r   r«   r€   r…   rˆ   r˜   r�   r¡   r²   rµ   rÀ   rÇ   r#   r   rt   r’   ÚpropertyrX   r×   rŒ   r­   r‘   rv   rÏ   rÐ   rÑ   Ú__classcell__)rN   s   @r   r1   r1   o   sD  ø… Ù$à%&Ð˜sÓ&Ø%'Ð˜sÓ'à-/Ð% sÓ/à Ð˜Ó à*-Ð  %Ó-à%(Ð˜sÓ(Ø)€M�3Ó)Ø+-€LÐ(Ó-Ù!›e€M�8Ó#ô
-óEô0
ô2ð 37Ø.2ðØðà/ðð ,ðð 
ó	óð 0E×/NÑ/NØ*.ðØðà,ðð (ðð 4?óð =AðKØðKØ$9ðKØEHóKó
ó3ó$%ó,ð +/ðØðà'ðð 
óö@0ó()óó8	4ð ò
ó ð
ð" ò
ó ð
ð ñ&ó ð&ð ñ8ó ð8ð òCó ðCð òJó ðJð òó ðð
 ò
ó ð
ð ò5ó ð5ð òGó ðGð òAó ôAr!   r1   c                  óF   — e Zd ZdZeZdZdZdZedd„«       Z	e
dd	d„«       Zy)
rV   zAzure Service Bus transport.r   NTc                óà  — | j                  dd«      } | j                  dd«      \  }}|j                  d«      s|dz  }dj                  «       |j                  «       k(  rt        €t        d«      ‚t	        «       }nYd	j                  «       |j                  «       k(  rt        €t        d
«      ‚t        «       }n|j                  dd«      \  }}|› d|› �}t        ||g«      st        d«      ‚||fS )Nzazureservicebus://rÙ   Ú@r   z.netz.servicebus.windows.netr   z]Azure Service Bus transport with a DefaultAzureCredential requires the azure-identity libraryr   z`Azure Service Bus transport with a ManagedIdentityCredential requires the azure-identity libraryrP   z|Need a URI like azureservicebus://{SAS policy name}:{SAS key}@{ServiceBus Namespace} or the azure Endpoint connection string)
ÚreplaceÚrsplitÚendswithÚlowerr   ÚImportErrorr   r\   ÚallÚ
ValueError)ÚuriÚ
credentialÚ	namespaceÚpolicyÚsas_keys        r   rW   zTransport.parse_uri¹  s  € ð �k‰kÐ.°Ó3ˆà #§
¡
¨3°Ó 2Ñˆ
�Ià×!Ñ! &Ô)ØÐ2Ñ2ˆIà#×)Ñ)Ó+¨z×/?Ñ/?Ó/AÒAÜ%Ð-Ü!ð #;ó <ð <ô 0Ó1‰JØ(×.Ñ.Ó0°J×4DÑ4DÓ4FÒFÜ(Ð0Ü!ð #;ó <ð <ô 3Ó4‰Jð )×.Ñ.¨s°AÓ6‰OˆF�GØ"˜8 1 W IÐ.ˆJô �I˜zÐ*Ô+Üð:óð ð ˜*Ð$Ð$r!   c                ó   — | j                  |«      \  }}t        |t        «      r5d|v r1|j                  dd«      \  }}dj	                  ||r||«      S ||«      S dj	                  |j
                  j                  |«      S )NrP   r   zazureservicebus://{}:{}@{}zazureservicebus://{}@{})rW   r[   r?   r\   ÚformatrN   r+   )Úclsrð   Úinclude_passwordÚmaskrò   rñ   ró   rô   s           r   Úas_urizTransport.as_uriä  s‘   € à #§¡¨cÓ 2Ñˆ	�:Ü�j¤#Ô&¨3°*Ñ+<Ø(×.Ñ.¨s°AÓ6‰OˆF�GØ/×6Ñ6ØÙ+�Øóð à15Øóð ð )×/Ñ/Ø× Ñ ×)Ñ)Øó
ð 	
r!   )rð   r?   r)   zDtuple[str, str | DefaultAzureCredential | ManagedIdentityCredential])Fz**)rð   r?   r)   r?   )r+   r,   r-   r.   r1   Úpolling_intervalÚdefault_portÚcan_parse_urlÚstaticmethodrW   Úclassmethodrú   r/   r!   r   rV   rV   °  sA   „ Ù&à€GàÐØ€LØ€Màò(%ó ð(%ðT ó
ó ñ
r!   rV   )*r.   Ú
__future__r   Ústringre   r   Útypingr   Úazure.core.exceptionsr”   Úazure.servicebus.exceptionsrŽ   Úazure.servicebusr   r   r   r	   r
   Úazure.servicebus.managementr   Úazure.identityr   r   rí   Úkombu.utils.encodingr   r   Úkombu.utils.jsonr   r   Úkombu.utils.objectsr   rÙ   r   rã   ÚpunctuationÚPUNCTUATIONS_TO_REPLACEÚordrƒ   r   r1   rV   )Úcs   0r   Ú<module>r     sò   ðñ7õr #ã Ý Ý ã Û "Û ÷0õ 0õ Gð%÷;÷ 8ß )Ý /å ñ ˜f×0Ñ0Ó1²OÑCÐ áˆƒH‰c�#‹hðá!8Ó9Ñ!8˜A�sˆ1ƒv‰s�3‹xÑÐ!8Ñ9ðÐ ÷ñ ô$~Aˆg�o‰oô ~AôB
B
�×!Ñ!õ B
øðK ò %Ø!ÐØ $Òð%üò :s   ºC ÂC&Ã	C#Ã"C#