
    MhV                        d dl mZ d dlZej        dk    sJ d dlZd dlmZ d dlmZm	Z	m
Z
mZ ddlmZ dd	lmZ dd
lmZ dgZ G d d          Z G d dee          ZdS )    )annotationsNwin32)contextmanager)ContextManagerIteratorTextIOcast   DummyContext   )	PipeInput)
Vt100InputPosixPipeInputc                  2    e Zd ZdZd	dZd	dZd	dZd	dZdS )
_PipezCWrapper around os.pipe, that ensures we don't double close any end.returnNonec                b    t          j                    \  | _        | _        d| _        d| _        d S )NF)ospiperead_fdwrite_fd_read_closed_write_closedselfs    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/input/posix_pipe.py__init__z_Pipe.__init__   s,    &(gii#dm!"    c                X    | j         rdS t          j        | j                   d| _         dS )z!Close read-end if not yet closed.NT)r   r   closer   r   s    r   
close_readz_Pipe.close_read   s2     	F
 r    c                X    | j         rdS t          j        | j                   d| _         dS )z"Close write-end if not yet closed.NT)r   r   r"   r   r   s    r   close_writez_Pipe.close_write$   s2     	F
!r    c                V    |                                   |                                  dS )zClose both read and write ends.N)r#   r%   r   s    r   r"   z_Pipe.close,   s*    r    Nr   r   )__name__
__module____qualname____doc__r   r#   r%   r"    r    r   r   r      sj        II# # # #
! ! ! !" " " "     r    r   c                       e Zd ZdZdZdd fd
Zeeddd                        ZddZ	ddZ
ddZddZddZddZ xZS )r   a  
    Input that is send through a pipe.
    This is useful if we want to send the input programmatically into the
    application. Mostly useful for unit testing.

    Usage::

        with PosixPipeInput.create() as input:
            input.send_text('inputdata')
    r    _piper   _textstrr   r   c                $    | _          G  fdd          }t                                          t          t           |                                                      |            j        xj        dz  c_         j        j         _        d S )Nc                  (    e Zd ZdZddZd	 fdZdS )
&PosixPipeInput.__init__.<locals>.Stdinutf-8r   boolc                    dS )NTr,   )stdins    r   isattyz-PosixPipeInput.__init__.<locals>.Stdin.isattyG   s    tr    intc                    j         j        S N)r   r   )r8   r   s    r   filenoz-PosixPipeInput.__init__.<locals>.Stdin.filenoJ   s    y((r    N)r   r6   )r   r:   )r(   r)   r*   encodingr9   r=   r   s   r   Stdinr4   D   sL        H   ) ) ) ) ) ) ) )r    r?   r   )r   superr   r	   r   	send_text	__class___id)r   r/   r0   r?   rB   s   `   r   r   zPosixPipeInput.__init__@   s    		) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	feegg..///u 	a>%r    textIterator[PosixPipeInput]c              #     K   t                      }	 t          ||          V  |                                 d S # |                                 w xY w)N)r/   r0   )r   r   r"   )clsrD   r   s      r   createzPosixPipeInput.createT   sR       ww	 t4888888JJLLLLLDJJLLLLs	   ; Adatabytesc                D    t          j        | j        j        |           d S r<   )r   writer   r   r   rI   s     r   
send_byteszPosixPipeInput.send_bytes]   s    
#T*****r    c                j    t          j        | j        j        |                    d                     dS )zSend text to the input.r5   N)r   rL   r   r   encoderM   s     r   rA   zPosixPipeInput.send_text`   s+    
#T[[%9%9:::::r    ContextManager[None]c                    t                      S r<   r   r   s    r   raw_modezPosixPipeInput.raw_moded       ~~r    c                    t                      S r<   r   r   s    r   cooked_modezPosixPipeInput.cooked_modeg   rT   r    c                8    | j                                          dS )zClose pipe fds.N)r   r%   r   s    r   r"   zPosixPipeInput.closej   s     		r    c                    d| j          S )z@
        This needs to be unique for every `PipeInput`.
        zpipe-input-)rC   r   s    r   typeahead_hashzPosixPipeInput.typeahead_hashr   s     (TX'''r    )r.   )r/   r   r0   r1   r   r   )rD   r1   r   rE   )rI   rJ   r   r   )rI   r1   r   r   )r   rQ   r'   )r   r1   )r(   r)   r*   r+   rC   r   classmethodr   rH   rN   rA   rS   rV   r"   rY   __classcell__)rB   s   @r   r   r   2   s        	 	 C& & & & & & &(     ^ [+ + + +; ; ; ;             ( ( ( ( ( ( ( (r    )
__future__r   sysplatformr   
contextlibr   typingr   r   r   r	   utilsr   baser   vt100r   __all__r   r   r,   r    r   <module>re      s   " " " " " " 




|w 				 % % % % % % 9 9 9 9 9 9 9 9 9 9 9 9                         
       <D( D( D( D( D(Z D( D( D( D( D(r    