o
    wvXjÍ  ã                   @   sä   d Z ddlmZ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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/
é    )Úabsolute_importÚunicode_literalsN)ÚChannelErrorÚConnectionError)ÚitemsÚvalues)Ú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                    s<   t 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   )Úsuperr   Ú__init__Úget)Úselfr   ÚpropsÚinfor   ©Ú	__class__© úX/var/www/html/myproject/venv/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„ t|ƒ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   r   )r   Ú	argumentsÚkwargsr   r   r   Úprepare_queue_argumentsD   s   zChannel.prepare_queue_arguments)NNNNN)r    r!   r"   r#   r   r(   r1   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   r2   I   s    r2   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   r8   r9   Ú_Transport__reader)r   r:   r0   r   r   r   r   g   s   
ÿ
zTransport.__init__c                 C   s   t jS ©N)r4   Ú__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   rB   r0   r   r   r   rD   t   s   zTransport.drain_eventsc              
   C   sž   | j }t| 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   )r:   r   Údefault_connection_paramsÚgetattrÚsetattrrK   ÚNotImplementedErrorÚNO_SSL_ERRORÚdictrE   rF   rG   rH   rI   rJ   rL   Útransport_optionsr2   rD   )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)r:   rD   ÚcloserA   r   r   r   Úclose_connectionŽ   s   zTransport.close_connectionc              	   C   sn   |d ur.t |jƒD ]}d |_q	z	t | ¡ ¡ W n ttfy#   Y nw |j ¡  |j	 ¡  d | j
_d | _
d S r<   )r   ÚchannelsrB   ÚosrZ   ÚfilenoÚOSErrorÚ
ValueErrorÚclearÚ	callbacksr:   rD   )r   rB   r   r   r   r   Ú_collect“   s   ÿ


zTransport._collectc                 C   s   |j S r<   )Ú	connectedrA   r   r   r   Úverify_connection    r@   zTransport.verify_connectionc                 C   s   |  | ¡ | j||¡ d S r<   )Ú
add_readerr^   Úon_readable)r   rB   Úloopr   r   r   Úregister_with_event_loop£   s   ÿz"Transport.register_with_event_loopc                 O   s   t | jg|¢R i |¤ŽS r<   )r   r:   )r   Úargsr0   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)é   rn   T)Úserver_propertiesÚAttributeErrorÚwarningsÚwarnÚUserWarningÚ	W_VERSIONr   r	   )r   rB   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ÚAMQPLAIN)rF   rG   ÚportÚhostnamerI   )r:   rK   r9   r8   r>   r   r   r   rM   µ   s   úz#Transport.default_connection_paramsN)$r    r!   r"   r#   r2   ÚDEFAULT_PORTr8   ÚDEFAULT_SSL_PORTr9   r   r3   Úconnection_errorsr   ÚsocketÚerrorÚIOErrorr_   Úchannel_errorsr   Údriver_typeÚdriver_nameÚ
implementsÚextendr   r?   rC   rD   rY   r[   rc   re   ri   r   ru   ÚpropertyrM   r   r   r   r   r3   P   s<    
ÿÿÿþ
r3   )r#   Ú
__future__r   r   r]   r~   rq   r5   r4   r   r   Ú
kombu.fiver   r   Úkombu.utils.amq_managerr   Úkombu.utils.textr	   Ú r   r   rt   r{   r|   rQ   r   r%   Ú
StdChannelr2   r3   r   r   r   r   Ú<module>   s(    