
    ,ha'                         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5      r " S S\5      r " S S\5      r " S S\5      rS 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"
    )

    )deque)asynccontextmanager   )MySQLDialect_pymysql   )pool)util)AdaptedConnection)asyncio)await_fallback)
await_onlyc                       \ rS rSrSrSrS r\S 5       r\S 5       r	\S 5       r
\
R                  S 5       r
\S	 5       rS
 rSS jrS rS rS rS rS rS rSS jrS rSrg)AsyncAdapt_asyncmy_cursor*   F)_adapt_connection_connectionawait__cursor_rowsc                     Xl         UR                  U l        UR                  U l        U R                  R                  5       nU R                  UR	                  5       5      U l        [        5       U l        g N)r   r   r   cursor
__aenter__r   r   r   selfadapt_connectionr   s      Y/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/asyncmy.py__init__"AsyncAdapt_asyncmy_cursor.__init__6   sY    !1+77&--!!((*{{6#4#4#67W
    c                 .    U R                   R                  $ r   )r   descriptionr   s    r   r"   %AsyncAdapt_asyncmy_cursor.description@   s    ||'''r    c                 .    U R                   R                  $ r   )r   rowcountr#   s    r   r&   "AsyncAdapt_asyncmy_cursor.rowcountD   s    ||$$$r    c                 .    U R                   R                  $ r   r   	arraysizer#   s    r   r*   #AsyncAdapt_asyncmy_cursor.arraysizeH       ||%%%r    c                 $    XR                   l        g r   r)   r   values     r   r*   r+   L   s    !&r    c                 .    U R                   R                  $ r   )r   	lastrowidr#   s    r   r1   #AsyncAdapt_asyncmy_cursor.lastrowidP   r,   r    c                 8    U R                   R                  5         g r   )r   clearr#   s    r   closeAsyncAdapt_asyncmy_cursor.closeT   s     	

r    Nc                 B    U R                  U R                  X5      5      $ r   )r   _execute_async)r   	operation
parameterss      r   execute!AsyncAdapt_asyncmy_cursor.execute^   s    {{4..yEFFr    c                 B    U R                  U R                  X5      5      $ r   )r   _executemany_asyncr   r9   seq_of_parameterss      r   executemany%AsyncAdapt_asyncmy_cursor.executemanya   s!    {{##IA
 	
r    c                   #    U R                   R                  5        IS h  vN   Uc$  U R                  R                  U5      I S h  vN nO#U R                  R                  X5      I S h  vN nU R                  (       d0  [        U R                  R                  5       I S h  vN 5      U l        UsS S S 5      IS h  vN   $  N N~ N\ N& N! , IS h  vN  (       d  f       g = f7fr   )r   _mutex_and_adapt_errorsr   r;   server_sider   fetchallr   )r   r9   r:   results       r   r8   (AsyncAdapt_asyncmy_cursor._execute_asyncf   s     ))AACC!#||33I>>#||33IJJ##
 #)>)>)@#@A
 DCC>J $A DCCCsz   C(CC("CC#C+C,7C#C

$C2C(>C?C(CC
CC(C%CC%!C(c                    #    U R                   R                  5        IS h  vN   U R                  R                  X5      I S h  vN sS S S 5      IS h  vN   $  N8 N N	! , IS h  vN  (       d  f       g = f7fr   )r   rD   r   rA   r?   s      r   r>   ,AsyncAdapt_asyncmy_cursor._executemany_asyncu   sM     ))AACC11)OO DCCO DCCCsV   A:AA:A AA A:AA:A A: A7&A)'A73A:c                     g r    )r   
inputsizess     r   setinputsizes'AsyncAdapt_asyncmy_cursor.setinputsizesy   s    r    c              #      #    U R                   (       a0  U R                   R                  5       v   U R                   (       a  M/  g g 7fr   r   popleftr#   s    r   __iter__"AsyncAdapt_asyncmy_cursor.__iter__|   s*     jj**$$&& jjjs   ?AAc                 Z    U R                   (       a  U R                   R                  5       $ g r   rQ   r#   s    r   fetchone"AsyncAdapt_asyncmy_cursor.fetchone   s    ::::%%''r    c                     Uc  U R                   nU R                  n[        [        U[	        U5      5      5       Vs/ s H  o2R                  5       PM     sn$ s  snf r   )r*   r   rangeminlenrR   )r   sizerr_s       r   	fetchmany#AsyncAdapt_asyncmy_cursor.fetchmany   sG    <>>DZZ&+Cc"g,>&?@&?

&?@@@s   Ac                 d    [        U R                  5      nU R                  R                  5         U$ r   )listr   r4   )r   retvals     r   rF   "AsyncAdapt_asyncmy_cursor.fetchall   s%    djj!

r    )r   r   r   r   r   r   )__name__
__module____qualname____firstlineno__rE   	__slots__r   propertyr"   r&   r*   setterr1   r5   r;   rA   r8   r>   rN   rS   rV   r_   rF   __static_attributes__rL   r    r   r   r   *   s     KI ( ( % % & & ' ' & &G

P'Ar    r   c                   >    \ rS rSrSrSrS rS rS rSS jr	S	 r
S
rg)AsyncAdapt_asyncmy_ss_cursor   rL   Tc                 "   Xl         UR                  U l        UR                  U l        U R                  R                  UR                  R
                  R                  R                  5      nU R                  UR                  5       5      U l	        g r   )
r   r   r   r   dbapiasyncmycursorsSSCursorr   r   r   s      r   r   %AsyncAdapt_asyncmy_ss_cursor.__init__   so    !1+77&--!!((""**22;;
 {{6#4#4#67r    c                     U R                   b1  U R                  U R                   R                  5       5        S U l         g g r   )r   r   r5   r#   s    r   r5   "AsyncAdapt_asyncmy_ss_cursor.close   s1    <<#KK**,-DL $r    c                 T    U R                  U R                  R                  5       5      $ r   )r   r   rV   r#   s    r   rV   %AsyncAdapt_asyncmy_ss_cursor.fetchone       {{4<<00233r    Nc                 R    U R                  U R                  R                  US95      $ )N)r\   )r   r   r_   )r   r\   s     r   r_   &AsyncAdapt_asyncmy_ss_cursor.fetchmany   s#    {{4<<11t1<==r    c                 T    U R                  U R                  R                  5       5      $ r   )r   r   rF   r#   s    r   rF   %AsyncAdapt_asyncmy_ss_cursor.fetchall   rz   r    )r   r   r   r   r   )re   rf   rg   rh   ri   rE   r   r5   rV   r_   rF   rl   rL   r    r   rn   rn      s'     IK	8 
4>4r    rn   c                   |    \ rS rSr\" \5      rSrS r\	S 5       r
S rS rS rS rSS	 jrS
 rS rS rSS jrSrg)AsyncAdapt_asyncmy_connection   )rq   _execute_mutexc                 P    Xl         X l        [        R                  " 5       U l        g r   )rq   r   r   Lockr   )r   rq   
connections      r   r   &AsyncAdapt_asyncmy_connection.__init__   s    
%%llnr    c                   #    U R                    IS h  vN    S 7v   S S S 5      IS h  vN   g  N! [         a    U R                  R                  S5      ef = f N0! , IS h  vN  (       d  f       g = f7f)Nz7network operation failed due to asyncmy attribute error)r   AttributeErrorrq   InternalErrorr#   s    r   rD   5AsyncAdapt_asyncmy_connection._mutex_and_adapt_errors   s]     &&& '&& " jj..M  '&&&sO   A6/A6A1A6AA6&AAA6A3"A%#A3/A6c                 R    U(       a   eU R                  U R                  5       5      $ r   )r   _do_ping)r   	reconnects     r   ping"AsyncAdapt_asyncmy_connection.ping   s    }{{4==?++r    c                    #    U R                  5        IS h  vN   U R                  R                  S5      I S h  vN sS S S 5      IS h  vN   $  N8 N N	! , IS h  vN  (       d  f       g = f7f)NF)rD   r   r   r#   s    r   r   &AsyncAdapt_asyncmy_connection._do_ping   sG     //11))..u55 2115 2111sS   A0AA0AAAA0
AA0AA0A-AA-)A0c                 6    U R                   R                  5       $ r   )r   character_set_namer#   s    r   r   0AsyncAdapt_asyncmy_connection.character_set_name   s    2244r    c                 X    U R                  U R                  R                  U5      5        g r   )r   r   
autocommitr.   s     r   r   (AsyncAdapt_asyncmy_connection.autocommit   s    D$$//67r    c                 <    U(       a  [        U 5      $ [        U 5      $ r   )rn   r   )r   rE   s     r   r   $AsyncAdapt_asyncmy_connection.cursor   s    /55,T22r    c                 V    U R                  U R                  R                  5       5        g r   )r   r   rollbackr#   s    r   r   &AsyncAdapt_asyncmy_connection.rollback   s    D$$--/0r    c                 V    U R                  U R                  R                  5       5        g r   )r   r   commitr#   s    r   r   $AsyncAdapt_asyncmy_connection.commit   s    D$$++-.r    c                 8    U R                   R                  5         g r   )r   r5   r#   s    r   	terminate'AsyncAdapt_asyncmy_connection.terminate   s     r    Nc                 V    U R                  U R                  R                  5       5        g r   )r   r   ensure_closedr#   s    r   r5   #AsyncAdapt_asyncmy_connection.close   s    D$$2245r    )r   r   rq   )FreturnN)re   rf   rg   rh   staticmethodr   r   ri   r   r   rD   r   r   r   r   r   r   r   r   r5   rl   rL   r    r   r   r      sY     *%F+I-
  ,65831/!6r    r   c                   (    \ rS rSrSr\" \5      rSrg)%AsyncAdaptFallback_asyncmy_connection   rL   N)	re   rf   rg   rh   ri   r   r   r   rl   rL   r    r   r   r      s    I.)Fr    r   c                     [        U 5      $ )zReturn x as a binary type.)bytes)xs    r   _Binaryr      s    8Or    c                       \ rS rSrS rS r\R                  " S5      r\R                  " S5      r	\R                  " S5      r
\R                  " S5      r\R                  " S5      r\" \5      rS	 rS
rg)AsyncAdapt_asyncmy_dbapi   c                 >    Xl         SU l        U R                  5         g )Nformat)rr   
paramstyle_init_dbapi_attributes)r   rr   s     r   r   !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ProgrammingErrorr   NotSupportedError)setattrgetattrrr   errors)r   names     r   r   /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)	poprr   connectr	   asboolr   r   r   r   )r   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    )rr   r   N)re   rf   rg   rh   r   r   r	   symbolr   r   r   r   r   r   r   Binaryr   rl   rL   r    r   r   r      sd    &
D  [["F[["F[["F{{:&HK(I'"Fr    r   c                      ^  \ rS rSrSrSrSr\rSr	Sr
\S 5       r\S 5       rSS jrU 4S jrU 4S jrS	 rS
 rSrU =r$ )MySQLDialect_asyncmyi"  rr   Tc                 *    [        [        S5      5      $ )Nrr   )r   
__import__)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_class0  s>    '7?;;~&&555---r    c                 $    UR                  5         g r   )r   )r   dbapi_connections     r   do_terminate!MySQLDialect_asyncmy.do_terminate9  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)r   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)r   er   r   str_er   s        r   r   "MySQLDialect_asyncmy.is_disconnectA  s?    7 77FLLNE5(O,F%,Or    c                 &    SSK Jn  UR                  $ )Nr   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flag,MySQLDialect_asyncmy._found_rows_client_flagJ  s    ,   r    c                     UR                   $ r   )r   )r   r   s     r   get_driver_connection*MySQLDialect_asyncmy.get_driver_connectionO  s    %%%r    rL   r   )re   rf   rg   rh   driversupports_statement_cachesupports_server_side_cursorsrn   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r  r  rl   __classcell__)r   s   @r   r   r   "  sg    F##' ,IHM? ? . .%

!
& &r    r   N)__doc__collectionsr   
contextlibr   pymysqlr    r   r	   enginer
   util.concurrencyr   r   r   r   rn   r   r   r   r   r   dialectrL   r    r   <module>r     s   *  * )   ' ' . *f fR4#< 4@46$5 46n*,I *
* *Z.&/ .&b r    