U
    h'                     @  sh  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 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"dS )$z?generic asyncio-adapted versions of DBAPI connection and cursor    )annotationsN)Any)AsyncIterator)Deque)Iterator)NoReturn)Optional)Sequence)TYPE_CHECKING   )AdaptedConnection)await_fallback)
await_only)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   A/tmp/pip-unpacked-wheel-y9ln43lq/sqlalchemy/connectors/asyncio.pycommit/       zAsyncIODBAPIConnection.commitr   AsyncIODBAPICursor)argskwargsr   c                 O  s   d S r   r   )r   r!   r"   r   r   r   cursor1   r   zAsyncIODBAPIConnection.cursorc                   s   d S r   r   r   r   r   r   rollback3   r   zAsyncIODBAPIConnection.rollbackstrkeyr   c                 C  s   d S r   r   r   r'   r   r   r   __getattr__5   r   z"AsyncIODBAPIConnection.__getattr__)r'   valuer   c                 C  s   d S r   r   )r   r'   r*   r   r   r   __setattr__7   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__A   r   zAsyncIODBAPICursor.__aenter__r   c                 C  s   dS )z(The description attribute of the Cursor.Nr   r   r   r   r   descriptionC   s    zAsyncIODBAPICursor.descriptionintc                 C  s   d S r   r   r   r   r   r   rowcountJ   s    zAsyncIODBAPICursor.rowcount	arraysize	lastrowidr   c                   s   d S r   r   r   r   r   r   closeQ   r   zAsyncIODBAPICursor.closeN#Optional[_DBAPISingleExecuteParams]	operation
parametersr   c                   s   d S r   r   r   r9   r:   r   r   r   executeS   s    zAsyncIODBAPICursor.executer   c                   s   d S r   r   r;   r   r   r   executemanyY   s    zAsyncIODBAPICursor.executemanyOptional[Any]c                   s   d S r   r   r   r   r   r   fetchone_   r   zAsyncIODBAPICursor.fetchone.Optional[int]Sequence[Any]sizer   c                   s   d S r   r   r   rC   r   r   r   	fetchmanya   r   zAsyncIODBAPICursor.fetchmanyc                   s   d S r   r   r   r   r   r   fetchallc   r   zAsyncIODBAPICursor.fetchall)sizesr   c                   s   d S r   r   )r   rG   r   r   r   setinputsizese   r   z AsyncIODBAPICursor.setinputsizes)rC   columnr   c                 C  s   d S r   r   )r   rC   rI   r   r   r   setoutputsizeg   r   z AsyncIODBAPICursor.setoutputsizer%   )procnamer:   r   c                   s   d S r   r   )r   rK   r:   r   r   r   callproci   s    zAsyncIODBAPICursor.callproczOptional[bool]c                   s   d S r   r   r   r   r   r   nextsetm   r   zAsyncIODBAPICursor.nextsetzAsyncIterator[Any]c                 C  s   d S r   r   r   r   r   r   	__aiter__o   r   zAsyncIODBAPICursor.__aiter__)N).).)r,   r-   r.   r/   r0   propertyr1   r3   __annotations__r6   r<   r=   r?   rE   rF   rH   rJ   rL   rM   rN   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)   y   r   z#AsyncAdapt_dbapi_module.__getattr__N)
r,   r-   r.   r
   r   ErrorZOperationalErrorZInterfaceErrorZIntegrityErrorr)   r   r   r   r   rQ   r   s   rQ   c                   @  s  e Zd ZU dZdZ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dJd%d&d%d'd(d)Zd%d*d%d+d,d-Zd%d&d%d'd.d/Zd%d*d%d+d0d1Zddd2d3Zd%dd4d5d6Zd7dd8d9Zd%d%d%dd:d;d<Zd=dd>d?Zd@ddAdBZdKdCdDdEdFdGZdDddHdIZd$S )LAsyncAdapt_dbapi_cursorF)_adapt_connection_connectionawait__cursor_rowsr    rW   AsyncAdapt_dbapi_connectionrT   r   rU   z
Deque[Any]rX   )adapt_connectionc                 C  sB   || _ |j| _|j| _| | j}| || _| js>t | _	d S r   )
rT   rU   rV   _make_new_cursor_aenter_cursorrW   server_sidecollectionsdequerX   )r   rZ   r#   r   r   r   __init__   s    z AsyncAdapt_dbapi_cursor.__init__)r#   r   c                 C  s   |  | S r   )rV   r0   )r   r#   r   r   r   r\      s    z&AsyncAdapt_dbapi_cursor._aenter_cursor)
connectionr   c                 C  s   |  S r   )r#   )r   ra   r   r   r   r[      s    z(AsyncAdapt_dbapi_cursor._make_new_cursorz!Optional[_DBAPICursorDescription]r   c                 C  s   | j jS r   )rW   r1   r   r   r   r   r1      s    z#AsyncAdapt_dbapi_cursor.descriptionr2   c                 C  s   | j jS r   )rW   r3   r   r   r   r   r3      s    z AsyncAdapt_dbapi_cursor.rowcountc                 C  s   | j jS r   rW   r4   r   r   r   r   r4      s    z!AsyncAdapt_dbapi_cursor.arraysizer   )r*   r   c                 C  s   || j _d S r   rb   )r   r*   r   r   r   r4      s    c                 C  s   | j jS r   )rW   r5   r   r   r   r   r5      s    z!AsyncAdapt_dbapi_cursor.lastrowidc                 C  s   | j   d S r   )rX   clearr   r   r   r   r6      s    zAsyncAdapt_dbapi_cursor.closeNr   r7   r8   c              
   C  sH   z|  | ||W S  tk
rB } z| j| W 5 d }~X Y nX d S r   )rV   _execute_async	ExceptionrT   _handle_exception)r   r9   r:   errorr   r   r   r<      s    zAsyncAdapt_dbapi_cursor.executer   )r9   seq_of_parametersr   c              
   C  sH   z|  | ||W S  tk
rB } z| j| W 5 d }~X Y nX d S r   )rV   _executemany_asyncre   rT   rf   )r   r9   rh   rg   r   r   r   r=      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   )
rT   _execute_mutexrW   r<   r1   r]   r^   r_   rF   rX   )r   r9   r:   resultr   r   r   rd      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   )rT   rj   rW   r=   )r   r9   rh   r   r   r   ri      s    z*AsyncAdapt_dbapi_cursor._executemany_asyncc                 C  s:   |  | j  | jjr6| js6t|  | j | _d S r   )	rV   rW   rM   r1   r]   r^   r_   rF   rX   r   r   r   r   rM      s
    zAsyncAdapt_dbapi_cursor.nextset)
inputsizesr   c                 G  s   |  | jj| S r   )rV   rW   rH   )r   rl   r   r   r   rH      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   )r6   )r   rn   r*   ro   r   r   r   __exit__   s    z AsyncAdapt_dbapi_cursor.__exit__Iterator[Any]c                 c  s   | j r| j  V  q d S r   rX   popleftr   r   r   r   __iter__   s    z AsyncAdapt_dbapi_cursor.__iter__r>   c                 C  s   | j r| j  S d S d S r   rr   r   r   r   r   r?      s    
z AsyncAdapt_dbapi_cursor.fetchoner@   rA   rB   c                   s4   |d kr| j }| j  fddtt|t D S )Nc                   s   g | ]}   qS r   )rs   ).0_rrr   r   
<listcomp>  s     z5AsyncAdapt_dbapi_cursor.fetchmany.<locals>.<listcomp>)r4   rX   rangeminlenrD   r   rw   r   rE     s    z!AsyncAdapt_dbapi_cursor.fetchmanyc                 C  s   t | j}| j  |S r   )listrX   rc   )r   retvalr   r   r   rF     s    

z AsyncAdapt_dbapi_cursor.fetchall)N)N)r,   r-   r.   r]   	__slots__rP   r`   r\   r[   rO   r1   r3   r4   setterr5   r6   r<   r=   rd   ri   rM   rH   rm   rp   rt   r?   rE   rF   r   r   r   r   rS   |   sB   
 
rS   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   )rW   rV   r6   r   r   r   r   r6     s    
z AsyncAdapt_dbapi_ss_cursor.closer>   c                 C  s   |  | j S r   )rV   rW   r?   r   r   r   r   r?     s    z#AsyncAdapt_dbapi_ss_cursor.fetchoneNr@   r   rB   c                 C  s   |  | jj|dS )N)rC   )rV   rW   rE   rD   r   r   r   rE     s    z$AsyncAdapt_dbapi_ss_cursor.fetchmanyrA   c                 C  s   |  | j S r   )rV   rW   rF   r   r   r   r   rF     s    z#AsyncAdapt_dbapi_ss_cursor.fetchallrq   c                 c  s>   | j  }z| | V  W q
 tk
r6   Y q:Y q
X q
d S r   )rW   rN   rV   	__anext__StopAsyncIteration)r   iteratorr   r   r   rt     s
    
z#AsyncAdapt_dbapi_ss_cursor.__iter__)N)
r,   r-   r.   r   r]   r6   r?   rE   rF   rt   r   r   r   r   r     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 )"rY   )dbapirj   r   rU   r   )r   ra   c                 C  s   || _ || _t | _d S r   )r   rU   asyncioLockrj   )r   r   ra   r   r   r   r`   2  s    z$AsyncAdapt_dbapi_connection.__init__FboolrS   )r]   r   c                 C  s   |r|  | S | | S d S r   )_ss_cursor_cls_cursor_cls)r   r]   r   r   r   r#   7  s    
z"AsyncAdapt_dbapi_connection.cursorNr7   r8   c                 C  s   |   }||| |S )z2lots of DBAPIs seem to provide this, so include it)r#   r<   )r   r9   r:   r#   r   r   r   r<   =  s    z#AsyncAdapt_dbapi_connection.executere   r   )rg   r   c                 C  s   t  }||d d S )Nr   )sysexc_infowith_traceback)r   rg   r   r   r   r   rf   G  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   )rV   rU   r$   re   rf   r   rg   r   r   r   r$   L  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   )rV   rU   r   re   rf   r   r   r   r   r   R  s    z"AsyncAdapt_dbapi_connection.commitc                 C  s   |  | j  d S r   )rV   rU   r6   r   r   r   r   r6   X  s    z!AsyncAdapt_dbapi_connection.close)F)N)r,   r-   r.   rS   r   r   r   staticmethodr   rV   r   rP   r`   r#   r<   rf   r$   r   r6   r   r   r   r   rY   (  s   
	 
rY   c                   @  s   e Zd ZdZeeZdS )#AsyncAdaptFallback_dbapi_connectionr   N)r,   r-   r.   r   r   r   rV   r   r   r   r   r   \  s   r   )#r/   
__future__r   r   r^   r   typingr   r   r   r   r   r   r	   r
   Zenginer   Zutil.concurrencyr   r   Zutil.typingr   Zengine.interfacesr   r   r   r   r   r   r    rQ   rS   r   rY   r   r   r   r   r   <module>   s<   8
 4