o
    —¨Êh†  ã                   @  sÐ   d Z ddlmZ ddlZddlZddlZddl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 d
ZdZdZdZG dd„ dejƒZG dd„ dejejƒZG dd„ dejƒZG dd„ dejƒZdS )zT`librabbitmq`_ transport.

.. _`librabbitmq`: https://pypi.org/project/librabbitmq/
é    )ÚannotationsN)ÚChannelErrorÚConnectionError)Úget_manager)Úversion_string_as_tupleé   )Úbase)Úto_rabbitmq_queue_argumentsz‘
    librabbitmq version too old to detect RabbitMQ version information
    so make sure you are using librabbitmq 1.5 when using rabbitmq > 3.3
i(  i'  zAssl not supported by librabbitmq, please use pyamqp:// or stunnelc                      s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚMessagezAMQP Message (librabbitmq).c                   s8   t ƒ j||||| d¡| d¡| d¡| d¡d� d S )NÚdelivery_tagÚcontent_typeÚcontent_encodingÚheaders)ÚchannelÚbodyÚdelivery_infoÚ
propertiesr   r   r   r   )ÚsuperÚ__init__Úget)Úselfr   ÚpropsÚinfor   ©Ú	__class__© úM/var/www/html/env/lib/python3.10/site-packages/kombu/transport/librabbitmq.pyr   $   s   
øzMessage.__init__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r   r   r   r   r
   !   s    r
   c                   @  s,   e Zd ZdZeZ			ddd„Zdd„ ZdS )ÚChannelzAMQP Channel (librabbitmq).Nc                 C  s:   |dur|ni }|  |||dœ¡ |dur||d< ||fS )z%Encapsulate data into a AMQP message.N)r   r   r   Úpriority)Úupdate)r   r   r#   r   r   r   r   r   r   r   Úprepare_message5   s   þzChannel.prepare_messagec                 K  s"   t |fi |¤Ž}dd„ | ¡ D ƒS )Nc                 S  s   i | ]
\}}|  d ¡|“qS )Úutf8)Úencode)Ú.0ÚkÚvr   r   r   Ú
<dictcomp>F   s    z3Channel.prepare_queue_arguments.<locals>.<dictcomp>)r	   Úitems)r   Ú	argumentsÚkwargsr   r   r   Úprepare_queue_argumentsD   s   zChannel.prepare_queue_arguments)NNNNN)r   r   r   r    r
   r%   r/   r   r   r   r   r"   0   s    
þr"   c                   @  s   e Zd ZdZeZeZdS )Ú
ConnectionzAMQP Connection (librabbitmq).N)r   r   r   r    r"   r
   r   r   r   r   r0   I   s    r0   c                   @  s¾   e Zd ZdZeZeZeZe	j
jeejeef Ze	j
jef ZdZdZe	j
jjddd�Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!e"dd„ ƒZ#dS ) Ú	TransportzAMQP Transport (librabbitmq).ÚamqpÚlibrabbitmqTF)ÚasynchronousÚ
heartbeatsc                 K  s4   || _ | d¡p
| j| _| d¡p| j| _d | _d S )NÚdefault_portÚdefault_ssl_port)Úclientr   r6   r7   Ú_Transport__reader)r   r8   r.   r   r   r   r   g   s   
ÿ
zTransport.__init__c                 C  s   t jS ©N)r2   Ú__version__©r   r   r   r   Údriver_versionn   ó   zTransport.driver_versionc                 C  s   |  ¡ S r:   )r   ©r   Ú
connectionr   r   r   Úcreate_channelq   s   zTransport.create_channelc                 K  s   |j di |¤ŽS )Nr   )Údrain_events)r   r@   r.   r   r   r   rB   t   s   zTransport.drain_eventsc              
   C  sž   | j }| j ¡ D ]\}}t||dƒst|||ƒ q|jr ttƒ‚t|j	|j
|j|j|j|j|j|jdœfi |jp9i ¤Ž}| jdi |¤Ž}| j |_ |j| j _|S )z(Establish connection to the AMQP broker.N)ÚhostÚuseridÚpasswordÚvirtual_hostÚlogin_methodÚinsistÚsslÚconnect_timeoutr   )r8   Údefault_connection_paramsr,   ÚgetattrÚsetattrrI   ÚNotImplementedErrorÚNO_SSL_ERRORÚdictrC   rD   rE   rF   rG   rH   rJ   Útransport_optionsr0   rB   )r   ÚconninfoÚnameÚdefault_valueÚoptsÚconnr   r   r   Úestablish_connectionw   s.   €ø	÷

zTransport.establish_connectionc                 C  s   d| j _| ¡  dS )z!Close the AMQP broker connection.N)r8   rB   Úcloser?   r   r   r   Úclose_connectionŽ   s   zTransport.close_connectionc              	   C  sn   |d ur.|j  ¡ D ]}d |_q	z	t | ¡ ¡ W n ttfy#   Y nw |j  ¡  |j	 ¡  d | j
_d | _
d S r:   )ÚchannelsÚvaluesr@   ÚosrX   ÚfilenoÚOSErrorÚ
ValueErrorÚclearÚ	callbacksr8   rB   )r   r@   r   r   r   r   Ú_collect“   s   ÿ


zTransport._collectc                 C  s   |j S r:   )Ú	connectedr?   r   r   r   Úverify_connection    r>   zTransport.verify_connectionc                 C  s   |  | ¡ | j||¡ d S r:   )Ú
add_readerr]   Úon_readable)r   r@   Úloopr   r   r   Úregister_with_event_loop£   s   ÿz"Transport.register_with_event_loopc                 O  s   t | jg|¢R i |¤ŽS r:   )r   r8   )r   Úargsr.   r   r   r   r   ¨   s   zTransport.get_managerc                 C  sP   z|j }W n ty   t ttƒ¡ Y dS w | d¡dkr&t|d ƒdk S dS )NÚproductÚRabbitMQÚversion)é   rm   T)Úserver_propertiesÚAttributeErrorÚwarningsÚwarnÚUserWarningÚ	W_VERSIONr   r   )r   r@   r   r   r   r   Úqos_semantics_matches_spec«   s   
ûz$Transport.qos_semantics_matches_specc                 C  s    dd| j jr	| jn| jdddœS )NÚguestÚ	localhostÚPLAIN)rD   rE   ÚportÚhostnamerG   )r8   rI   r7   r6   r<   r   r   r   rK   µ   s   úz#Transport.default_connection_paramsN)$r   r   r   r    r0   ÚDEFAULT_PORTr6   ÚDEFAULT_SSL_PORTr7   r   r1   Úconnection_errorsr   ÚsocketÚerrorÚIOErrorr^   Úchannel_errorsr   Údriver_typeÚdriver_nameÚ
implementsÚextendr   r=   rA   rB   rW   rY   rb   rd   rh   r   rt   ÚpropertyrK   r   r   r   r   r1   P   s<    
ÿÿÿþ
r1   )r    Ú
__future__r   r\   r}   rp   r3   r2   r   r   Úkombu.utils.amq_managerr   Úkombu.utils.textr   Ú r   r	   rs   rz   r{   rO   r
   r"   Ú
StdChannelr0   r1   r   r   r   r   Ú<module>   s&    