
    [ha'                     $   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  G d d          Z G d de          Z G d de          Z G d de          Zd Z G d d          Z G d de          ZeZdS )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                       e Zd ZdZdZd Zed             Zed             Zed             Z	e	j
        d             Z	ed             Zd	 ZddZd Zd Zd Zd Zd Zd ZddZd Zd
S )AsyncAdapt_asyncmy_cursorF)_adapt_connection_connectionawait__cursor_rowsc                     || _         |j        | _        |j        | _        | j                                        }|                     |                                          | _        t                      | _        d S N)r   r   r   cursor
__aenter__r   r   r   selfadapt_connectionr   s      p/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/asyncmy.py__init__z"AsyncAdapt_asyncmy_cursor.__init__6   sa    !1+7&-!((**{{6#4#4#6#677WW


    c                     | j         j        S r   )r   descriptionr   s    r   r    z%AsyncAdapt_asyncmy_cursor.description@   s    |''r   c                     | j         j        S r   )r   rowcountr!   s    r   r#   z"AsyncAdapt_asyncmy_cursor.rowcountD   s    |$$r   c                     | j         j        S r   r   	arraysizer!   s    r   r&   z#AsyncAdapt_asyncmy_cursor.arraysizeH       |%%r   c                     || j         _        d S r   r%   r   values     r   r&   z#AsyncAdapt_asyncmy_cursor.arraysizeL   s    !&r   c                     | j         j        S r   )r   	lastrowidr!   s    r   r,   z#AsyncAdapt_asyncmy_cursor.lastrowidP   r'   r   c                 8    | j                                          d S r   )r   clearr!   s    r   closezAsyncAdapt_asyncmy_cursor.closeT   s     	
r   Nc                 T    |                      |                     ||                    S r   )r   _execute_async)r   	operation
parameterss      r   executez!AsyncAdapt_asyncmy_cursor.execute^   s$    {{4..y*EEFFFr   c                 T    |                      |                     ||                    S r   )r   _executemany_asyncr   r2   seq_of_parameterss      r   executemanyz%AsyncAdapt_asyncmy_cursor.executemanya   s,    {{##I/@AA
 
 	
r   c                   K   | j                                         4 d {V  |!| j                            |           d {V }n!| j                            ||           d {V }| j        s1t          | j                                         d {V           | _        |cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   _mutex_and_adapt_errorsr   r4   server_sider   fetchallr   )r   r2   r3   results       r   r1   z(AsyncAdapt_asyncmy_cursor._execute_asyncf   sq     )AACC 	 	 	 	 	 	 	 	!#|33I>>>>>>>>#|33IzJJJJJJJJ# B
 #)>)>)@)@#@#@#@#@#@#@AA
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A>B33
B= B=c                    K   | j                                         4 d {V  | j                            ||           d {V cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   r;   r   r9   r7   s      r   r6   z,AsyncAdapt_asyncmy_cursor._executemany_asyncu   s'     )AACC 	P 	P 	P 	P 	P 	P 	P 	P11)=NOOOOOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   !A
A #A c                     d S r    )r   
inputsizess     r   setinputsizesz'AsyncAdapt_asyncmy_cursor.setinputsizesy   s    r   c              #   `   K   | j         r$| j                                         V  | j         "d S d S r   r   popleftr!   s    r   __iter__z"AsyncAdapt_asyncmy_cursor.__iter__|   sJ      j 	'*$$&&&&& j 	' 	' 	' 	' 	'r   c                 F    | j         r| j                                         S d S r   rE   r!   s    r   fetchonez"AsyncAdapt_asyncmy_cursor.fetchone   s%    : 	:%%'''4r   c           	          || j         }| j        fdt          t          |t	                                        D             S )Nc                 8    g | ]}                                 S rA   )rF   ).0_rrs     r   
<listcomp>z7AsyncAdapt_asyncmy_cursor.fetchmany.<locals>.<listcomp>   s!    @@@

@@@r   )r&   r   rangeminlen)r   sizerN   s     @r   	fetchmanyz#AsyncAdapt_asyncmy_cursor.fetchmany   sH    <>DZ@@@@eCc"gg,>,>&?&?@@@@r   c                 `    t          | j                  }| j                                         |S r   )listr   r.   )r   retvals     r   r=   z"AsyncAdapt_asyncmy_cursor.fetchall   s*    dj!!
r   r   )__name__
__module____qualname__r<   	__slots__r   propertyr    r#   r&   setterr,   r/   r4   r9   r1   r6   rC   rG   rI   rT   r=   rA   r   r   r   r   *   sg        KI   ( ( X( % % X% & & X& ' ' ' & & X&  G G G G
 
 

  P P P  ' ' '  A A A A    r   r   c                   6    e Zd ZdZdZd Zd Zd Zd	dZd Z	dS )
AsyncAdapt_asyncmy_ss_cursorrA   Tc                     || _         |j        | _        |j        | _        | j                            |j        j        j        j                  }|                     |                                          | _	        d S r   )
r   r   r   r   dbapiasyncmycursorsSSCursorr   r   r   s      r   r   z%AsyncAdapt_asyncmy_ss_cursor.__init__   sk    !1+7&-!(("*2;
 
 {{6#4#4#6#677r   c                 ~    | j         5|                     | j                                                    d | _         d S d S r   )r   r   r/   r!   s    r   r/   z"AsyncAdapt_asyncmy_ss_cursor.close   s=    <#KK**,,---DLLL $#r   c                 Z    |                      | j                                                  S r   )r   r   rI   r!   s    r   rI   z%AsyncAdapt_asyncmy_ss_cursor.fetchone   "    {{4<0022333r   Nc                 ^    |                      | j                            |                    S )N)rS   )r   r   rT   )r   rS   s     r   rT   z&AsyncAdapt_asyncmy_ss_cursor.fetchmany   s'    {{4<11t1<<===r   c                 Z    |                      | j                                                  S r   )r   r   r=   r!   s    r   r=   z%AsyncAdapt_asyncmy_ss_cursor.fetchall   rg   r   r   )
rX   rY   rZ   r[   r<   r   r/   rI   rT   r=   rA   r   r   r_   r_      sp         IK	8 	8 	8     
4 4 4> > > >4 4 4 4 4r   r_   c                   ~    e Zd Z ee          ZdZd Zed             Z	d Z
d Zd Zd Zdd	Zd
 Zd Zd ZddZdS )AsyncAdapt_asyncmy_connection)ra   _execute_mutexc                 R    || _         || _        t          j                    | _        d S r   )ra   r   r   Lockrl   )r   ra   
connections      r   r   z&AsyncAdapt_asyncmy_connection.__init__   s%    
%%lnnr   c                   K   | j         4 d {V  	 d W V  n(# t          $ r | j                            d          w xY w	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nz7network operation failed due to asyncmy attribute error)rl   AttributeErrorra   InternalErrorr!   s    r   r;   z5AsyncAdapt_asyncmy_connection._mutex_and_adapt_errors   s     & 	 	 	 	 	 	 	 	!   j..M   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AA%=A
A!Ac                 X    |rJ |                      |                                           S r   )r   _do_ping)r   	reconnects     r   pingz"AsyncAdapt_asyncmy_connection.ping   s(    {{4==??+++r   c                    K   |                                  4 d {V  | j                            d           d {V cd d d           d {V  S # 1 d {V swxY w Y   d S )NF)r;   r   rv   r!   s    r   rt   z&AsyncAdapt_asyncmy_connection._do_ping   s      //11 	6 	6 	6 	6 	6 	6 	6 	6)..u55555555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s    A
AAc                 4    | j                                         S r   )r   character_set_namer!   s    r   ry   z0AsyncAdapt_asyncmy_connection.character_set_name   s    22444r   c                 `    |                      | j                            |                     d S r   )r   r   
autocommitr)   s     r   r{   z(AsyncAdapt_asyncmy_connection.autocommit   s+    D$//6677777r   Fc                 B    |rt          |           S t          |           S r   )r_   r   )r   r<   s     r   r   z$AsyncAdapt_asyncmy_connection.cursor   s&     	3/555,T222r   c                 ^    |                      | j                                                   d S r   )r   r   rollbackr!   s    r   r~   z&AsyncAdapt_asyncmy_connection.rollback   s)    D$--//00000r   c                 ^    |                      | j                                                   d S r   )r   r   commitr!   s    r   r   z$AsyncAdapt_asyncmy_connection.commit   s)    D$++--.....r   c                 8    | j                                          d S r   )r   r/   r!   s    r   	terminatez'AsyncAdapt_asyncmy_connection.terminate   s         r   returnNc                 ^    |                      | j                                                   d S r   )r   r   ensure_closedr!   s    r   r/   z#AsyncAdapt_asyncmy_connection.close   s)    D$224455555r   )Fr   N)rX   rY   rZ   staticmethodr   r   r[   r   r   r;   rv   rt   ry   r{   r   r~   r   r   r/   rA   r   r   rk   rk      s         \*%%F+I- - -
   , , ,6 6 65 5 58 8 83 3 3 31 1 1/ / /! ! !6 6 6 6 6 6r   rk   c                   (    e Zd ZdZ ee          ZdS )%AsyncAdaptFallback_asyncmy_connectionrA   N)rX   rY   rZ   r[   r   r   r   rA   r   r   r   r      s"        I\.))FFFr   r   c                      t          |           S )zReturn x as a binary type.)bytes)xs    r   _Binaryr      s    88Or   c                       e Zd Zd Zd Z ej        d          Z ej        d          Z ej        d          Z	 ej        d          Z
 ej        d          Z ee          Zd Zd	S )
AsyncAdapt_asyncmy_dbapic                 J    || _         d| _        |                                  d S )Nformat)rb   
paramstyle_init_dbapi_attributes)r   rb   s     r   r   z!AsyncAdapt_asyncmy_dbapi.__init__   s(    "##%%%%%r   c           	      b    dD ]+}t          | |t          | j        j        |                     ,d S )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorr   IntegrityErrorProgrammingErrorrr   NotSupportedError)setattrgetattrrb   errors)r   names     r   r   z/AsyncAdapt_asyncmy_dbapi._init_dbapi_attributes   sG    
 	D 	DD D$(;T B BCCCC	D 	Dr   STRINGNUMBERBINARYDATETIME	TIMESTAMPc           
      "   |                     dd          }|                     d| j        j                  }t          j        |          r#t          | t           ||i |                    S t          | t           ||i |                    S )Nasync_fallbackFasync_creator_fn)	poprb   connectr	   asboolr   r   rk   r   )r   argkwr   
creator_fns        r   r   z AsyncAdapt_asyncmy_dbapi.connect  s     0%88VV.0DEE
;~&& 		8zz35"5566  
 1::s1b1122  r   N)rX   rY   rZ   r   r   r	   symbolr   r   r   r   r   r   r   Binaryr   rA   r   r   r   r      s        & & &
D D D  T[""FT[""FT[""Ft{:&&HK((I\'""F    r   r   c                        e Zd ZdZdZdZeZdZdZ	e
d             Ze
d             ZddZ fdZ fd	Zd
 Zd Z xZS )MySQLDialect_asyncmyrb   Tc                 :    t          t          d                    S )Nrb   )r   
__import__)clss    r   import_dbapiz!MySQLDialect_asyncmy.import_dbapi,  s    '
9(=(=>>>r   c                     |j                             dd          }t          j        |          rt          j        S t          j        S )Nr   F)querygetr	   r   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   urlr   s      r   get_pool_classz#MySQLDialect_asyncmy.get_pool_class0  s<    '7??;~&& 	.55--r   r   Nc                 .    |                                  d S r   )r   )r   dbapi_connections     r   do_terminatez!MySQLDialect_asyncmy.do_terminate9  s    ""$$$$$r   c                 h    t                                          |t          dd                    S )Nuserdb)usernamedatabase)_translate_args)supercreate_connect_argsdict)r   r   	__class__s     r   r   z(MySQLDialect_asyncmy.create_connect_args<  s6    ww**v!E!E!E + 
 
 	
r   c                     t                                          |||          rdS t          |                                          }d|v pd|v S )NTznot connectedznetwork operation failed)r   is_disconnectstrlower)r   ero   r   str_er   s        r   r   z"MySQLDialect_asyncmy.is_disconnectA  sQ    77  J77 	4FFLLNNE5(O,F%,Or   c                     ddl m} |j        S )Nr   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz,MySQLDialect_asyncmy._found_rows_client_flagJ  s    ,,,,,,  r   c                     |j         S r   )r   )r   ro   s     r   get_driver_connectionz*MySQLDialect_asyncmy.get_driver_connectionO  s    %%r   r   )rX   rY   rZ   driversupports_statement_cachesupports_server_side_cursorsr_   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   "  s        F##' ,IHM? ? [? . . [.% % % %
 
 
 
 

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