U
    ]g%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r*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 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                   @  s`   e Zd ZdZddddZddddd	d
ZddddZdddddZddddddZdS )AsyncIODBAPIConnectionz^protocol representing an async adapted version of a
    :pep:`249` database connection.


    Nonereturnc                   s   d S N selfr   r   \/var/www/html/api-medvista/venv/lib/python3.8/site-packages/sqlalchemy/connectors/asyncio.pycommit3       zAsyncIODBAPIConnection.commitr   AsyncIODBAPICursor)argskwargsr   c                 O  s   d S r   r   )r    r%   r&   r   r   r!   cursor5   r#   zAsyncIODBAPIConnection.cursorc                   s   d S r   r   r   r   r   r!   rollback7   r#   zAsyncIODBAPIConnection.rollbackstrkeyr   c                 C  s   d S r   r   r    r+   r   r   r!   __getattr__9   r#   z"AsyncIODBAPIConnection.__getattr__)r+   valuer   c                 C  s   d S r   r   )r    r+   r.   r   r   r!   __setattr__;   r#   z"AsyncIODBAPIConnection.__setattr__N)	__name__
__module____qualname____doc__r"   r'   r(   r-   r/   r   r   r   r!   r   )   s   	r   c                   @  s  e Zd ZU dZddddZeddddZed	dd
dZd	ed< d	ed< ddddZ	d4ddddddZ
ddddddZddddZd5dddd d!Zddd"d#Zddd$d%d&Zdddd'd(d)Zd6d*ddd+d,d-Zd.dd/d0Zd1dd2d3ZdS )7r$   zZprotocol representing an async adapted version
    of a :pep:`249` database cursor.


    r   r   c                 C  s   d S 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  s   d S r   r   r   r   r   r!   rowcountN   s    zAsyncIODBAPICursor.rowcount	arraysize	lastrowidr   c                   s   d S r   r   r   r   r   r!   closeU   r#   zAsyncIODBAPICursor.closeN#Optional[_DBAPISingleExecuteParams]	operation
parametersr   c                   s   d S r   r   r    r=   r>   r   r   r!   executeW   s    zAsyncIODBAPICursor.executer   c                   s   d S r   r   r?   r   r   r!   executemany]   s    zAsyncIODBAPICursor.executemanyOptional[Any]c                   s   d S r   r   r   r   r   r!   fetchonec   r#   zAsyncIODBAPICursor.fetchone.Optional[int]Sequence[Any]sizer   c                   s   d S r   r   r    rG   r   r   r!   	fetchmanye   r#   zAsyncIODBAPICursor.fetchmanyc                   s   d S r   r   r   r   r   r!   fetchallg   r#   zAsyncIODBAPICursor.fetchall)sizesr   c                   s   d S r   r   )r    rK   r   r   r!   setinputsizesi   r#   z AsyncIODBAPICursor.setinputsizes)rG   columnr   c                 C  s   d S r   r   )r    rG   rM   r   r   r!   setoutputsizek   r#   z AsyncIODBAPICursor.setoutputsizer)   )procnamer>   r   c                   s   d S r   r   )r    rO   r>   r   r   r!   callprocm   s    zAsyncIODBAPICursor.callproczOptional[bool]c                   s   d S r   r   r   r   r   r!   nextsetq   r#   zAsyncIODBAPICursor.nextsetzAsyncIterator[Any]c                 C  s   d S r   r   r   r   r   r!   	__aiter__s   r#   zAsyncIODBAPICursor.__aiter__)N).).)r0   r1   r2   r3   r4   propertyr5   r7   __annotations__r:   r@   rA   rC   rI   rJ   rL   rN   rP   rQ   rR   r   r   r   r!   r$   >   s*   
  r$   c                   @  s8   e Zd Zer4ejZejZejZejZdddddZ	dS )AsyncAdapt_dbapi_moduler)   r   r*   c                 C  s   d S r   r   r,   r   r   r!   r-   }   r#   z#AsyncAdapt_dbapi_module.__getattr__N)
r0   r1   r2   r   r   ErrorZOperationalErrorZInterfaceErrorZIntegrityErrorr-   r   r   r   r!   rU   v   s   rU   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< ddddZdddddZd
ddddZ	e
ddddZe
ddddZe
ddddZejdd d!d"dZe
ddd#d$Zd dd%d&Zd dd'd(ZdOd*d+d*d,d-d.Zd*d/d*d0d1d2Zd*d+d*d,d3d4Zd*d/d*d0d5d6Zd dd7d8Zd*d d9d:d;Zd<dd=d>Zd*d*d*d d?d@dAZdBddCdDZdEddFdGZdPdHdIdJdKdLZdIddMdNZd)S )QAsyncAdapt_dbapi_cursorF)_adapt_connection_connectionawait__cursor_rows_soft_closed_memoizedTbool_awaitable_cursor_closer$   r[   AsyncAdapt_dbapi_connectionrX   r   rY   z
Deque[Any]r\   )adapt_connectionc                 C  sH   || _ |j| _|j| _| | j}| || _t| _| jsDt	
 | _d S r   )rX   rY   rZ   _make_new_cursor_aenter_cursorr[   r   r]   server_sidecollectionsdequer\   )r    ra   r'   r   r   r!   __init__   s    z AsyncAdapt_dbapi_cursor.__init__)r'   r   c                 C  s   |  | S r   )rZ   r4   )r    r'   r   r   r!   rc      s    z&AsyncAdapt_dbapi_cursor._aenter_cursor)
connectionr   c                 C  s   |  S r   )r'   )r    rh   r   r   r!   rb      s    z(AsyncAdapt_dbapi_cursor._make_new_cursorz!Optional[_DBAPICursorDescription]r   c                 C  s   d| j kr| j d S | jjS )Nr5   )r]   r[   r5   r   r   r   r!   r5      s    

z#AsyncAdapt_dbapi_cursor.descriptionr6   c                 C  s   | j jS r   )r[   r7   r   r   r   r!   r7      s    z AsyncAdapt_dbapi_cursor.rowcountc                 C  s   | j jS r   r[   r8   r   r   r   r!   r8      s    z!AsyncAdapt_dbapi_cursor.arraysizer   )r.   r   c                 C  s   || j _d S r   ri   )r    r.   r   r   r!   r8      s    c                 C  s   | j jS r   )r[   r9   r   r   r   r!   r9      s    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

        Nr5   )r_   rd   r]   unionr[   r5   r:   r   r   r   r!   _async_soft_close   s     z)AsyncAdapt_dbapi_cursor._async_soft_closec                 C  sN   | j   | jd kst| jr"d S | js4| j  nt rJ| | j  d S r   )	r\   clearr[   r^   r]   r_   r:   r   rZ   r   r   r   r!   r:      s    
zAsyncAdapt_dbapi_cursor.closeNr   r;   r<   c              
   C  sH   z|  | ||W S  tk
rB } z| j| W 5 d }~X Y nX d S r   )rZ   _execute_async	ExceptionrX   _handle_exception)r    r=   r>   errorr   r   r!   r@      s    zAsyncAdapt_dbapi_cursor.executer   )r=   seq_of_parametersr   c              
   C  sH   z|  | ||W S  tk
rB } z| j| W 5 d }~X Y nX d S r   )rZ   _executemany_asyncrn   rX   ro   )r    r=   rq   rp   r   r   r!   rA      s    
z#AsyncAdapt_dbapi_cursor.executemanyc                   s   | j j4 I d H n |d kr.| j|I d H }n| j||I d H }| jjrh| jsht| j I d H | _	|W  5 Q I d H R  S Q I d H R X d S r   )
rX   _execute_mutexr[   r@   r5   rd   re   rf   rJ   r\   )r    r=   r>   resultr   r   r!   rm      s    z&AsyncAdapt_dbapi_cursor._execute_asyncc                   sH   | j j4 I d H ( | j||I d H W  5 Q I d H R  S Q I d H R X d S r   )rX   rs   r[   rA   )r    r=   rq   r   r   r!   rr     s    z*AsyncAdapt_dbapi_cursor._executemany_asyncc                 C  s:   |  | j  | jjr6| js6t|  | j | _d S r   )	rZ   r[   rQ   r5   rd   re   rf   rJ   r\   r   r   r   r!   rQ   	  s
    zAsyncAdapt_dbapi_cursor.nextset)
inputsizesr   c                 G  s   |  | jj| S r   )rZ   r[   rL   )r    ru   r   r   r!   rL     s    z%AsyncAdapt_dbapi_cursor.setinputsizesr   c                 C  s   | S r   r   r   r   r   r!   	__enter__  s    z!AsyncAdapt_dbapi_cursor.__enter__)type_r.   	tracebackr   c                 C  s   |    d S r   )r:   )r    rw   r.   rx   r   r   r!   __exit__  s    z AsyncAdapt_dbapi_cursor.__exit__Iterator[Any]c                 c  s   | j r| j  V  q d S r   r\   popleftr   r   r   r!   __iter__  s    z AsyncAdapt_dbapi_cursor.__iter__rB   c                 C  s   | j r| j  S d S d S r   r{   r   r   r   r!   rC   !  s    
z AsyncAdapt_dbapi_cursor.fetchonerD   rE   rF   c                   s4   |d kr| j }| j  fddtt|t D S )Nc                   s   g | ]}   qS r   )r|   ).0_Zrrr   r!   
<listcomp>+  s     z5AsyncAdapt_dbapi_cursor.fetchmany.<locals>.<listcomp>)r8   r\   rangeminlenrH   r   r   r!   rI   '  s    z!AsyncAdapt_dbapi_cursor.fetchmanyc                 C  s   t | j}| j  |S r   )listr\   rl   )r    retvalr   r   r!   rJ   -  s    

z AsyncAdapt_dbapi_cursor.fetchall)N)N)r0   r1   r2   rd   	__slots__r_   rT   rg   rc   rb   rS   r5   r7   r8   setterr9   rk   r:   r@   rA   rm   rr   rQ   rL   rv   ry   r}   rC   rI   rJ   r   r   r   r!   rW      sF   
	 
rW   c                   @  s^   e Zd ZdZdZddddZdddd	ZddddddZddddZddddZ	d
S )AsyncAdapt_dbapi_ss_cursorr   Tr   r   c                 C  s$   | j d k	r | | j   d | _ d S r   )r[   rZ   r:   r   r   r   r!   r:   7  s    
z AsyncAdapt_dbapi_ss_cursor.closerB   c                 C  s   |  | j S r   )rZ   r[   rC   r   r   r   r!   rC   <  s    z#AsyncAdapt_dbapi_ss_cursor.fetchoneNrD   r   rF   c                 C  s   |  | jj|dS )N)rG   )rZ   r[   rI   rH   r   r   r!   rI   ?  s    z$AsyncAdapt_dbapi_ss_cursor.fetchmanyrE   c                 C  s   |  | j S r   )rZ   r[   rJ   r   r   r   r!   rJ   B  s    z#AsyncAdapt_dbapi_ss_cursor.fetchallrz   c                 c  s>   | j  }z| | V  W q
 tk
r6   Y q:Y q
X q
d S r   )r[   rR   rZ   	__anext__StopAsyncIteration)r    iteratorr   r   r!   r}   E  s
    
z#AsyncAdapt_dbapi_ss_cursor.__iter__)N)
r0   r1   r2   r   rd   r:   rC   rI   rJ   r}   r   r   r   r!   r   3  s   r   c                   @  s   e Zd ZU eZeZeeZ	dZ
ded< dddddZd d	d
dddZd!ddddddZdddddZddddZddddZddddZdS )"r`   )dbapirs   r   rY   r   )r   rh   c                 C  s   || _ || _t | _d S r   )r   rY   asyncioLockrs   )r    r   rh   r   r   r!   rg   X  s    z$AsyncAdapt_dbapi_connection.__init__Fr^   rW   )rd   r   c                 C  s   |r|  | S | | S d S r   )_ss_cursor_cls_cursor_cls)r    rd   r   r   r!   r'   ]  s    
z"AsyncAdapt_dbapi_connection.cursorNr;   r<   c                 C  s   |   }||| |S )z2lots of DBAPIs seem to provide this, so include it)r'   r@   )r    r=   r>   r'   r   r   r!   r@   c  s    z#AsyncAdapt_dbapi_connection.executern   r   )rp   r   c                 C  s   t  }||d d S )Nr   )sysexc_infowith_traceback)r    rp   r   r   r   r!   ro   m  s    z-AsyncAdapt_dbapi_connection._handle_exceptionr   r   c              
   C  sF   z|  | j  W n, tk
r@ } z| | W 5 d }~X Y nX d S r   )rZ   rY   r(   rn   ro   r    rp   r   r   r!   r(   r  s    z$AsyncAdapt_dbapi_connection.rollbackc              
   C  sF   z|  | j  W n, tk
r@ } z| | W 5 d }~X Y nX d S r   )rZ   rY   r"   rn   ro   r   r   r   r!   r"   x  s    z"AsyncAdapt_dbapi_connection.commitc                 C  s   |  | j  d S r   )rZ   rY   r:   r   r   r   r!   r:   ~  s    z!AsyncAdapt_dbapi_connection.close)F)N)r0   r1   r2   rW   r   r   r   staticmethodr   rZ   r   rT   rg   r'   r@   ro   r(   r"   r:   r   r   r   r!   r`   N  s   
	 
r`   c                   @  s   e Zd ZdZeeZdS )#AsyncAdaptFallback_dbapi_connectionr   N)r0   r1   r2   r   r   r   rZ   r   r   r   r!   r     s   r   c                   @  sL   e Zd ZdZdZddddZdddd	Zddd
dZddddZdS )AsyncAdapt_terminatezAMixin for a AsyncAdapt_dbapi_connection to add terminate support.r   r   r   c              
   C  sj   t  r^z| t|   W qf |  k
rZ } z|   t|tjrJ W 5 d }~X Y qfX n|   d S r   )	r   rZ   r   shield_terminate_graceful_close_terminate_handled_exceptions_terminate_force_close
isinstanceCancelledError)r    er   r   r!   	terminate  s    zAsyncAdapt_terminate.terminatez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 dS )z"Try to close connection gracefullyNNotImplementedErrorr   r   r   r!   r     s    z.AsyncAdapt_terminate._terminate_graceful_closec                 C  s   t dS )zTerminate the connectionNr   r   r   r   r!   r     s    z+AsyncAdapt_terminate._terminate_force_closeN)	r0   r1   r2   r3   r   r   r   r   r   r   r   r   r!   r     s   r   ))r3   
__future__r   r   re   r   typingr   r   r   r   r   r   r	   r
   r   r   Zenginer   utilr   Zutil.concurrencyr   r   r   Zutil.typingr   Zengine.interfacesr   r   r   r   r   r   r$   rU   rW   r   r`   r   r   r   r   r   r!   <module>   sF   8
 44