U
    puf4  ã                   @   s2   d Z ddlmZ ddlmZ e d¡Zdd„ ZdS )a\  
Inputhook for running the original asyncio event loop while we're waiting for
input.

By default, in IPython, we run the prompt with a different asyncio event loop,
because otherwise we risk that people are freezing the prompt by scheduling bad
coroutines. E.g., a coroutine that does a while/true and never yield back
control to the loop. We can't cancel that.

However, sometimes we want the asyncio loop to keep running while waiting for
a prompt.

The following example will print the numbers from 1 to 10 above the prompt,
while we are waiting for input. (This works also because we use
prompt_toolkit`s `patch_stdout`)::

    In [1]: import asyncio

    In [2]: %gui asyncio

    In [3]: async def f():
       ...:     for i in range(10):
       ...:         await asyncio.sleep(1)
       ...:         print(i)


    In [4]: asyncio.ensure_future(f())

é    )Ú__version__)Úget_asyncio_loopz3.c              	      sL   t rdS tƒ ‰ ‡ fdd„}|  ¡ }ˆ  ||¡ zˆ  ¡  W 5 ˆ  |¡ X dS )z7
    Inputhook for asyncio event loop integration.
    Nc                      s   ˆ   ¡  d S )N)Ústop© ©Zloopr   úJ/tmp/pip-unpacked-wheel-bxwx4lqe/IPython/terminal/pt_inputhooks/asyncio.pyr   6   s    zinputhook.<locals>.stop)ÚPTK3r   ÚfilenoZ
add_readerZremove_readerZrun_forever)Úcontextr   r	   r   r   r   Ú	inputhook%   s    r   N)	Ú__doc__Zprompt_toolkitr   Zptk_versionZIPython.core.async_helpersr   Ú
startswithr   r   r   r   r   r   Ú<module>   s   
