
                         ~    d 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 dd	lmZ dd
lZdd
lZdZ G d de      Zy
)z
Posix asyncio event loop.
    )unicode_literals   )InputStream   )AsyncioTimeout)	EventLoopINPUT_TIMEOUT)EventLoopCallbacks)PosixStdinReaderN)PosixAsyncioEventLoopc                   ^    e Zd Zd
dZej
                  d        Zd Zd Zd Z	d
dZ
d Zd	 Zy)r   Nc                 ~    |xs t        j                         | _        d| _        t        j                         | _        y )NF)asyncioget_event_looploopclosedFuture
_stopped_f)selfr   s     9lib/third_party/prompt_toolkit/eventloop/asyncio_posix.py__init__zPosixAsyncioEventLoop.__init__   s,    4G224	!..*    c              #      	K   t        t              sJ t        |j                                j                  rt        d      t        j                        	 t        j                          _
        fd}t        t        | j                        	 fd} j                  j                  t        j                   |        	fd} j                  j#                  |j                         |        j                  D ]  }|  	  j                  j%                  |j                                 j                  j'                  t        j                          	j)                          y#  j                  j%                  |j                                 j                  j'                  t        j                          	j)                          w xY ww)z)
        The input 'event loop'.
        zEvent loop already closed.c                  F    j                           j                          y)z
                When no input has been received for INPUT_TIMEOUT seconds,
                flush the input stream and fire the timeout event.
                N)flushinput_timeout)	callbacksinputstreams   r   timeout_handlerz?PosixAsyncioEventLoop.run_as_coroutine.<locals>.timeout_handler/   s    
 !!#'')r   c                  <    j                   j                         y N)call_from_executorterminal_size_changed)r   r   s   r   received_winchz>PosixAsyncioEventLoop.run_as_coroutine.<locals>.received_winch;   s    ''	(G(GHr   c                      j                         } j                  |        j                          j                  rj	                          y y r!   )readfeedresetr   stop)datar   r   stdin_readertimeouts    r   stdin_readyz;PosixAsyncioEventLoop.run_as_coroutine.<locals>.stdin_readyA   sA    #((*  &  &&IIK 'r   N)
isinstancer
   r   filenor   	Exceptionr   feed_keyr   r   r   r   r	   r   add_signal_handlersignalSIGWINCH
add_readerremove_readerremove_signal_handlerr)   )
r   stdinr   r   r$   r-   fr   r+   r,   s
   ` `    @@@r   run_as_coroutinez&PosixAsyncioEventLoop.run_as_coroutine   sH    
 )%7888 (7;;899!)"4"45,	%nn.DO* %]OTYYOGI II((.I  II  = __ %
 II##ELLN3II++FOO< LLN	 II##ELLN3II++FOO< LLNs!   AG B1E5 A#G5A$GGc                 :    | j                   j                  d       y NT)r   
set_resultr   s    r   r)   zPosixAsyncioEventLoop.stopX   s    ""4(r   c                     d| _         y r<   )r   r>   s    r   closezPosixAsyncioEventLoop.close\   s     r   c                 <    | j                   j                  d |       y r!   )r   run_in_executor)r   callbacks     r   rB   z%PosixAsyncioEventLoop.run_in_executora   s    		!!$1r   c                 :    | j                   j                  |       y)zm
        Call this function in the main event loop.
        Similar to Twisted's ``callFromThread``.
        N)r   call_soon_threadsafe)r   rC   _max_postpone_untils      r   r"   z(PosixAsyncioEventLoop.call_from_executord   s    
 			&&x0r   c                 <    | j                   j                  ||       y)z; Start watching the file descriptor for read availability. N)r   r5   )r   fdrC   s      r   r5   z PosixAsyncioEventLoop.add_readerk   s    		R*r   c                 :    | j                   j                  |       y)z: Stop watching the file descriptor for read availability. N)r   r6   )r   rH   s     r   r6   z#PosixAsyncioEventLoop.remove_readero   s    		#r   r!   )__name__
__module____qualname__r   r   	coroutiner:   r)   r@   rB   r"   r5   r6    r   r   r   r      s@    + : :x)
21+$r   r   )__doc__
__future__r   terminal.vt100_inputr   asyncio_baser   baser   r	   r   r
   posix_utilsr   r   r3   __all__r   rN   r   r   <module>rV      s9    ( . ( * ) )  
]$I ]$r   