o
    6	f                     @   s   d Z ddlmZ ddlmZmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlmZmZmZ ddlmZ ddlm Z  ddl!m"Z" e
rfddl#m$Z$ ej%j&Z&G dd dedef Z'dS )z
psycopg async cursor objects
    )TracebackType)AnyAsyncIteratorIterableList)OptionalTypeTYPE_CHECKINGoverload)asynccontextmanager   )pq)errors)QueryParams)	AsyncCopyAsyncWriter)RowRowMakerAsyncRowFactory)
BaseCursor)Self)Pipeline)AsyncConnectionc                       s  e Zd ZdZdZedBddZedddee fd	dZd
ddddeee  f fddZde	fddZ
deee  dee dee dd
fddZdCddZedee fddZejdee dd
fddZdee fddZ	
dDd
d
ddedee dee d ee de	f
d!d"Zd#d$ded%ee d&edd
fd'd(Z	
dDd
d)dedee d ee dee fd*d+Zdee fd,d-ZdEd/edee fd0d1Z dee fd2d3Z!dee fd4d5Z"dFd7ed8e#dd
fd9d:Z$e%	
dDd
d;d<edee d=ee& dee' fd>d?Z(dCd@dAZ)  Z*S )GAsyncCursorpsycopg 
connectionAsyncConnection[Row]c                 C      d S Nr   )selfr   r   r   M/home/ertert/spirit/venv/lib/python3.10/site-packages/psycopg/cursor_async.py__init__   s   zAsyncCursor.__init__AsyncConnection[Any]row_factoryc                C   r   r    r   r!   r   r%   r   r   r"   r#   "   s   N)r%   c                   s   t  | |p
|j| _d S r    )superr#   r%   _row_factoryr&   	__class__r   r"   r#   '   s   returnc                    s   | S r    r   r!   r   r   r"   
__aenter__0   s   zAsyncCursor.__aenter__exc_typeexc_valexc_tbc                    s   |   I d H  d S r    )close)r!   r.   r/   r0   r   r   r"   	__aexit__3   s   zAsyncCursor.__aexit__c                    s   |    d S r    )_closer,   r   r   r"   r1   ;   s   zAsyncCursor.closec                 C   s   | j S r    r(   r,   r   r   r"   r%   >   s   zAsyncCursor.row_factoryc                 C   s   || _ | jr|| | _d S d S r    )r(   pgresult	_make_row)r!   r%   r   r   r"   r%   B   s   c                 C   s
   |  | S r    r4   r,   r   r   r"   _make_row_makerH   s   
zAsyncCursor._make_row_makerpreparebinaryqueryparamsr9   r:   c             
      s   z3| j j4 I d H  | j | j||||dI d H  W d   I d H  W | S 1 I d H s-w   Y  W | S  tjyF } z|d d }~ww )Nr8   )_connlockwait_execute_gene_NO_TRACEBACKwith_traceback)r!   r;   r<   r9   r:   exr   r   r"   executeK   s   
zAsyncCursor.executeF)	returning
params_seqrF   c             
      s  zt  r| jj4 I d H  | jj}|r#| j| |||I d H  W d   I d H  n1 I d H s3w   Y  |s| j 4 I d H 7 | jj4 I d H  | j| |||I d H  W d   I d H  n1 I d H skw   Y  W d   I d H  n1 I d H sw   Y  W d S W d S W d S | jj4 I d H  | j| |||I d H  W d   I d H  W d S 1 I d H sw   Y  W d S  t	j
y } z|d d }~ww r    )r   is_supportedr=   r>   	_pipeliner?   _executemany_gen_pipelinepipeline_executemany_gen_no_pipelinerA   rB   rC   )r!   r;   rG   rF   prD   r   r   r"   executemany\   s8   
(&X2
zAsyncCursor.executemanyr:   c                C  sP  | j jr
td| jj4 I d H  zz8| j| j|||dI d H  d}| j| |I d H rL| j	
d| j}|V  d}| j| |I d H s3W n tjy_ } z|d d }~ww W | j jtkr| j  z| j| jddI d H r	 | j| jddI d H szW n	 ty   Y nw z| j| jddI d H  W na ty   Y ndw nL| j jtkr| j  z| j| jddI d H r	 | j| jddI d H sW n	 ty   Y nw z| j| jddI d H  W w  ty   Y w w w W d   I d H  d S W d   I d H  d S W d   I d H  d S 1 I d H s!w   Y  d S )Nz(stream() cannot be used in pipeline moderO   Tr   F)first)_pgconnpipeline_statusrA   ProgrammingErrorr=   r>   r?   _stream_send_gen_stream_fetchone_gen_txload_rowr6   rB   rC   transaction_statusACTIVEcancel	Exception)r!   r;   r<   r:   rP   recrD   r   r   r"   stream{   s   












!0zAsyncCursor.streamc                    sD   |   I d H  |   | j| j| j}|d ur |  jd7  _|S )Nr   )_fetch_pipeline_check_result_for_fetchrV   rW   _posr6   )r!   recordr   r   r"   fetchone   s   zAsyncCursor.fetchoner   sizec                    sf   |   I d H  |   | jsJ |s| j}| j| jt| j| | jj| j	}|  jt
|7  _|S r    )r^   r_   r5   	arraysizerV   	load_rowsr`   minntuplesr6   len)r!   rc   recordsr   r   r"   	fetchmany   s   
zAsyncCursor.fetchmanyc                    sH   |   I d H  |   | jsJ | j| j| jj| j}| jj| _|S r    )r^   r_   r5   rV   re   r`   rg   r6   )r!   ri   r   r   r"   fetchall   s   

zAsyncCursor.fetchallc                   s`      I d H     dtdtt f fdd}	 | j}|d u r%d S   jd7  _|V  q)Nposr+   c                    s    j |  jS r    )rV   rW   r6   )rl   r,   r   r"   load   s   z#AsyncCursor.__aiter__.<locals>.loadTr   )r^   r_   intr   r   r`   )r!   rm   rowr   r,   r"   	__aiter__   s   
zAsyncCursor.__aiter__relativevaluemodec                    s    |   I d H  | || d S r    )r^   _scroll)r!   rr   rs   r   r   r"   scroll   s   zAsyncCursor.scrollwriter	statementrw   c             
   C  s   zP| j j4 I dH  | j | ||I dH  W d  I dH  n1 I dH s(w   Y  t| |d4 I dH }|V  W d  I dH  n1 I dH sKw   Y  W n tjyc } z|dd}~ww | d dS )z#
        :rtype: AsyncCopy
        Nrv   r   )	r=   r>   r?   _start_copy_genr   rA   rB   rC   _select_current_result)r!   rx   r<   rw   copyrD   r   r   r"   r{      s   ((
zAsyncCursor.copyc              	      s   | j dur=| js?| jjrA| jj4 I d H  | j| jjjddI d H  W d   I d H  d S 1 I d H s6w   Y  d S d S d S d S )NFT)flush)_execmany_returningr5   r=   rI   r>   r?   
_fetch_genr,   r   r   r"   r^      s   
 .zAsyncCursor._fetch_pipeline)r   r   )r+   Nr    )r   )rq   )+__name__
__module____qualname__	__slots__r
   r#   r   r   r   r   r-   r   BaseExceptionr   r2   r1   propertyr%   setterr   r7   r   r   boolrE   r   rN   r   r]   rb   rn   r   rj   rk   rp   strru   r   AsyncCopyWriterr   r{   r^   __classcell__r   r   r)   r"   r      s    
	




"
-r   r$   N)(__doc__typesr   typingr   r   r   r   r   r   r	   r
   
contextlibr    r   r   rA   abcr   r   r{   r   r   r   rowsr   r   r   cursorr   _compatr   rI   r   connection_asyncr   TransactionStatusrY   r   r   r   r   r"   <module>   s"    