
     h                        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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	AwaitableCallableOptional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   interact4Callable[[PromptToolkitSSHSession], Awaitable[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     ]/var/www/html/Sam_Eipo/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.isatty2   s    t    c                    d S Nr*   r+   s    r'   flushz6PromptToolkitSSHSession.__init__.<locals>.Stdout.flush5   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.encoding8   s5    z---4:0==??BCCCr-   N)r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname__r"   r,   r0   propertyr4   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&   rO   s     r'   connection_madez'PromptToolkitSSHSession.connection_madeI   s    


r-   c                    dS r)   r*   r;   s    r'   shell_requestedz'PromptToolkitSSHSession.shell_requestedL   s    tr-   c                v    t                                          |                                           | _        d S r/   )r   create_task	_interactr=   r;   s    r'   session_startedz'PromptToolkitSSHSession.session_startedO   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_editorrY   get_terminal_typer   rA   rN   r   r@   r   r?   r   r>   r   BaseException	traceback	print_excclose)r&   rZ   sessions      r'   rV   z!PromptToolkitSSHSession._interactR   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rJ   intrK   rL   objectrM   c                p    | j         r,| j         j        r"| j         j                                         d S d S d S r/   )r>   app
_on_resizerI   s        r'   terminal_size_changedz-PromptToolkitSSHSession.terminal_size_changedn   sN      	. 0 4 	. ++-----	. 	. 	. 	.r-   r   r   datatypec                L    | j         d S | j                             |           d S r/   )r?   	send_text)r&   r   rl   s      r'   data_receivedz%PromptToolkitSSHSession.data_receivedu   s+    ;Fd#####r-   Nr   r   r   r   r   r   )r   r   )rO   r   r   r   r5   r6   )
rJ   rf   rK   rf   rL   rg   rM   rg   r   r   )r   r   rl   rg   r   r   )r7   r8   r9   rB   rN   rQ   rS   rW   rV   rk   ro   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'   rB   zPromptToolkitSSHServer.__init__   s     !$r-   usernamer   c                    dS )NFr*   )r&   rt   s     r'   
begin_authz!PromptToolkitSSHServer.begin_auth   s    ur-   r   c                8    t          | j        | j                  S )Nrr   )r   r   r   r;   s    r'   session_requestedz(PromptToolkitSSHServer.session_requested   s    &t}QQQQr-   Nrp   )rt   r   r   r   )r   r   )r7   r8   r9   __doc__rB   rv   rx   r*   r-   r'   r   r   }   sp        # #R  	% % % % % %   R R R R R Rr-   )ry   
__future__r   asynciorb   r   typingr   r   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      sY    # " " " " "      $ $ $ $ $ $ C C C C C C C C C C C C C C C C  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-   