
    Ojt                       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  \	(       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+asyncmy
    :name: asyncmy
    :dbapi: asyncmy
    :connectstring: mysql+asyncmy://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://github.com/long2ice/asyncmy

Using a special asyncio mediation layer, the asyncmy 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+asyncmy://user:pass@hostname/dbname?charset=utf8mb4"
    )

    )annotations)
ModuleType)Any)NoReturn)Optional)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rg)AsyncAdapt_asyncmy_cursor?    N)__name__
__module____qualname____firstlineno__	__slots____static_attributes__r#       c/var/www/html/leaf-doctor-v1/venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/asyncmy.pyr!   r!   ?   s    Ir*   r!   c                  *    \ rS rSrSr    SS jrSrg)AsyncAdapt_asyncmy_ss_cursorC   r#   c                    UR                  U R                  R                  R                  R                  R
                  5      $ N)cursor_adapt_connectiondbapiasyncmycursorsSSCursorself
connections     r+   _make_new_cursor-AsyncAdapt_asyncmy_ss_cursor._make_new_cursorH   s8       ""((0088AA
 	
r*   N)r9   r   returnr   )r$   r%   r&   r'   r(   r:   r)   r#   r*   r+   r-   r-   C   s     I
0
	
r*   r-   c                  ~    \ rS rSrSr\r\rSS j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S jrSrg)AsyncAdapt_asyncmy_connectionP   r#   c                h    [        U[        5      (       a  U R                  R                  S5      UeUe)Nz7network operation failed due to asyncmy attribute error)
isinstanceAttributeErrorr3   InternalErrorr8   errors     r+   _handle_exception/AsyncAdapt_asyncmy_connection._handle_exceptionX   s3    e^,,****I r*   c                R    U(       a   eU R                  U R                  5       5      $ r0   )await__do_ping)r8   	reconnects     r+   ping"AsyncAdapt_asyncmy_connection.ping`   s    }{{4==?++r*   c                  #     U R                    IS h  vN   U R                  R                  (       a"  U R                  R	                  SS9I S h  vN   O"U R                  R	                  5       I S h  vN   S S S 5      IS h  vN   g  Nt N: N N! , IS h  vN  (       d  f       g = f! [
         a  nU R                  U5         S nAg S nAff = f7f)NF)rK   )_execute_mutexr3   _send_false_to_ping_connectionrL   	ExceptionrF   rD   s     r+   rJ   &AsyncAdapt_asyncmy_connection._do_pingd   s     	****::11**//%/@@@**//111	 +**@1	 +***
  	*""5))	*s   CB+ B	B+ 8BB"B3B4B8B+ BB+ C	B+ BBB+ B(BB($B+ 'C(B+ +
C5CCCCc                6    U R                   R                  5       $ r0   )rQ   character_set_namer8   s    r+   rU   0AsyncAdapt_asyncmy_connection.character_set_namen   s    2244r*   c                X    U R                  U R                  R                  U5      5        g r0   )rI   rQ   
autocommit)r8   values     r+   rY   (AsyncAdapt_asyncmy_connection.autocommitq   s    D$$//67r*   c                6    U R                   R                  5       $ r0   )rQ   get_autocommitrV   s    r+   r]   ,AsyncAdapt_asyncmy_connection.get_autocommitt   s    ..00r*   c                V    U R                  U R                  R                  5       5        g r0   )rI   rQ   ensure_closedrV   s    r+   close#AsyncAdapt_asyncmy_connection.closew   s    D$$2245r*   c                T   #    U R                   R                  5       I S h  vN   g  N7fr0   )rQ   r`   rV   s    r+   _terminate_graceful_close7AsyncAdapt_asyncmy_connection._terminate_graceful_closez   s     ,,...s   (&(c                8    U R                   R                  5         g r0   )rQ   ra   rV   s    r+   _terminate_force_close4AsyncAdapt_asyncmy_connection._terminate_force_close}   s     r*   N)rE   rR   r<   r   )F)rK   boolr<   Noner<   rj   )r<   zOptional[str])rZ   r   r<   rj   r<   ri   )r$   r%   r&   r'   r(   r!   _cursor_clsr-   _ss_cursor_clsrF   rL   rJ   rU   rY   r]   ra   rd   rg   r)   r#   r*   r+   r>   r>   P   s@     I+K1N,*5816/!r*   r>   c                  (    \ rS rSrSr\" \5      rSrg)%AsyncAdaptFallback_asyncmy_connection   r#   N)	r$   r%   r&   r'   r(   staticmethodr   rI   r)   r#   r*   r+   rp   rp      s    I.)Fr*   rp   c                     \ rS rSrSS jrSS jr\R                  " S5      r\R                  " S5      r	\R                  " S5      r
\R                  " S5      r\R                  " S5      r\" \5      rSS	 jr\R$                  SS
 j5       rSrg)AsyncAdapt_asyncmy_dbapi   c                >    Xl         SU l        U R                  5         g )Nformat)r4   
paramstyle_init_dbapi_attributes)r8   r4   s     r+   __init__!AsyncAdapt_asyncmy_dbapi.__init__   s    "##%r*   c           	     j    S H-  n[        X[        U R                  R                  U5      5        M/     g )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorr   IntegrityErrorProgrammingErrorrC   NotSupportedError)setattrgetattrr4   errors)r8   names     r+   ry   /AsyncAdapt_asyncmy_dbapi._init_dbapi_attributes   s+    
D D(;(;T BC
r*   STRINGNUMBERBINARYDATETIME	TIMESTAMPc           
        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)	popr4   connectr   asboolrp   r   r>   r   )r8   argkwr   
creator_fns        r+   r    AsyncAdapt_asyncmy_dbapi.connect   s     0%8VV.0D0DE
;;~&&8z35"56 
 1:s1b12 r*   c                     [        S5      R                  R                  n[        U5      $ ! [        [
        4 a     gf = f)zdetermine if asyncmy has deprecated, changed the default of,
or removed the 'reconnect' argument of connection.ping().

See #13306 and #10492

zasyncmy.connectionT)
__import__r9   
Connectionr   ImportErrorrB   )r8   r   s     r+   rP   ,AsyncAdapt_asyncmy_dbapi._send_false_to_ping   sE    	@#$89DDOOJ 4J?? ^, 		s   , ??)r4   rx   N)r4   r   rk   )r   r   r   r   r<   r>   rl   )r$   r%   r&   r'   rz   ry   r   symbolr   r   r   r   r   rr   bytesBinaryr   r   memoized_propertyrP   r)   r#   r*   r+   rt   rt      s    &
D  [["F[["F[["F{{:&HK(I% F ""@ #@r*   rt   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U 4S jjr        SU 4S jjrSS	 jr    SS
 jrSrU =r$ )MySQLDialect_asyncmy   r4   Tc                *    [        [        S5      5      $ )Nr4   )rt   r   )clss    r+   import_dbapi!MySQLDialect_asyncmy.import_dbapi   s    '
9(=>>r*   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_asyncmy.get_pool_class   s>    '7?;;~&&555---r*   c                $    UR                  5         g r0   )	terminate)r8   dbapi_connections     r+   do_terminate!MySQLDialect_asyncmy.do_terminate   s    ""$r*   c                0   > [         TU ]  U[        SSS9S9$ )Nuserdb)usernamedatabase)_translate_args)supercreate_connect_argsdict)r8   r   	__class__s     r+   r   (MySQLDialect_asyncmy.create_connect_args   s&    w*v!E + 
 	
r*   c                   > [         TU ]  XU5      (       a  g[        U5      R                  5       nSU;   =(       d    SU;   $ )NTznot connectedznetwork operation failed)r   is_disconnectstrlower)r8   er9   r1   str_er   s        r+   r   "MySQLDialect_asyncmy.is_disconnect   sA     7 77FLLNE5(O,F%,Or*   c                &    SSK Jn  UR                  $ )Nr   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r8   r   s     r+   _found_rows_client_flag,MySQLDialect_asyncmy._found_rows_client_flag   s    ,   r*   c                    UR                   $ r0   )rQ   r7   s     r+   get_driver_connection*MySQLDialect_asyncmy.get_driver_connection   s     %%%r*   r#   )r<   r   )r   r   r<   type)r   r   r<   rj   )r   r   r<   r   )r   zDBAPIModule.Errorr9   z7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r1   zOptional[DBAPICursor]r<   ri   )r<   int)r9   r   r<   r   )r$   r%   r&   r'   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? ? . .%

 L &	
 
!
&)&	& &r*   r   N),__doc__
__future__r   typesr   typingr   r   r   r   r	   pymysqlr   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-   r>   rp   rt   r   dialectr#   r*   r+   <module>r      s   , #        5 )   = 9 9 < 6  . *<84400:! 7 

 9

/!5/!d*,I *:@6 :@z5&/ 5&p r*   