o
    jĎi                     @   st   d Z ddlZddlZddlZddlmZ ddlmZ edkr"ej	Z
nejZ
dddZdd	d
ZG dd dejZdS )zImplementation of coroutines using ``async def``/``await`` keywords.

These keywords replaced ``@asyncio.coroutine`` and ``yield from`` from
Python 3.5 onwards.
    N)version_info)EOF)      c              
      s   |   }|d ur|S | jjs/t   |  t  fdd| jI d H \}  |f| j_n| jj\ } |  |  zt	 j
|I d H W S  tjye } z|  | |W  Y d }~S d }~ww )Nc                      s    S N r   pattern_waiterr   R/home/jeff/fluffinator/venv/lib/python3.10/site-packages/pexpect/_async_w_await.py<lambda>   s    zexpect_async.<locals>.<lambda>)existing_dataspawnasync_pw_transportPatternWaiterset_expecter_loop_getterconnect_read_piperesume_readingasynciowait_forfutTimeoutErrorpause_readingtimeout)expecterr   idx	transportexcr   r   r
   expect_async   s*   

r   c                    s   g }| j |d  |dd  D ]}| j|ddI d H  || j j | j | q| j|ddI d H }|dkrN| j tj | jdddI d H  tdd	|| j jg S )Nr      T)r   async_z1Continuation prompt found - input was incomplete: )
childsendline_expect_promptappendbeforekillsignalSIGINT
ValueErrorjoin)replcmdlinesr   resline
prompt_idxr   r   r
   repl_run_command_async-   s   r2   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )r   Nc                 C   s   || _ t | _d S r   )r   r   Futurer   )selfr   r   r   r
   r   B   s   zPatternWaiter.set_expecterc                 C   (   | j  s| j | | j  d S d S r   )r   done
set_resultr   r   )r4   resultr   r   r
   foundF      
zPatternWaiter.foundc                 C   r5   r   )r   r6   set_exceptionr   r   r4   r   r   r   r
   errorK   r:   zPatternWaiter.errorc                 C   s
   || _ d S r   )r   )r4   r   r   r   r
   connection_madeP   s   
zPatternWaiter.connection_madec              
   C   s   | j j}|j|}||d | j r#|j| |j	| d S z| j 
|}|d ur6| | W d S W d S  tyU } z| j   | | W Y d }~d S d }~ww )Nread)r   r   _decoderdecode_logr   r6   _beforewrite_buffernew_datar9   	Exceptionerroredr=   )r4   datar   sindexr   r   r   r
   data_receivedS   s"   

zPatternWaiter.data_receivedc              
   C   sX   zd| j j_| j  }W n ty$ } z| | W Y d }~d S d }~ww | | d S )NT)r   r   flag_eofeofr   r=   r9   )r4   rK   r   r   r   r
   eof_receivedf   s   
zPatternWaiter.eof_receivedc                 C   s<   t |tr|jtjkr|   d S |d ur| | d S d S r   )
isinstanceOSErrorerrnoEIOrO   r=   r<   r   r   r
   connection_lostq   s
   zPatternWaiter.connection_lost)__name__
__module____qualname__r   r   r9   r=   r>   rL   rO   rT   r   r   r   r
   r   ?   s    r   r   )r   )__doc__r   rR   r)   sysr   py_version_infopexpectr   get_running_loopr   get_event_loopr   r2   Protocolr   r   r   r   r
   <module>   s    

