Ë
    UV.jG  ã                  ó(  — 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	Zd
Z G d„ de	j                  «      Z G d„ dej                  e	j                  «      Z G d„ dej                   «      Z G d„ de	j"                  «      Z G d„ de«      Zy)aÕ  pyamqp transport module for Kombu.

Pure-Python amqp transport using py-amqp library.

Features
========
* Type: Native
* Supports Direct: Yes
* Supports Topic: Yes
* Supports Fanout: Yes
* Supports Priority: Yes
* Supports TTL: Yes

Connection String
=================
Connection string can have the following formats:

.. code-block::

    amqp://[USER:PASSWORD@]BROKER_ADDRESS[:PORT][/VIRTUALHOST]
    [USER:PASSWORD@]BROKER_ADDRESS[:PORT][/VIRTUALHOST]
    amqp://

For TLS encryption use:

.. code-block::

    amqps://[USER:PASSWORD@]BROKER_ADDRESS[:PORT][/VIRTUALHOST]

Transport Options
=================
Transport Options are passed to constructor of underlying py-amqp
:class:`~kombu.connection.Connection` class.

Using TLS
=========
Transport over TLS can be enabled by ``ssl`` parameter of
:class:`~kombu.Connection` class. By setting ``ssl=True``, TLS transport is
used::

    conn = Connect('amqp://', ssl=True)

This is equivalent to ``amqps://`` transport URI::

    conn = Connect('amqps://')

For adding additional parameters to underlying TLS, ``ssl`` parameter should
be set with dict instead of True::

    conn = Connect('amqp://broker.example.com', ssl={
            'keyfile': '/path/to/keyfile'
            'certfile': '/path/to/certfile',
            'ca_certs': '/path/to/ca_certfile'
        }
    )

All parameters are passed to ``ssl`` parameter of
:class:`amqp.connection.Connection` class.

SSL option ``server_hostname`` can be set to ``None`` which is causing using
hostname from broker URL. This is useful when failover is used to fill
``server_hostname`` with currently used broker::

    conn = Connect('amqp://broker1.example.com;broker2.example.com', ssl={
            'server_hostname': None
        }
    )
é    )ÚannotationsN)Úget_manager)Úversion_string_as_tupleé   )Úbase©Úto_rabbitmq_queue_argumentsi(  i'  c                  ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚMessagezAMQP Message.c                ó   •— |j                   }t        ‰| �  d|j                  ||j                  |j                  d«      |j                  d«      |j                  |j                   |j                  d«      xs i dœ|¤Ž y )NÚcontent_typeÚcontent_encodingÚapplication_headers)ÚbodyÚchannelÚdelivery_tagr   r   Údelivery_infoÚ
propertiesÚheaders© )r   ÚsuperÚ__init__r   r   Úgetr   )ÚselfÚmsgr   ÚkwargsÚpropsÚ	__class__s        €úXC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\kombu/transport/pyamqp.pyr   zMessage.__init__X   sv   ø€ Ø—‘ˆÜ‰Ñð 		Ø—‘ØØ×)Ñ)ØŸ™ >Ó2Ø"ŸY™YÐ'9Ó:Ø×+Ñ+Ø—~‘~Ø—I‘IÐ3Ó4Ò:¸ñ		ð ó		ó    ©N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__©r   s   @r   r   r   U   s   ø„ Ù÷ñ r    r   c                  óH   — e Zd ZdZeZdddddej                  fd„Zd„ Zd„ Zy)ÚChannelzAMQP Channel.Nc                ó&   —  ||f||||dœ|xs i ¤ŽS )z<Prepare message so that it can be sent using this transport.)Úpriorityr   r   r   r   )r   r   r,   r   r   r   r   Ú_Messages           r   Úprepare_messagezChannel.prepare_messagek   s4   € ñ Øð
àØ%Ø-Ø 'ñ
ð Ò˜Bñ
ð 	
r    c                ó   — t        |fi |¤ŽS r!   r   )r   Ú	argumentsr   s      r   Úprepare_queue_argumentszChannel.prepare_queue_argumentsx   s   € Ü*¨9Ñ?¸Ñ?Ð?r    c                ó(   — | j                  || ¬«      S )z4Convert encoded message body back to a Python value.©r   )r   )r   Úraw_messages     r   Úmessage_to_pythonzChannel.message_to_python{   s   € à�|‰|˜K°ˆ|Ó6Ð6r    )	r#   r$   r%   r&   r   Úamqpr.   r1   r5   r   r    r   r*   r*   f   s-   „ Ùà€Gà-1Ø%)¸DØ $°ÀÇÁó
ò@ó7r    r*   c                  ó   — e Zd ZdZeZy)Ú
ConnectionzAMQP Connection.N)r#   r$   r%   r&   r*   r   r    r   r8   r8   €   s
   „ Ùà�Gr    r8   c                  ó†  — e Zd ZdZeZeZeZe	j                  j                  Z
e	j                  j                  Ze	j                  j                  Ze	j                  j                  ZdZdZej"                  j$                  j'                  dd¬«      Z	 dd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Ze d„ «       Z!d„ Z"y)Ú	TransportzAMQP Transport.zpy-amqpr6   T)ÚasynchronousÚ
heartbeatsNc                óf   — || _         |xs | j                  | _        |xs | j                  | _        y r!   )ÚclientÚdefault_portÚdefault_ssl_port)r   r>   r?   r@   r   s        r   r   zTransport.__init__ž   s/   € àˆŒØ(Ò=¨D×,=Ñ,=ˆÔØ 0Ò I°D×4IÑ4IˆÕr    c                ó"   — t         j                  S r!   )r6   Ú__version__©r   s    r   Údriver_versionzTransport.driver_version¤   s   € Ü×ÑÐr    c                ó"   — |j                  «       S r!   r3   ©r   Ú
connections     r   Úcreate_channelzTransport.create_channel§   s   € Ø×!Ñ!Ó#Ð#r    c                ó&   —  |j                   di |¤ŽS )Nr   )Údrain_events)r   rG   r   s      r   rJ   zTransport.drain_eventsª   s   € Ø&ˆz×&Ñ&Ñ0¨Ñ0Ð0r    c                ó*   — |�|j                  «        y y r!   )ÚcollectrF   s     r   Ú_collectzTransport._collect­   s   € ØÐ!Ø×ÑÕ ð "r    c                óÆ  — | j                   }| j                  j                  «       D ]   \  }}t        ||d«      rŒt	        |||«       Œ" |j
                  dk(  rd|_        t        |j                  t        «      r6d|j                  v r(|j                  d   €|j
                  |j                  d<   t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   dœ	fi |j"                  xs i ¤Ž} | j$                  di |¤Ž}| j                   |_         |j'                  «        |S )z(Establish connection to the AMQP broker.NÚ	localhostz	127.0.0.1Úserver_hostname)	ÚhostÚuseridÚpasswordÚlogin_methodÚvirtual_hostÚinsistÚsslÚconnect_timeoutÚ	heartbeatr   )r>   Údefault_connection_paramsÚitemsÚgetattrÚsetattrÚhostnameÚ
isinstancerW   ÚdictrQ   rR   rS   rT   rU   rV   rX   rY   Útransport_optionsr8   Úconnect)r   ÚconninfoÚnameÚdefault_valueÚoptsÚconns         r   Úestablish_connectionzTransport.establish_connection±   s4  € à—;‘;ˆØ#'×#AÑ#A×#GÑ#GÖ#IÑˆD�-Ü˜8 T¨4Õ0Ü˜ $¨Õ6ð $Jð ×Ñ Ò+Ø +ˆHÔä�h—l‘l¤DÔ)Ø! X§\¡\Ñ1Ø—‘Ð.Ñ/Ð7Ø.6×.?Ñ.?ˆH�L‰LÐ*Ñ+ÜØ—M‘MØ—o‘oØ ×)Ñ)Ø$×1Ñ1Ø$×1Ñ1Ø—o‘oØ—<‘<Ø'×7Ñ7Ø!×+Ñ+ñ

ñ 
/ð ×'Ñ'Ò-¨2ñ
/ˆð ˆt�‰Ñ& Ñ&ˆØ—k‘kˆŒØ�‰ŒØˆr    c                ó   — |j                   S r!   )Ú	connectedrF   s     r   Úverify_connectionzTransport.verify_connectionÎ   ó   € Ø×#Ñ#Ð#r    c                ó2   — d|_         |j                  «        y)z!Close the AMQP broker connection.N)r>   ÚcloserF   s     r   Úclose_connectionzTransport.close_connectionÑ   s   € à ˆ
ÔØ×ÑÕr    c                ó   — |j                   S r!   )rY   rF   s     r   Úget_heartbeat_intervalz Transport.get_heartbeat_intervalÖ   rl   r    c                óv   — d|j                   _        |j                  |j                  | j                  ||«       y ©NT)Ú	transportÚraise_on_initial_eintrÚ
add_readerÚsockÚon_readable)r   rG   Úloops      r   Úregister_with_event_loopz"Transport.register_with_event_loopÙ   s,   € Ø6:ˆ
×ÑÔ3Ø�‰˜
Ÿ™¨×)9Ñ)9¸:ÀtÕLr    c                ó&   — |j                  |¬«      S )N)Úrate)Úheartbeat_tick)r   rG   r|   s      r   Úheartbeat_checkzTransport.heartbeat_checkÝ   s   € Ø×(Ñ(¨dÐ(Ó3Ð3r    c                óf   — |j                   }|j                  d«      dk(  rt        |d   «      dk  S y)NÚproductÚRabbitMQÚversion)é   rƒ   T)Úserver_propertiesr   r   )r   rG   r   s      r   Úqos_semantics_matches_specz$Transport.qos_semantics_matches_specà   s6   € Ø×,Ñ,ˆØ�9‰9�YÓ :Ò-Ü*¨5°Ñ+;Ó<¸vÑEÐEØr    c                ój   — dd| j                   j                  r| j                  n| j                  dddœS )NÚguestrO   ÚPLAIN)rR   rS   Úportr^   rT   )r>   rW   r@   r?   rC   s    r   rZ   z#Transport.default_connection_paramsæ   s6   € ð ØØ.2¯k©k¯oªo�T×*Ò*Ø×+Ñ+Ø#Ø#ñ
ð 	
r    c                ó4   — t        | j                  g|¢­i |¤ŽS r!   )r   r>   )r   Úargsr   s      r   r   zTransport.get_managerñ   s   € Ü˜4Ÿ;™;Ð8¨Ò8°Ñ8Ð8r    )NN)é   )#r#   r$   r%   r&   r8   ÚDEFAULT_PORTr?   ÚDEFAULT_SSL_PORTr@   r6   Úconnection_errorsÚchannel_errorsÚrecoverable_connection_errorsÚrecoverable_channel_errorsÚdriver_nameÚdriver_typer   r:   Ú
implementsÚextendr   rD   rH   rJ   rM   rh   rk   ro   rq   rz   r~   r…   ÚpropertyrZ   r   r   r    r   r:   r:   †   sã   „ Ùà€Jà€LØ'Ðð Ÿ™×9Ñ9ÐØ—_‘_×3Ñ3€Nà�‰×5Ñ5ð "à!%§¡×!KÑ!KÐà€KØ€Kà—‘×*Ñ*×1Ñ1ØØð 2ó €Jð 6:óJò ò$ò1ò!òò:$òò
$òMó4òð ñ
ó ð
ó9r    r:   c                  ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚSSLTransportzAMQP SSL Transport.c                ót   •— t        ‰| �  |i |¤Ž | j                  j                  sd| j                  _        y y rs   )r   r   r>   rW   )r   r‹   r   r   s      €r   r   zSSLTransport.__init__ø   s2   ø€ Ü‰Ñ˜$Ð) &Ò)ð �{‰{�ŠØ"ˆD�K‰K�Oð r    r"   r(   s   @r   r™   r™   õ   s   ø„ Ù÷#ð #r    r™   )r&   Ú
__future__r   r6   Úkombu.utils.amq_managerr   Úkombu.utils.textr   Ú r   r	   r�   rŽ   r   r*   Ú
StdChannelr8   r:   r™   r   r    r   Ú<module>r       s€   ðñCõL #ã å /Ý 4å Ý -à€ØÐ ôˆd�l‰lô ô"7ˆd�l‰l˜DŸO™Oô 7ô4�—‘ô ôl9�—‘ô l9ô^#�9õ #r    