o
    ei                     @   sT   d Z ddlZddlmZ ddlmZmZ ddlmZ e	e
ZG dd dejZdS )z"Use pika with the Tornado IOLoop

    N)ioloop)nbio_interfaceselector_ioloop_adapter)base_connectionc                       s@   e Zd ZdZ						d fdd	Ze		d	ddZ  ZS )
TornadoConnectionz6The TornadoConnection runs on the Tornado IOLoop.
    NTc                    sF   t |tjr	|}n
t|ptj }tt	| j
||||||d dS )a   Create a new instance of the TornadoConnection class, connecting
        to RabbitMQ automatically.

        :param pika.connection.Parameters|None parameters: The connection
            parameters
        :param callable|None on_open_callback: The method to call when the
            connection is open
        :param callable|None on_open_error_callback: Called if the connection
            can't be established or connection establishment is interrupted by
            `Connection.close()`:
            on_open_error_callback(Connection, exception)
        :param callable|None on_close_callback: Called when a previously fully
            open connection is closed:
            `on_close_callback(Connection, exception)`, where `exception` is
            either an instance of `exceptions.ConnectionClosed` if closed by
            user or broker or exception of another type that describes the
            cause of connection failure
        :param ioloop.IOLoop|nbio_interface.AbstractIOServices|None custom_ioloop:
            Override using the global IOLoop in Tornado
        :param bool internal_connection_workflow: True for autonomous connection
            establishment which is default; False for externally-managed
            connection workflow via the `create_connection()` factory

        )internal_connection_workflowN)
isinstancer   AbstractIOServicesr   SelectorIOServicesAdapterr   IOLoopinstancesuperr   __init__)self
parameterson_open_callbackon_open_error_callbackon_close_callbackcustom_ioloopr   nbio	__class__ _/var/www/html/pca-backend/venv/lib/python3.10/site-packages/pika/adapters/tornado_connection.pyr      s   

zTornadoConnection.__init__c                    s6   t |ptj  fdd} j||||dS )z`Implement
        :py:classmethod::`pika.adapters.BaseConnection.create_connection()`.

        c                    s   | du rt d | ddS )zConnection factory.NzIExpected pika.connection.Parameters instance, but got None in params arg.F)r   r   r   )
ValueError)paramsclsr   r   r   connection_factoryK   s   z?TornadoConnection.create_connection.<locals>.connection_factory)connection_configsr   r   workflowon_done)r   r
   r   r   r   _start_connection_workflow)r   r   r!   r   r    r   r   r   r   create_connection>   s   

z#TornadoConnection.create_connection)NNNNNT)NN)__name__
__module____qualname____doc__r   classmethodr#   __classcell__r   r   r   r   r      s    ,r   )r'   loggingtornador   pika.adapters.utilsr   r   pika.adaptersr   	getLoggerr$   LOGGERBaseConnectionr   r   r   r   r   <module>   s    
