
    Mh                        d Z ddlmZ ddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlZddlmZmZ ddlmZ ddlmZmZ dd	lmZ d
dgZ G d d
ej                  Z G d dej                  ZdS )zI
Utility for running a prompt_toolkit application in an asyncssh server.
    )annotationsN)get_running_loop)AnyCallable	CoroutineTextIOcast)
AppSessioncreate_app_session)Size)	PipeInputcreate_pipe_input)Vt100_OutputPromptToolkitSSHSessionPromptToolkitSSHServerc                  N    e Zd ZddZdd	ZddZddZd dZd dZd!dZ	d"dZ
dS )#r   interact>Callable[[PromptToolkitSSHSession], Coroutine[Any, Any, None]]
enable_cprboolreturnNonec                    | _         | _        d  _        d  _        d  _        d  _        d  _         G  fdd          }t          t           |                       _	        d S )Nc                  H    e Zd Zd fdZddZddZed fd	            Zd
S )0PromptToolkitSSHSession.__init__.<locals>.Stdoutdatastrr   r   c                    	 j         0j                             |                    dd                     d S d S # t          $ r Y d S w xY w)N
z
)_chanwritereplaceBrokenPipeError)sr   selfs     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/contrib/ssh/server.pyr!   z6PromptToolkitSSHSession.__init__.<locals>.Stdout.write,   sd    z-
((dF)C)CDDDDD .-&   DDs   5< 
A
	A
r   c                    dS NT r$   s    r&   isattyz7PromptToolkitSSHSession.__init__.<locals>.Stdout.isatty3   s    t    c                    d S Nr)   r*   s    r&   flushz6PromptToolkitSSHSession.__init__.<locals>.Stdout.flush6   s    r,   c                x    j         J t          j         j                                        d                   S )Nr   )r    r   
_orig_changet_encoding)r$   r%   s    r&   encodingz9PromptToolkitSSHSession.__init__.<locals>.Stdout.encoding9   s5    z---4:0==??BCCCr,   N)r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname__r!   r+   r/   propertyr3   r%   s   r&   Stdoutr   +   s                    D D D D D XD D Dr,   r;   )
r   r   interact_taskr    app_session_input_outputr	   r   stdout)r%   r   r   r;   s   `   r&   __init__z PromptToolkitSSHSession.__init__   s     !$8<!%
.2
 )-,0	D 	D 	D 	D 	D 	D 	D 	D 	D 	D& 66688,,r,   r   c                    | j         t          dd          S | j                                         \  }}}}t          ||          S )zU
        Callable that returns the current `Size`, required by Vt100_Output.
        N   O   )rowscolumns)r    r   get_terminal_sizer%   widthheightpixwidth	pixheights        r&   	_get_sizez!PromptToolkitSSHSession._get_size@   sN     :R,,,,151M1M1O1O.E68YVU3333r,   chanr   c                    || _         d S r.   )r    )r%   rN   s     r&   connection_madez'PromptToolkitSSHSession.connection_madeJ   s    


r,   c                    dS r(   r)   r:   s    r&   shell_requestedz'PromptToolkitSSHSession.shell_requestedM   s    tr,   c                v    t                                          |                                           | _        d S r.   )r   create_task	_interactr<   r:   s    r&   session_startedz'PromptToolkitSSHSession.session_startedP   s.    -//;;DNN<L<LMMr,   c                N  K   | j         t          d          t          | j         d          r&| j         j        | j                             d           | j                                         }t          | j        | j        || j	                  | _
        t                      5 | _        t          | j        | j
                  5 }|| _        	 |                     |            d {V  n## t           $ r t#          j                     Y nw xY w| j                                          | j                                         n7# | j                                          | j                                         w xY w	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz,`_interact` called before `connection_made`.set_line_modeF)termr   )inputoutput)r    	Exceptionhasattr_editorrX   get_terminal_typer   r@   rM   r   r?   r   r>   r   r=   r   BaseException	traceback	print_excclose)r%   rY   sessions      r&   rU   z!PromptToolkitSSHSession._interactS   s*     :JKKK4:// 	,DJ4F4R J$$U+++z++--#Kdt
 
 
    
	(DK#$+dlKKK 	(w#* (------------$ * * *')))))* J$$&&&K%%'''' J$$&&&K%%'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	( 
	(sl   "!FFC('D>(DD>DD>3F>4E22F6FF	F	F	
FF!FrI   intrJ   rK   objectrL   c                p    | j         r,| j         j        r"| j         j                                         d S d S d S r.   )r=   app
_on_resizerH   s        r&   terminal_size_changedz-PromptToolkitSSHSession.terminal_size_changedo   sN      	. 0 4 	. ++-----	. 	. 	. 	.r,   r   r   datatypec                L    | j         d S | j                             |           d S r.   )r>   	send_text)r%   r   rk   s      r&   data_receivedz%PromptToolkitSSHSession.data_receivedv   s+    ;Fd#####r,   Nr   r   r   r   r   r   )r   r   )rN   r   r   r   r4   r5   )
rI   re   rJ   re   rK   rf   rL   rf   r   r   )r   r   rk   rf   r   r   )r6   r7   r8   rA   rM   rP   rR   rV   rU   rj   rn   r)   r,   r&   r   r      s        '- '- '- '-R4 4 4 4      N N N N( ( ( (8. . . .$ $ $ $ $ $r,   c                  0    e Zd ZdZdddd
ZddZddZdS )r   aZ  
    Run a prompt_toolkit application over an asyncssh server.

    This takes one argument, an `interact` function, which is called for each
    connection. This should be an asynchronous function that runs the
    prompt_toolkit applications. This function runs in an `AppSession`, which
    means that we can have multiple UI interactions concurrently.

    Example usage:

    .. code:: python

        async def interact(ssh_session: PromptToolkitSSHSession) -> None:
            await yes_no_dialog("my title", "my text").run_async()

            prompt_session = PromptSession()
            text = await prompt_session.prompt_async("Type something: ")
            print_formatted_text('You said: ', text)

        server = PromptToolkitSSHServer(interact=interact)
        loop = get_running_loop()
        loop.run_until_complete(
            asyncssh.create_server(
                lambda: MySSHServer(interact),
                "",
                port,
                server_host_keys=["/etc/ssh/..."],
            )
        )
        loop.run_forever()

    :param enable_cpr: When `True`, the default, try to detect whether the SSH
        client runs in a terminal that responds to "cursor position requests".
        That way, we can properly determine how much space there is available
        for the UI (especially for drop down menus) to render.
    Tr   r   r   r   r   r   r   c               "    || _         || _        d S r.   )r   r   )r%   r   r   s      r&   rA   zPromptToolkitSSHServer.__init__   s     !$r,   usernamer   c                    dS )NFr)   )r%   rs   s     r&   
begin_authz!PromptToolkitSSHServer.begin_auth   s    ur,   r   c                8    t          | j        | j                  S )Nrq   )r   r   r   r:   s    r&   session_requestedz(PromptToolkitSSHServer.session_requested   s    &t}QQQQr,   Nro   )rs   r   r   r   )r   r   )r6   r7   r8   __doc__rA   ru   rw   r)   r,   r&   r   r   ~   sp        # #R  	% % % % % %   R R R R R Rr,   )rx   
__future__r   asynciora   r   typingr   r   r   r   r	   asyncssh"prompt_toolkit.application.currentr
   r   prompt_toolkit.data_structuresr   prompt_toolkit.inputr   r   prompt_toolkit.output.vt100r   __all__SSHServerSessionr   	SSHServerr   r)   r,   r&   <module>r      sS    # " " " " "      $ $ $ $ $ $ 9 9 9 9 9 9 9 9 9 9 9 9 9 9  M M M M M M M M / / / / / / = = = = = = = = 4 4 4 4 4 4$&>
?e$ e$ e$ e$ e$h7 e$ e$ e$P4R 4R 4R 4R 4RX/ 4R 4R 4R 4R 4Rr,   