o
    wvXj¿  ã                   @   sÀ   d Z ddlmZ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 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G dd„ deƒZdS )zPure-Python amqp transport.é    )Úabsolute_importÚunicode_literalsN)Úitems)Úget_manager)Úversion_string_as_tupleé   )Úbase©Úto_rabbitmq_queue_argumentsi(  i'  c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚMessagezAMQP Message.Nc                    sP   |j }tt| ƒjd|j||j| d¡| d¡|j|j | d¡p i dœ|¤Ž d S )NÚcontent_typeÚcontent_encodingÚapplication_headers)ÚbodyÚchannelÚdelivery_tagr   r   Údelivery_infoÚ
propertiesÚheaders© )r   Úsuperr   Ú__init__r   r   Úgetr   )ÚselfÚmsgr   ÚkwargsÚprops©Ú	__class__r   úS/var/www/html/myproject/venv/lib/python3.10/site-packages/kombu/transport/pyamqp.pyr      s   ø	
÷zMessage.__init__©N©Ú__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ddejfdd„Zdd„ Zdd„ ZdS )	ÚChannelzAMQP Channel.Nc                 C   s   ||f||||dœ|p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   Ú_Messager   r   r   Úprepare_message'   s   ÿûúzChannel.prepare_messagec                 K   s   t |fi |¤ŽS r    r	   )r   Ú	argumentsr   r   r   r   Úprepare_queue_arguments4   ó   zChannel.prepare_queue_argumentsc                 C   s   | j || d�S )z4Convert encoded message body back to a Python value.©r   )r   )r   Úraw_messager   r   r   Úmessage_to_python7   s   zChannel.message_to_python)	r"   r#   r$   r%   r   Úamqpr*   r,   r0   r   r   r   r   r'   "   s    
þr'   c                   @   s   e Zd ZdZeZdS )Ú
ConnectionzAMQP Connection.N)r"   r#   r$   r%   r'   r   r   r   r   r2   <   s    r2   c                   @   sÐ   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d�Z	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d„Zdd„ Ze d d!„ ƒZ!d"d#„ Z"dS )&Ú	TransportzAMQP Transport.zpy-amqpr1   T)ÚasynchronousÚ
heartbeatsNc                 K   s"   || _ |p| j| _|p| j| _d S r    )ÚclientÚdefault_portÚdefault_ssl_port)r   r6   r7   r8   r   r   r   r   r   Z   s   zTransport.__init__c                 C   s   t jS r    )r1   Ú__version__©r   r   r   r   Údriver_version`   ó   zTransport.driver_versionc                 C   s   |  ¡ S r    r.   ©r   Ú
connectionr   r   r   Úcreate_channelc   s   zTransport.create_channelc                 K   s   |j di |¤ŽS )Nr   )Údrain_events)r   r>   r   r   r   r   r@   f   r-   zTransport.drain_eventsc                 C   s   |d ur
|  ¡  d S d S r    )Úcollectr=   r   r   r   Ú_collecti   s   ÿzTransport._collectc                 C   s¢   | j }t| jƒD ]\}}t||dƒst|||ƒ q|jdkr!d|_t|j|j|j	|j
|j|j|j|j|jdœ	fi |jp<i ¤Ž}| jdi |¤Ž}| j |_ | ¡  |S )z(Establish connection to the AMQP broker.NÚ	localhostz	127.0.0.1)	ÚhostÚuseridÚpasswordÚlogin_methodÚvirtual_hostÚinsistÚsslÚconnect_timeoutÚ	heartbeatr   )r6   r   Údefault_connection_paramsÚgetattrÚsetattrÚhostnameÚdictrD   rE   rF   rG   rH   rI   rJ   rK   rL   Útransport_optionsr2   Úconnect)r   ÚconninfoÚnameÚdefault_valueÚoptsÚconnr   r   r   Úestablish_connectionm   s0   €
÷
özTransport.establish_connectionc                 C   ó   |j S r    )Ú	connectedr=   r   r   r   Úverify_connection…   r<   zTransport.verify_connectionc                 C   s   d|_ | ¡  dS )z!Close the AMQP broker connection.N)r6   Úcloser=   r   r   r   Úclose_connectionˆ   s   zTransport.close_connectionc                 C   rZ   r    )rL   r=   r   r   r   Úget_heartbeat_interval�   r<   z Transport.get_heartbeat_intervalc                 C   s    d|j _| |j| j||¡ d S ©NT)Ú	transportÚraise_on_initial_eintrÚ
add_readerÚsockÚon_readable)r   r>   Úloopr   r   r   Úregister_with_event_loop�   s   z"Transport.register_with_event_loopé   c                 C   s   |j |d�S )N)Úrate)Úheartbeat_tick)r   r>   ri   r   r   r   Úheartbeat_check”   s   zTransport.heartbeat_checkc                 C   s(   |j }| d¡dkrt|d ƒdk S dS )NÚproductÚRabbitMQÚversion)é   ro   T)Úserver_propertiesr   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ÚguestrC   ÚAMQPLAIN)rE   rF   ÚportrP   rG   )r6   rJ   r8   r7   r:   r   r   r   rM   �   s   úz#Transport.default_connection_paramsc                 O   s   t | jg|¢R i |¤ŽS r    )r   r6   ©r   Úargsr   r   r   r   r   ¨   s   zTransport.get_manager)NN)rh   )#r"   r#   r$   r%   r2   ÚDEFAULT_PORTr7   ÚDEFAULT_SSL_PORTr8   r1   Úconnection_errorsÚchannel_errorsÚrecoverable_connection_errorsÚrecoverable_channel_errorsÚdriver_nameÚdriver_typer   r3   Ú
implementsÚextendr   r;   r?   r@   rB   rY   r\   r^   r_   rg   rk   rq   ÚpropertyrM   r   r   r   r   r   r3   B   s@    ÿþ
ÿ


r3   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚSSLTransportzAMQP SSL Transport.c                    s.   t t| ƒj|i |¤Ž | jjsd| j_d S d S r`   )r   r‚   r   r6   rJ   ru   r   r   r   r   ¯   s   ÿzSSLTransport.__init__r!   r   r   r   r   r‚   ¬   s    r‚   )r%   Ú
__future__r   r   r1   Ú
kombu.fiver   Úkombu.utils.amq_managerr   Úkombu.utils.textr   Ú r   r
   rw   rx   r   r'   Ú
StdChannelr2   r3   r‚   r   r   r   r   Ú<module>   s    j