o
    Oh                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlZd dlZd dlZd dlmZ G dd dejejZeeejjdddZeG dd deZdddZdddZdS )    )annotationsN)InteractiveConsole)CodeType	FrameTypeFunctionType)Callable)finalc                   @  s   e Zd ZdS )SuppressDecoratorN)__name__
__module____qualname__ r   r   G/home/air/yokohama/back/venv/lib/python3.10/site-packages/trio/_repl.pyr	      s    r	   returnNonec               
   C  sd   dd l } dd l}z| tj|jd W d S  ty1 } ztd| ddd W Y d }~d S d }~ww )Nr      
z(
Press enter! Newline injection failed:  T)endflush)fcntltermiosioctlsysstdinTIOCSTIOSErrorprint)r   r   er   r   r   terminal_newline   s   "r   c                      s^   e Zd Zdd fddZdd
dZejdkr ddddZ  Z	S ddddZdddZ  Z	S )TrioInteractiveConsoleNrepl_localsdict[str, object] | Noner   r   c                   s2   t  j|d d | _| jj jtjO  _d| _d S )N)localsF)	super__init__tokencompilecompilerflagsastPyCF_ALLOW_TOP_LEVEL_AWAITinterrupted)selfr    	__class__r   r   r$   &   s   
zTrioInteractiveConsole.__init__coder   c                 C  s   t || j}t|rtjtj|}ntj	tj
|}t|tjrNt|jtr+|jt|j|jt_t_|jjt_tjdkrD|jt_ttjtjtj tjtjj d S )N)      )r   r"   inspectiscoroutinefunctiontriofrom_threadrunoutcomeacapturerun_synccapture
isinstanceErrorerror
SystemExittyper   	last_type
last_value__traceback__last_tracebackversion_infolast_exc
excepthooklowlevelcheckpoint_if_cancelled)r,   r/   funcresultr   r   r   runcode,   s   


zTrioInteractiveConsole.runcodewin32r   promptstrc                 C  s,   zt |W S  ty   tjtjj  w N)inputEOFErrorr4   r5   r6   rG   rH   )r,   rM   r   r   r   	raw_inputM   s   
z TrioInteractiveConsole.raw_inputc                   sz   ddl m m  jrJ d fdd}tj|}zt|W tj | jr.tS tj | jr<tw )Nr   )SIGINTsignalr   4Callable[[int, FrameType | None], None] | int | Nonec                    s$   d	 fdd} t j  | S )
NsigintframeFrameType | Noner   r   c                   s   d _ jtdd d S )NT)
idempotent)r+   run_sync_soonr   )rV   rX   )r,   r%   r   r   handler_   s   zJTrioInteractiveConsole.raw_input.<locals>.install_handler.<locals>.handler)rV   rW   rX   rY   r   r   )r4   rG   current_trio_token)r\   rS   r,   rT   )r%   r   install_handler\   s   

z9TrioInteractiveConsole.raw_input.<locals>.install_handler)r   rU   )rT   rS   r+   r4   r5   r9   rP   KeyboardInterrupt)r,   rM   r_   prev_handlerr   r^   r   rR   W   s   
outputc                 C  s@   | j r|dks	J tj|dd   d| _ d S tj| d S )Nz
KeyboardInterrupt
   F)r+   r   stderrwrite)r,   rb   r   r   r   re   q   s
   
zTrioInteractiveConsole.writerO   )r    r!   r   r   )r/   r   r   r   )r   )rM   rN   r   rN   )rb   rN   r   r   )
r
   r   r   r$   rK   r   platformrR   re   __classcell__r   r   r-   r   r   $   s    


r   consolec                   sf   dt j dt j dtt dd d}ztj| j|I d H  W tj	ddt
d	 d S tj	ddt
d	 w )
Nz
trio REPL z on zv
Use "await" directly instead of "trio.run()".
Type "help", "copyright", "credits" or "license" for more information.
ps1z>>> zimport trioignorez ^coroutine .* was never awaited$)messagecategory)r   versionrf   getattrr4   	to_threadr9   interactwarningsfilterwarningsRuntimeWarning)rh   bannerr   r   r   run_replz   s    
ru   original_localsdict[str, object]c                 C  sh   t t dd l}W d    n1 sw   Y  dti}dD ]}| | ||< qt|}tt| d S )Nr   r4   >   __file__r
   __spec__
__loader____package____builtins__)
contextlibsuppressImportErrorreadliner4   r   r6   ru   )rv   r   r    keyrh   r   r   r   main   s   
r   )r   r   )rh   r   r   r   )rv   rw   r   r   )
__future__r   r)   r}   r2   r   rq   r/   r   typesr   r   r   typingr   r7   r4   trio.lowlevel
trio._utilr   ContextDecoratorr~   r	   r`   rG   disable_ki_protectionr   r   ru   r   r   r   r   r   <module>   s*    
U