U
    ø×cc;(  ã                   @   s:   d dl mZ ddlmZ ddlmZ G dd„ dejƒZdS )é   )ÚPoolé   )Úevent)ÚEnginec                   @   s€   e Zd ZdZdZeZedd„ ƒZe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S )Ú
PoolEventsa‘  Available events for :class:`_pool.Pool`.

    The methods here define the name of an event as well
    as the names of members that are passed to listener
    functions.

    e.g.::

        from sqlalchemy import event

        def my_on_checkout(dbapi_conn, connection_rec, connection_proxy):
            "handle an on checkout event"

        event.listen(Pool, 'checkout', my_on_checkout)

    In addition to accepting the :class:`_pool.Pool` class and
    :class:`_pool.Pool` instances, :class:`_events.PoolEvents` also accepts
    :class:`_engine.Engine` objects and the :class:`_engine.Engine` class as
    targets, which will be resolved to the ``.pool`` attribute of the
    given engine or the :class:`_pool.Pool` class::

        engine = create_engine("postgresql://scott:tiger@localhost/test")

        # will associate with engine.pool
        event.listen(engine, 'checkout', my_on_checkout)

    ZSomeEngineOrPoolc                 C   st   t |tƒr(t|tƒrtS t|tƒrp|S nHt |tƒr8|jS t |tƒrF|S t|dƒrlt|jjdƒrl|jj 	¡  nd S d S )NÚdispatchÚ_no_async_engine_events)
Ú
isinstanceÚtypeÚ
issubclassr   r   ÚpoolÚhasattrr   Z_eventsr   )ÚclsÚtarget© r   ú:/tmp/pip-unpacked-wheel-8u86ls_i/sqlalchemy/pool/events.pyÚ_accept_with-   s    




 ÿzPoolEvents._accept_withc                 K   s$   |j }| d|j¡ |jf |Ž d S )NZasyncio)Zdispatch_targetÚ
setdefaultZ_is_asyncioZbase_listen)r   Z	event_keyÚkwr   r   r   r   Ú_listen?   s    zPoolEvents._listenc                 C   s   dS )a  Called at the moment a particular DBAPI connection is first
        created for a given :class:`_pool.Pool`.

        This event allows one to capture the point directly after which
        the DBAPI module-level ``.connect()`` method has been used in order
        to produce a new DBAPI connection.

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        Nr   ©ÚselfÚdbapi_connectionÚconnection_recordr   r   r   ÚconnectG   s    zPoolEvents.connectc                 C   s   dS )a%  Called exactly once for the first time a DBAPI connection is
        checked out from a particular :class:`_pool.Pool`.

        The rationale for :meth:`_events.PoolEvents.first_connect`
        is to determine
        information about a particular series of database connections based
        on the settings used for all connections.  Since a particular
        :class:`_pool.Pool`
        refers to a single "creator" function (which in terms
        of a :class:`_engine.Engine`
        refers to the URL and connection options used),
        it is typically valid to make observations about a single connection
        that can be safely assumed to be valid about all subsequent
        connections, such as the database version, the server and client
        encoding settings, collation settings, and many others.

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        Nr   r   r   r   r   Úfirst_connectW   s    zPoolEvents.first_connectc                 C   s   dS )a‹  Called when a connection is retrieved from the Pool.

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        :param connection_proxy: the :class:`._ConnectionFairy` object which
          will proxy the public interface of the DBAPI connection for the
          lifespan of the checkout.

        If you raise a :class:`~sqlalchemy.exc.DisconnectionError`, the current
        connection will be disposed and a fresh connection retrieved.
        Processing of all checkout listeners will abort and restart
        using the new connection.

        .. seealso:: :meth:`_events.ConnectionEvents.engine_connect`
           - a similar event
           which occurs upon creation of a new :class:`_engine.Connection`.

        Nr   )r   r   r   Zconnection_proxyr   r   r   Úcheckoutp   s    zPoolEvents.checkoutc                 C   s   dS )aò  Called when a connection returns to the pool.

        Note that the connection may be closed, and may be None if the
        connection has been invalidated.  ``checkin`` will not be called
        for detached connections.  (They do not return to the pool.)

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        Nr   r   r   r   r   Úcheckinˆ   s    zPoolEvents.checkinc                 C   s   dS )a¦  Called before the "reset" action occurs for a pooled connection.

        This event represents
        when the ``rollback()`` method is called on the DBAPI connection
        before it is returned to the pool.  The behavior of "reset" can
        be controlled, including disabled, using the ``reset_on_return``
        pool argument.


        The :meth:`_events.PoolEvents.reset` event is usually followed by the
        :meth:`_events.PoolEvents.checkin` event is called, except in those
        cases where the connection is discarded immediately after reset.

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        .. seealso::

            :meth:`_events.ConnectionEvents.rollback`

            :meth:`_events.ConnectionEvents.commit`

        Nr   r   r   r   r   Úreset—   s    zPoolEvents.resetc                 C   s   dS )a|  Called when a DBAPI connection is to be "invalidated".

        This event is called any time the :meth:`._ConnectionRecord.invalidate`
        method is invoked, either from API usage or via "auto-invalidation",
        without the ``soft`` flag.

        The event occurs before a final attempt to call ``.close()`` on the
        connection occurs.

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        :param exception: the exception object corresponding to the reason
         for this invalidation, if any.  May be ``None``.

        .. versionadded:: 0.9.2 Added support for connection invalidation
           listening.

        .. seealso::

            :ref:`pool_connection_invalidation`

        Nr   ©r   r   r   Ú	exceptionr   r   r   Ú
invalidate³   s    zPoolEvents.invalidatec                 C   s   dS )aa  Called when a DBAPI connection is to be "soft invalidated".

        This event is called any time the :meth:`._ConnectionRecord.invalidate`
        method is invoked with the ``soft`` flag.

        Soft invalidation refers to when the connection record that tracks
        this connection will force a reconnect after the current connection
        is checked in.   It does not actively close the dbapi_connection
        at the point at which it is called.

        .. versionadded:: 1.0.3

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        :param exception: the exception object corresponding to the reason
         for this invalidation, if any.  May be ``None``.

        Nr   r   r   r   r   Úsoft_invalidateÏ   s    zPoolEvents.soft_invalidatec                 C   s   dS )aè  Called when a DBAPI connection is closed.

        The event is emitted before the close occurs.

        The close of a connection can fail; typically this is because
        the connection is already closed.  If the close operation fails,
        the connection is discarded.

        The :meth:`.close` event corresponds to a connection that's still
        associated with the pool. To intercept close events for detached
        connections use :meth:`.close_detached`.

        .. versionadded:: 1.1

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        Nr   r   r   r   r   Úcloseç   s    zPoolEvents.closec                 C   s   dS )aÑ  Called when a DBAPI connection is "detached" from a pool.

        This event is emitted after the detach occurs.  The connection
        is no longer associated with the given connection record.

        .. versionadded:: 1.1

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        :param connection_record: the :class:`._ConnectionRecord` managing the
         DBAPI connection.

        Nr   r   r   r   r   Údetachþ   s    zPoolEvents.detachc                 C   s   dS )aÁ  Called when a detached DBAPI connection is closed.

        The event is emitted before the close occurs.

        The close of a connection can fail; typically this is because
        the connection is already closed.  If the close operation fails,
        the connection is discarded.

        .. versionadded:: 1.1

        :param dbapi_connection: a DBAPI connection.
         The :attr:`._ConnectionRecord.dbapi_connection` attribute.

        Nr   )r   r   r   r   r   Úclose_detached  s    zPoolEvents.close_detachedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Z_target_class_docr   Z_dispatch_targetÚclassmethodr   r   r   r   r   r   r   r!   r"   r#   r$   r%   r   r   r   r   r      s"   

r   N)Úbaser   Ú r   Zengine.baser   ZEventsr   r   r   r   r   Ú<module>   s   