o
    qN)j!                     @  s  d 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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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dlmZ ddlmZ ddlmZ ddlmZ ddlmZ e
rd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dlm"Z" ddlm#Z# ddl$m%Z% G d d! d!eZ&G d"d# d#ee&Z'G d$d% d%eeZ(G d&d' d'e(Z)G d(d) d)eZ*G d*d+ d+eZ+e+Z,d,S )-a  
.. dialect:: mysql+aiomysql
    :name: aiomysql
    :dbapi: aiomysql
    :connectstring: mysql+aiomysql://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://github.com/aio-libs/aiomysql

The aiomysql dialect is SQLAlchemy's second Python asyncio dialect.

Using a special asyncio mediation layer, the aiomysql dialect is usable
as the backend for the :ref:`SQLAlchemy asyncio <asyncio_toplevel>`
extension package.

This dialect should normally be used only with the
:func:`_asyncio.create_async_engine` engine creation function::

    from sqlalchemy.ext.asyncio import create_async_engine

    engine = create_async_engine(
        "mysql+aiomysql://user:pass@hostname/dbname?charset=utf8mb4"
    )

    )annotations)
ModuleType)Any)Dict)Optional)Tuple)TYPE_CHECKING)Union   ) _connection_ping_reconnects_true)MySQLDialect_pymysql   )pool)util)AsyncAdapt_dbapi_connection)AsyncAdapt_dbapi_cursor)AsyncAdapt_dbapi_module)AsyncAdapt_dbapi_ss_cursor)AsyncAdapt_terminate)langhelpers)await_fallback)
await_only)AsyncIODBAPIConnection)AsyncIODBAPICursor)ConnectArgsType)DBAPIConnection)DBAPICursor)DBAPIModule)PoolProxiedConnection)URLc                   @     e Zd ZdZd	ddZdS )
AsyncAdapt_aiomysql_cursor 
connectionr   returnr   c                 C  s   | | jjjS N)cursor_adapt_connectiondbapiCursorselfr#   r"   r"   /var/www/html/finance.cargoinsureonline.com/_shared/backend-venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/aiomysql.py_make_new_cursorF   s   z+AsyncAdapt_aiomysql_cursor._make_new_cursorNr#   r   r$   r   __name__
__module____qualname__	__slots__r-   r"   r"   r"   r,   r!   C   s    r!   c                   @  r    )
AsyncAdapt_aiomysql_ss_cursorr"   r#   r   r$   r   c                 C  s   | | jjjjjS r%   )r&   r'   r(   aiomysqlcursorsSSCursorr*   r"   r"   r,   r-   Q   s   z.AsyncAdapt_aiomysql_ss_cursor._make_new_cursorNr.   r/   r"   r"   r"   r,   r4   L   s    r4   c                   @  s`   e Zd ZdZeZeZddddZdd
dZ	dddZ
dddZdddZdddZdddZdS )AsyncAdapt_aiomysql_connectionr"   F	reconnectboolr$   Nonec                 C  s<   |rJ | j jr| | jjdd d S | | j  d S )NF)r9   )r(   _send_false_to_pingawait__connectionping)r+   r9   r"   r"   r,   r?   a   s   z#AsyncAdapt_aiomysql_connection.pingOptional[str]c                 C  
   | j  S r%   )r>   character_set_namer+   r"   r"   r,   rB   h      
z1AsyncAdapt_aiomysql_connection.character_set_namevaluer   c                 C  s   |  | j| d S r%   )r=   r>   
autocommit)r+   rE   r"   r"   r,   rF   k   s   z)AsyncAdapt_aiomysql_connection.autocommitc                 C  rA   r%   )r>   get_autocommitrC   r"   r"   r,   rG   n   rD   z-AsyncAdapt_aiomysql_connection.get_autocommitc                 C  s   |  | j  d S r%   )r=   r>   ensure_closedrC   r"   r"   r,   closeq   s   z$AsyncAdapt_aiomysql_connection.closec                   s   | j  I d H  d S r%   )r>   rH   rC   r"   r"   r,   _terminate_graceful_closet   s   z8AsyncAdapt_aiomysql_connection._terminate_graceful_closec                 C  s   | j   d S r%   )r>   rI   rC   r"   r"   r,   _terminate_force_closew   s   z5AsyncAdapt_aiomysql_connection._terminate_force_closeN)F)r9   r:   r$   r;   )r$   r@   )rE   r   r$   r;   r$   r:   r$   r;   )r0   r1   r2   r3   r!   _cursor_clsr4   _ss_cursor_clsr?   rB   rF   rG   rI   rJ   rK   r"   r"   r"   r,   r8   Y   s    




r8   c                   @  s   e Zd ZdZeeZdS )&AsyncAdaptFallback_aiomysql_connectionr"   N)r0   r1   r2   r3   staticmethodr   r=   r"   r"   r"   r,   rP   |   s    rP   c                   @  sD   e Zd ZdddZddd	ZdddZejdddZdddZ	dS )AsyncAdapt_aiomysql_dbapir5   r   pymysqlc                 C  s.   || _ || _d| _|   |  \| _| _d S )Nformat)r5   rS   
paramstyle_init_dbapi_attributes_init_cursors_subclassesr)   r7   )r+   r5   rS   r"   r"   r,   __init__   s
   z"AsyncAdapt_aiomysql_dbapi.__init__r$   r;   c                 C  s@   dD ]}t | |t| j| qdD ]}t | |t| j| qd S )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorr[   IntegrityErrorProgrammingErrorInternalErrorNotSupportedError)NUMBERSTRINGDATETIMEBINARY	TIMESTAMPBinary)setattrgetattrr5   rS   )r+   namer"   r"   r,   rV      s
   z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributesargr   kwr8   c                 O  sV   | dd}| d| jj}t|rt| t||i |S t| t||i |S )Nasync_fallbackFasync_creator_fn)	popr5   connectr   asboolrP   r   r8   r   )r+   rl   rm   rn   
creator_fnr"   r"   r,   rq      s   
z!AsyncAdapt_aiomysql_dbapi.connectr:   c              	   C  s0   zt djj}W t|S  ttfy   Y dS w )zdetermine if aiomysql has deprecated, changed the default of,
        or removed the 'reconnect' argument of connection.ping().

        See #13306 and #10492

        zaiomysql.connectionT)
__import__r#   
ConnectionImportErrorAttributeErrorr   )r+   ru   r"   r"   r,   r<      s   	z-AsyncAdapt_aiomysql_dbapi._send_false_to_ping-Tuple[AsyncIODBAPICursor, AsyncIODBAPICursor]c                 C  s0   G dd d| j j}G dd d| j j}||fS )Nc                   @     e Zd ZdddZdS )	zBAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursorconnr   r$   r;   c                      d S r%   r"   r+   rz   r"   r"   r,   _show_warnings      zQAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor._show_warningsNrz   r   r$   r;   r0   r1   r2   r}   r"   r"   r"   r,   r)          r)   c                   @  ry   )	zDAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursorrz   r   r$   r;   c                   r{   r%   r"   r|   r"   r"   r,   r}      r~   zSAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor._show_warningsNr   r   r"   r"   r"   r,   r7      r   r7   )r5   r)   r7   )r+   r)   r7   r"   r"   r,   rW      s   z2AsyncAdapt_aiomysql_dbapi._init_cursors_subclassesN)r5   r   rS   r   rM   )rl   r   rm   r   r$   r8   rL   )r$   rx   )
r0   r1   r2   rX   rV   rq   r   memoized_propertyr<   rW   r"   r"   r"   r,   rR      s    


rR   c                      s   e Zd ZdZdZdZeZdZdZ	e
d&ddZe
d'd
dZd(ddZ	d)d* fddZd+ fddZd,d!d"Zd-d$d%Z  ZS ).MySQLDialect_aiomysqlr5   Tr$   rR   c                 C  s   t tdtdS )Nr5   rS   )rR   rt   )clsr"   r"   r,   import_dbapi   s   z"MySQLDialect_aiomysql.import_dbapiurlr   typec                 C  s$   |j dd}t|rtjS tjS )Nrn   F)querygetr   rr   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   r   rn   r"   r"   r,   get_pool_class   s   
z$MySQLDialect_aiomysql.get_pool_classdbapi_connectionr   r;   c                 C  s   |   d S r%   )	terminate)r+   r   r"   r"   r,   do_terminate   s   z"MySQLDialect_aiomysql.do_terminateN_translate_argsOptional[Dict[str, Any]]r   c                   s   t  j|tddddS )Nuserdb)usernamedatabase)r   )supercreate_connect_argsdict)r+   r   r   	__class__r"   r,   r      s   z)MySQLDialect_aiomysql.create_connect_argseDBAPIModule.Errorr#   7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r&   Optional[DBAPICursor]r:   c                   s(   t  |||r
dS t| }d|v S )NTznot connected)r   is_disconnectstrlower)r+   r   r#   r&   str_er   r"   r,   r      s   z#MySQLDialect_aiomysql.is_disconnectintc                 C  s   ddl m} |jS )Nr   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r+   r   r"   r"   r,   _found_rows_client_flag  s   z-MySQLDialect_aiomysql._found_rows_client_flagr   c                 C  s   |j S r%   )r>   r*   r"   r"   r,   get_driver_connection  s   z+MySQLDialect_aiomysql.get_driver_connection)r$   rR   )r   r   r$   r   )r   r   r$   r;   r%   )r   r   r   r   r$   r   )r   r   r#   r   r&   r   r$   r:   )r$   r   )r#   r   r$   r   )r0   r1   r2   driversupports_statement_cachesupports_server_side_cursorsr4   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r   r   __classcell__r"   r"   r   r,   r      s"    

r   N)-__doc__
__future__r   typesr   typingr   r   r   r   r   r	   rS   r   r    r   r   connectors.asyncior   r   r   r   r   r   util.concurrencyr   r   r   r   engine.interfacesr   r   r   r   r   
engine.urlr   r!   r4   r8   rP   rR   r   dialectr"   r"   r"   r,   <module>   sR   
	
#V: