
    Oj!                       S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  S
SKJr  S
SKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  \
(       a0  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSKJ"r"  SSKJ#r#  SSK$J%r%   " S  S!\5      r& " S" S#\\&5      r' " S$ S%\\5      r( " S& S'\(5      r) " S( S)\5      r* " S* S+\5      r+\+r,g,)-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                  *    \ rS rSrSr    SS jrSrg)AsyncAdapt_aiomysql_cursorC    c                `    UR                  U R                  R                  R                  5      $ N)cursor_adapt_connectiondbapiCursorself
connections     d/var/www/html/leaf-doctor-v1/venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/aiomysql.py_make_new_cursor+AsyncAdapt_aiomysql_cursor._make_new_cursorF   s'       !7!7!=!=!D!DEE    Nr-   r   returnr   __name__
__module____qualname____firstlineno__	__slots__r/   __static_attributes__r$   r1   r.   r"   r"   C   s    IF0F	Fr1   r"   c                  *    \ rS rSrSr    SS jrSrg)AsyncAdapt_aiomysql_ss_cursorL   r$   c                    UR                  U R                  R                  R                  R                  R
                  5      $ r&   )r'   r(   r)   aiomysqlcursorsSSCursorr+   s     r.   r/   .AsyncAdapt_aiomysql_ss_cursor._make_new_cursorQ   s8       ""((1199BB
 	
r1   Nr2   r4   r$   r1   r.   r<   r<   L   s     I
0
	
r1   r<   c                  j    \ rS rSrSr\r\rSSS jjr	SS jr
SS jrSS jrSS jrSS jrSS	 jrSrg
)AsyncAdapt_aiomysql_connectionY   r$   c                    U(       a   eU R                   R                  (       a)  U R                  U R                  R	                  SS95        g U R                  U R                  R	                  5       5        g )NF)	reconnect)r)   _send_false_to_pingawait__connectionping)r,   rG   s     r.   rK   #AsyncAdapt_aiomysql_connection.pinga   sR    }::))KK((--->?KK((--/0r1   c                6    U R                   R                  5       $ r&   )rJ   character_set_namer,   s    r.   rN   1AsyncAdapt_aiomysql_connection.character_set_nameh   s    2244r1   c                X    U R                  U R                  R                  U5      5        g r&   )rI   rJ   
autocommit)r,   values     r.   rR   )AsyncAdapt_aiomysql_connection.autocommitk   s    D$$//67r1   c                6    U R                   R                  5       $ r&   )rJ   get_autocommitrO   s    r.   rV   -AsyncAdapt_aiomysql_connection.get_autocommitn   s    ..00r1   c                V    U R                  U R                  R                  5       5        g r&   )rI   rJ   ensure_closedrO   s    r.   close$AsyncAdapt_aiomysql_connection.closeq   s    D$$2245r1   c                T   #    U R                   R                  5       I S h  vN   g  N7fr&   )rJ   rY   rO   s    r.   _terminate_graceful_close8AsyncAdapt_aiomysql_connection._terminate_graceful_closet   s     ,,...s   (&(c                8    U R                   R                  5         g r&   )rJ   rZ   rO   s    r.   _terminate_force_close5AsyncAdapt_aiomysql_connection._terminate_force_closew   s     r1   N)F)rG   boolr3   None)r3   zOptional[str])rS   r   r3   rc   r3   rb   r3   rc   )r5   r6   r7   r8   r9   r"   _cursor_clsr<   _ss_cursor_clsrK   rN   rR   rV   rZ   r]   r`   r:   r$   r1   r.   rD   rD   Y   s6     I,K2N15816/!r1   rD   c                  (    \ rS rSrSr\" \5      rSrg)&AsyncAdaptFallback_aiomysql_connection|   r$   N)	r5   r6   r7   r8   r9   staticmethodr   rI   r:   r$   r1   r.   ri   ri   |   s    I.)Fr1   ri   c                  h    \ rS rSrS	S jrS
S jrSS jr\R                  SS j5       r	  SS jr
Srg)AsyncAdapt_aiomysql_dbapi   c                    Xl         X l        SU l        U R                  5         U R	                  5       u  U l        U l        g )Nformat)r?   pymysql
paramstyle_init_dbapi_attributes_init_cursors_subclassesr*   rA   )r,   r?   rq   s      r.   __init__"AsyncAdapt_aiomysql_dbapi.__init__   s6     "##%%)%B%B%D"T]r1   c           	         S H#  n[        X[        U R                  U5      5        M%     S H#  n[        X[        U R                  U5      5        M%     g )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorrz   IntegrityErrorProgrammingErrorInternalErrorNotSupportedError)NUMBERSTRINGDATETIMEBINARY	TIMESTAMPBinary)setattrgetattrr?   rq   )r,   names     r.   rs   0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributes   sH    
D Dt <=

D Dd ;<
r1   c           
        UR                  SS5      nUR                  SU R                  R                  5      n[        R                  " U5      (       a  [        U [        U" U0 UD65      5      $ [        U [        U" U0 UD65      5      $ )Nasync_fallbackFasync_creator_fn)	popr?   connectr   asboolri   r   rD   r   )r,   argkwr   
creator_fns        r.   r   !AsyncAdapt_aiomysql_dbapi.connect   s     0%8VV.0E0EF
;;~&&9z35"56 
 2:s1b12 r1   c                     [        S5      R                  R                  n[        U5      $ ! [        [
        4 a     gf = f)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-   
Connectionr   ImportErrorAttributeError)r,   r   s     r.   rH   -AsyncAdapt_aiomysql_dbapi._send_false_to_ping   sG    	@#%j  4J?? ^, 		s   , ??c                     " S SU R                   R                  5      n " S SU R                   R                  5      nX4$ )Nc                  &    \ rS rSr    SS jrSrg)BAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor   c                   #    g 7fr&   r$   r,   conns     r.   _show_warningsQAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor._show_warnings   
         r$   Nr   r   r3   rc   r5   r6   r7   r8   r   r:   r$   r1   r.   r*   r          2r1   r*   c                  &    \ rS rSr    SS jrSrg)DAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor   c                   #    g 7fr&   r$   r   s     r.   r   SAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor._show_warnings   r   r   r$   Nr   r   r$   r1   r.   rA   r      r   r1   rA   )r?   r*   rA   )r,   r*   rA   s      r.   rt   2AsyncAdapt_aiomysql_dbapi._init_cursors_subclasses   s9    	T]])) 		t}}-- 	 r1   )r*   rA   r?   rr   rq   N)r?   r   rq   r   re   )r   r   r   r   r3   rD   rd   )r3   z-Tuple[AsyncIODBAPICursor, AsyncIODBAPICursor])r5   r6   r7   r8   ru   rs   r   r   memoized_propertyrH   rt   r:   r$   r1   r.   rm   rm      s;    E=4 ""@ #@" 	6 r1   rm   c                     ^  \ rS rSrSrSrSr\rSr	Sr
\SS j5       r\SS j5       rSS jr S     SU 4S jjjr        SU 4S jjrSS	 jr    SS
 jrSrU =r$ )MySQLDialect_aiomysql   r?   Tc                >    [        [        S5      [        S5      5      $ )Nr?   rq   )rm   r   )clss    r.   import_dbapi"MySQLDialect_aiomysql.import_dbapi   s    (z"Jy$9
 	
r1   c                    UR                   R                  SS5      n[        R                  " U5      (       a  [        R
                  $ [        R                  $ )Nr   F)querygetr   r   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   urlr   s      r.   get_pool_class$MySQLDialect_aiomysql.get_pool_class   s>    '7?;;~&&555---r1   c                $    UR                  5         g r&   )	terminate)r,   dbapi_connections     r.   do_terminate"MySQLDialect_aiomysql.do_terminate   s    ""$r1   c                0   > [         TU ]  U[        SSS9S9$ )Nuserdb)usernamedatabase)_translate_args)supercreate_connect_argsdict)r,   r   r   	__class__s      r.   r   )MySQLDialect_aiomysql.create_connect_args   s(     w*v!E + 
 	
r1   c                l   > [         TU ]  XU5      (       a  g[        U5      R                  5       nSU;   $ )NTznot connected)r   is_disconnectstrlower)r,   er-   r'   str_er   s        r.   r   #MySQLDialect_aiomysql.is_disconnect   s4     7 77FLLNE"e++r1   c                &    SSK Jn  UR                  $ )Nr   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r,   r   s     r.   _found_rows_client_flag-MySQLDialect_aiomysql._found_rows_client_flag  s    ,   r1   c                    UR                   $ r&   )rJ   r+   s     r.   get_driver_connection+MySQLDialect_aiomysql.get_driver_connection  s     %%%r1   r$   )r3   rm   )r   r    r3   type)r   r   r3   rc   r&   )r   r    r   zOptional[Dict[str, Any]]r3   r   )r   zDBAPIModule.Errorr-   z7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r'   zOptional[DBAPICursor]r3   rb   )r3   int)r-   r   r3   r   )r5   r6   r7   r8   driversupports_statement_cachesupports_server_side_cursorsr<   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r   r   r:   __classcell__)r   s   @r.   r   r      s    F##' -IHM
 

 . .% EI

)A
	
 

,
, L
, &	
,
 

,!
&)&	& &r1   r   N)-__doc__
__future__r   typesr   typingr   r   r   r   r	   r
   rq   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"   r<   rD   ri   rm   r   dialectr$   r1   r.   <module>r      s   0 #         5 )   = 9 9 < 6  . *<84400:!F!8 F

 :

 !5 !F*-K *S  7 S l7&0 7&t  r1   