o
    i3                     @  s  d Z ddlmZ ddlZddlZddl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  G dd deZ!G dd deZ"G dd dZ#G d d! d!Z$G d"d# d#e$Z%G d$d% d%eZ&G d&d' d'e&Z'G d(d) d)Z(dS )*z?generic asyncio-adapted versions of DBAPI connection and cursor    )annotationsN)Any)AsyncIterator)Deque)Iterator)NoReturn)Optional)Sequence)Tuple)Type)TYPE_CHECKING   )AdaptedConnection)
EMPTY_DICT)await_fallback)
await_only)in_greenlet)Protocol)_DBAPICursorDescription)_DBAPIMultiExecuteParams)_DBAPISingleExecuteParams)DBAPIModule)Selfc                   @  sB   e Zd ZdZdddZdd
dZdddZdddZdddZdS )AsyncIODBAPIConnectionz^protocol representing an async adapted version of a
    :pep:`249` database connection.


    returnNonec                      d S N selfr   r   c/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/sqlalchemy/connectors/asyncio.pycommit3       zAsyncIODBAPIConnection.commitargsr   kwargsAsyncIODBAPICursorc                 O     d S r   r   )r    r$   r%   r   r   r!   cursor5       zAsyncIODBAPIConnection.cursorc                   r   r   r   r   r   r   r!   rollback7   r#   zAsyncIODBAPIConnection.rollbackkeystrc                 C  r'   r   r   r    r+   r   r   r!   __getattr__9   r)   z"AsyncIODBAPIConnection.__getattr__valuec                 C  r'   r   r   )r    r+   r/   r   r   r!   __setattr__;   r)   z"AsyncIODBAPIConnection.__setattr__Nr   r   )r$   r   r%   r   r   r&   r+   r,   r   r   )r+   r,   r/   r   r   r   )	__name__
__module____qualname____doc__r"   r(   r*   r.   r0   r   r   r   r!   r   )   s    
	


r   c                   @  s   e Zd ZU dZd5ddZed6ddZed7d
dZd	ed< d	ed< d8ddZ		d9d:ddZ
d;ddZd<ddZd=d>d!d"Zd?d#d$Zd@d&d'ZdAd)d*Z	d=dBd-d.ZdCd0d1ZdDd3d4ZdS )Er&   zZprotocol representing an async adapted version
    of a :pep:`249` database cursor.


    r   r   c                 C  r'   r   r   r   r   r   r!   
__aenter__E   r)   zAsyncIODBAPICursor.__aenter__r   c                 C  s   dS )z(The description attribute of the Cursor.Nr   r   r   r   r!   descriptionG   s   zAsyncIODBAPICursor.descriptionintc                 C  r'   r   r   r   r   r   r!   rowcountN      zAsyncIODBAPICursor.rowcount	arraysize	lastrowidr   c                   r   r   r   r   r   r   r!   closeU   r#   zAsyncIODBAPICursor.closeN	operation
parameters#Optional[_DBAPISingleExecuteParams]c                   r   r   r   r    r?   r@   r   r   r!   executeW      zAsyncIODBAPICursor.executer   c                   r   r   r   rB   r   r   r!   executemany]   rD   zAsyncIODBAPICursor.executemanyOptional[Any]c                   r   r   r   r   r   r   r!   fetchonec   r#   zAsyncIODBAPICursor.fetchone.sizeOptional[int]Sequence[Any]c                   r   r   r   r    rH   r   r   r!   	fetchmanye   r#   zAsyncIODBAPICursor.fetchmanyc                   r   r   r   r   r   r   r!   fetchallg   r#   zAsyncIODBAPICursor.fetchallsizesc                   r   r   r   )r    rN   r   r   r!   setinputsizesi   r#   z AsyncIODBAPICursor.setinputsizescolumnc                 C  r'   r   r   )r    rH   rP   r   r   r!   setoutputsizek   r)   z AsyncIODBAPICursor.setoutputsizeprocnamer,   c                   r   r   r   )r    rR   r@   r   r   r!   callprocm      zAsyncIODBAPICursor.callprocOptional[bool]c                   r   r   r   r   r   r   r!   nextsetq   r#   zAsyncIODBAPICursor.nextsetAsyncIterator[Any]c                 C  r'   r   r   r   r   r   r!   	__aiter__s   r)   zAsyncIODBAPICursor.__aiter__)r   r   )r   r   r   r9   r1   r   r?   r   r@   rA   r   r   )r?   r   r@   r   r   r   r   rF   ).rH   rI   r   rJ   r   rJ   )rN   rJ   r   r   )rH   r   rP   r   r   r   )rR   r,   r@   rJ   r   r   )r   rU   )r   rW   )r3   r4   r5   r6   r7   propertyr8   r:   __annotations__r>   rC   rE   rG   rL   rM   rO   rQ   rS   rV   rX   r   r   r   r!   r&   >   s,   
 







r&   c                   @  s6   e Zd ZerejZejZejZejZdddZ	dS dS )	AsyncAdapt_dbapi_moduler+   r,   r   r   c                 C  r'   r   r   r-   r   r   r!   r.   }   r)   z#AsyncAdapt_dbapi_module.__getattr__Nr2   )
r3   r4   r5   r   r   ErrorOperationalErrorInterfaceErrorIntegrityErrorr.   r   r   r   r!   r`   v   s    r`   c                   @  s:  e Zd ZU dZdZdZded< ded< ded	< d
ed< ded< dQddZdRddZdSddZ	e
dTddZe
dUddZe
dUddZejdVd"dZe
dUd#d$ZdWd%d&ZdWd'd(Z	)dXdYd.d/ZdZd2d3ZdYd4d5ZdZd6d7ZdWd8d9Zd[d;d<Zd\d>d?Zd]dBdCZd^dEdFZd_dHdIZdXd`dMdNZdadOdPZd)S )bAsyncAdapt_dbapi_cursorF)_adapt_connection_connectionawait__cursor_rows_soft_closed_memoizedTbool_awaitable_cursor_closer&   ri   AsyncAdapt_dbapi_connectionrf   r   rg   z
Deque[Any]rj   adapt_connectionc                 C  sL   || _ |j| _|j| _| | j}| || _t| _| js$t	
 | _d S d S r   )rf   rg   rh   _make_new_cursor_aenter_cursorri   r   rk   server_sidecollectionsdequerj   )r    ro   r(   r   r   r!   __init__   s   z AsyncAdapt_dbapi_cursor.__init__r(   r   c                 C  s   |  | S r   )rh   r7   )r    r(   r   r   r!   rq      s   z&AsyncAdapt_dbapi_cursor._aenter_cursor
connectionc                 C  s   |  S r   )r(   )r    rv   r   r   r!   rp      s   z(AsyncAdapt_dbapi_cursor._make_new_cursor!Optional[_DBAPICursorDescription]c                 C  s   d| j v r
| j d S | jjS )Nr8   )rk   ri   r8   r   r   r   r!   r8      s   

z#AsyncAdapt_dbapi_cursor.descriptionr9   c                 C     | j jS r   )ri   r:   r   r   r   r!   r:         z AsyncAdapt_dbapi_cursor.rowcountc                 C  rx   r   ri   r<   r   r   r   r!   r<      ry   z!AsyncAdapt_dbapi_cursor.arraysizer/   r   c                 C  s   || j _d S r   rz   )r    r/   r   r   r!   r<      s   c                 C  rx   r   )ri   r=   r   r   r   r!   r=      ry   z!AsyncAdapt_dbapi_cursor.lastrowidc                   s<   | j r| jr	dS | jd| jji| _| j I dH  dS )zclose the cursor but keep the results pending, and memoize the
        description.

        .. versionadded:: 2.0.44

        Nr8   )rm   rr   rk   unionri   r8   r>   r   r   r   r!   _async_soft_close   s   z)AsyncAdapt_dbapi_cursor._async_soft_closec                 C  sT   | j   | jd u st| jrd S | js| j  d S t r(| | j  d S d S r   )	rj   clearri   rl   rk   rm   r>   r   rh   r   r   r   r!   r>      s   
zAsyncAdapt_dbapi_cursor.closeNr?   r   r@   rA   c              
   C  H   z
|  | ||W S  ty# } z| j| W Y d }~d S d }~ww r   )rh   _execute_async	Exceptionrf   _handle_exception)r    r?   r@   errorr   r   r!   rC      s   zAsyncAdapt_dbapi_cursor.executeseq_of_parametersr   c              
   C  r~   r   )rh   _executemany_asyncr   rf   r   )r    r?   r   r   r   r   r!   rE      s   
z#AsyncAdapt_dbapi_cursor.executemanyc              	     s   | j j4 I d H 8 |d u r| j|I d H }n
| j||I d H }| jjr5| js5t| j I d H | _	|W  d   I d H  S 1 I d H sGw   Y  d S r   )
rf   _execute_mutexri   rC   r8   rr   rs   rt   rM   rj   )r    r?   r@   resultr   r   r!   r      s   0z&AsyncAdapt_dbapi_cursor._execute_asyncc              	     sV   | j j4 I d H  | j||I d H W  d   I d H  S 1 I d H s$w   Y  d S r   )rf   r   ri   rE   )r    r?   r   r   r   r!   r     s   0z*AsyncAdapt_dbapi_cursor._executemany_asyncc                 C  sB   |  | j  | jjr| jst|  | j | _d S d S d S r   )	rh   ri   rV   r8   rr   rs   rt   rM   rj   r   r   r   r!   rV   	  s   
zAsyncAdapt_dbapi_cursor.nextset
inputsizesc                 G  s   |  | jj| S r   )rh   ri   rO   )r    r   r   r   r!   rO     s   z%AsyncAdapt_dbapi_cursor.setinputsizesr   c                 C  s   | S r   r   r   r   r   r!   	__enter__  r;   z!AsyncAdapt_dbapi_cursor.__enter__type_	tracebackc                 C  s   |    d S r   )r>   )r    r   r/   r   r   r   r!   __exit__  s   z AsyncAdapt_dbapi_cursor.__exit__Iterator[Any]c                 c  s"    | j r| j  V  | j sd S d S r   rj   popleftr   r   r   r!   __iter__  s   z AsyncAdapt_dbapi_cursor.__iter__rF   c                 C  s   | j r| j  S d S r   r   r   r   r   r!   rG   !  s   
z AsyncAdapt_dbapi_cursor.fetchonerH   rI   rJ   c                   s4   |d u r| j }| j  fddtt|t D S )Nc                   s   g | ]}   qS r   )r   ).0_rrr   r!   
<listcomp>+  s    z5AsyncAdapt_dbapi_cursor.fetchmany.<locals>.<listcomp>)r<   rj   rangeminlenrK   r   r   r!   rL   '  s    z!AsyncAdapt_dbapi_cursor.fetchmanyc                 C  s   t | j}| j  |S r   )listrj   r}   )r    retvalr   r   r!   rM   -  s   

z AsyncAdapt_dbapi_cursor.fetchall)ro   rn   )r(   r&   r   r&   )rv   r   r   r&   )r   rw   rY   )r/   r9   r   r   r1   r   rZ   )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]   )r3   r4   r5   rr   	__slots__rm   r_   ru   rq   rp   r^   r8   r:   r<   setterr=   r|   r>   rC   rE   r   r   rV   rO   r   r   r   rG   rL   rM   r   r   r   r!   re      sH   
 	














re   c                   @  sH   e Zd ZdZdZdddZddd	ZddddZdddZdddZ	d
S )AsyncAdapt_dbapi_ss_cursorr   Tr   r   c                 C  s(   | j d ur| | j   d | _ d S d S r   )ri   rh   r>   r   r   r   r!   r>   7  s   

z AsyncAdapt_dbapi_ss_cursor.closerF   c                 C     |  | j S r   )rh   ri   rG   r   r   r   r!   rG   <     z#AsyncAdapt_dbapi_ss_cursor.fetchoneNrH   rI   r   c                 C  s   |  | jj|dS )N)rH   )rh   ri   rL   rK   r   r   r!   rL   ?     z$AsyncAdapt_dbapi_ss_cursor.fetchmanyrJ   c                 C  r   r   )rh   ri   rM   r   r   r   r!   rM   B  r   z#AsyncAdapt_dbapi_ss_cursor.fetchallr   c                 c  s:    | j  }	 z
| | V  W n
 ty   Y d S w qr   )ri   rX   rh   	__anext__StopAsyncIteration)r    iteratorr   r   r!   r   E  s   
z#AsyncAdapt_dbapi_ss_cursor.__iter__r1   r[   r   )rH   rI   r   r   r]   r   )
r3   r4   r5   r   rr   r>   rG   rL   rM   r   r   r   r   r!   r   3  s    


r   c                   @  sv   e Zd ZU eZeZeeZ	dZ
ded< d"ddZd#d$ddZ	d%d&ddZd'ddZd(ddZd(ddZd(d d!ZdS ))rn   )dbapir   r   rg   r   r   rv   c                 C  s   || _ || _t | _d S r   )r   rg   asyncioLockr   )r    r   rv   r   r   r!   ru   X  s   z$AsyncAdapt_dbapi_connection.__init__Frr   rl   r   re   c                 C  s   |r|  | S | | S r   )_ss_cursor_cls_cursor_cls)r    rr   r   r   r!   r(   ]  s   

z"AsyncAdapt_dbapi_connection.cursorNr?   r@   rA   c                 C  s   |   }||| |S )z2lots of DBAPIs seem to provide this, so include it)r(   rC   )r    r?   r@   r(   r   r   r!   rC   c  s   z#AsyncAdapt_dbapi_connection.executer   r   r   c                 C  s   t  }||d )Nr   )sysexc_infowith_traceback)r    r   r   r   r   r!   r   m  s   z-AsyncAdapt_dbapi_connection._handle_exceptionr   c              
   C  H   z|  | j  W d S  ty# } z| | W Y d }~d S d }~ww r   )rh   rg   r*   r   r   r    r   r   r   r!   r*   r     z$AsyncAdapt_dbapi_connection.rollbackc              
   C  r   r   )rh   rg   r"   r   r   r   r   r   r!   r"   x  r   z"AsyncAdapt_dbapi_connection.commitc                 C  s   |  | j  d S r   )rh   rg   r>   r   r   r   r!   r>   ~  r   z!AsyncAdapt_dbapi_connection.close)r   r   rv   r   )F)rr   rl   r   re   r   rZ   )r   r   r   r   r1   )r3   r4   r5   re   r   r   r   staticmethodr   rh   r   r_   ru   r(   rC   r   r*   r"   r>   r   r   r   r!   rn   N  s   
 
	



rn   c                   @  s   e Zd ZdZeeZdS )#AsyncAdaptFallback_dbapi_connectionr   N)r3   r4   r5   r   r   r   rh   r   r   r   r!   r     s    r   c                   @  s<   e Zd ZdZdZdddZddd	Zdd
dZdddZdS )AsyncAdapt_terminatezAMixin for a AsyncAdapt_dbapi_connection to add terminate support.r   r   r   c              
   C  sn   t  r1z| t|   W d S  |  y0 } z|   t|tjr% W Y d }~d S d }~ww |   d S r   )	r   rh   r   shield_terminate_graceful_close_terminate_handled_exceptions_terminate_force_close
isinstanceCancelledError)r    er   r   r!   	terminate  s   zAsyncAdapt_terminate.terminateTuple[Type[BaseException], ...]c                 C  s   t jt jtfS )z\Returns the exceptions that should be handled when
        calling _graceful_close.
        )r   TimeoutErrorr   OSErrorr   r   r   r!   r     s   z2AsyncAdapt_terminate._terminate_handled_exceptionsc                   s   t )z"Try to close connection gracefullyNotImplementedErrorr   r   r   r!   r     rT   z.AsyncAdapt_terminate._terminate_graceful_closec                 C  s   t )zTerminate the connectionr   r   r   r   r!   r     s   z+AsyncAdapt_terminate._terminate_force_closeNr1   )r   r   )	r3   r4   r5   r6   r   r   r   r   r   r   r   r   r!   r     s    


r   ))r6   
__future__r   r   rs   r   typingr   r   r   r   r   r   r	   r
   r   r   enginer   utilr   util.concurrencyr   r   r   util.typingr   engine.interfacesr   r   r   r   r   r   r&   r`   re   r   rn   r   r   r   r   r   r!   <module>   sH   8
 44