U
    g                     @   sJ  d dl Z d dlZd dlZd dl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 G dd dejZG dd dejZedkrFe Zee d	eiZd
D ]Ze e ee< qeeeZdadazd dlZW n ek
r   Y nX e Zde_e  ze  W n6 e k
r>   tr6t! s6t"  daY qY qX qFqdS )    N   )futuresc                       s$   e Zd Z fddZdd Z  ZS )AsyncIOInteractiveConsolec                    s*   t  | | jj jtjO  _|| _d S )N)super__init__compileZcompilerflagsastZPyCF_ALLOW_TOP_LEVEL_AWAITloop)selflocalsr
   	__class__ &/usr/lib/python3.8/asyncio/__main__.pyr      s    z"AsyncIOInteractiveConsole.__init__c                    st   t j  fdd}t| z
 W S  tk
rD    Y n, tk
rn   trb	d n
  Y nX d S )Nc               
      s  d a dat j} z
|  }W nz tk
r6    Y nf tk
rj } zda| W Y d S d }~X Y n2 tk
r } z| W Y d S d }~X Y nX t	
|s| d S zj|a tt  W n. tk
 r } z| W 5 d }~X Y nX d S )NFT)repl_futurerepl_future_interruptedtypesFunctionTyper   
SystemExitKeyboardInterruptZset_exceptionBaseExceptioninspectZiscoroutineZ
set_resultr
   Zcreate_taskr   Z_chain_future)funccoroZexexccodeZfuturer   r   r   callback   s,    




z3AsyncIOInteractiveConsole.runcode.<locals>.callbackz
KeyboardInterrupt
)
concurrentr   ZFuturer
   call_soon_threadsaferesultr   r   r   writeZshowtraceback)r   r   r   r   r   r   runcode   s    


z!AsyncIOInteractiveConsole.runcode)__name__
__module____qualname__r   r#   __classcell__r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )
REPLThreadc                 C   sZ   z6dtj dtj dt	tdd d	}t
j|d
d W 5 t jddtd ttj X d S )Nignorez ^coroutine .* was never awaited$)messagecategoryzasyncio REPL z on zy
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
Zps1z>>> zimport asynciozexiting asyncio REPL...)bannerZexitmsg)warningsfilterwarningsRuntimeWarningr
   r    stopsysversionplatformgetattrconsoleZinteract)r   r,   r   r   r   runF   s    "
zREPLThread.runN)r$   r%   r&   r6   r   r   r   r   r(   D   s   r(   __main__asyncio>   __builtins__
__loader____file__r$   __package____spec__FT)#r	   r8   r   Zconcurrent.futuresr   r   r1   Z	threadingr   r-    r   ZInteractiveConsoler   ZThreadr(   r$   Znew_event_loopr
   Zset_event_loopZrepl_localskeyr   r5   r   r   readlineImportErrorZrepl_threadZdaemonstartZrun_foreverr   ZdoneZcancelr   r   r   r   <module>   sF   6



