Ë
    V.jò  ã                  óè   — 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j0                  «      Z G d„ dej4                  «      Zy)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                  ól   — 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
y	)r   c               ó´   ‡ — |‰ _         |‰ _        d ‰ _        d ‰ _        d ‰ _        d ‰ _        d ‰ _         G ˆ fd„d«      }t        t         |«       «      ‰ _	        y )Nc                  ó@   •— e Zd Zdˆ fd„Zdd„Zdd„Zed	ˆ fd„«       Zy)
ú0PromptToolkitSSHSession.__init__.<locals>.Stdoutc                ó–   •— 	 ‰j                   �,‰j                   j                  |j                  dd«      «       y y # t        $ r Y y w xY w)NÚ
z
)Ú_chanÚwriteÚreplaceÚBrokenPipeError)ÚsÚdataÚselfs     €úcC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\prompt_toolkit/contrib/ssh/server.pyr   z6PromptToolkitSSHSession.__init__.<locals>.Stdout.write,   sF   ø€ ðØ—z‘zÐ-ØŸ
™
×(Ñ(¨¯©°d¸FÓ)CÕDð .øä&ò Ùðús   ƒ7< ¼	AÁAc                 ó   — y©NT© ©r   s    r   Úisattyz7PromptToolkitSSHSession.__init__.<locals>.Stdout.isatty3   s   € Øó    c                 ó   — y ©Nr"   r#   s    r   Úflushz6PromptToolkitSSHSession.__init__.<locals>.Stdout.flush6   s   € Ør%   c                ó€   •— ‰j                   €J ‚t        ‰j                   j                  j                  «       d   «      S )Nr   )r   ÚstrÚ
_orig_chanÚget_encoding)r   r   s    €r   Úencodingz9PromptToolkitSSHSession.__init__.<locals>.Stdout.encoding9   s6   ø€ à—z‘zÐ-Ð-Ð-Ü˜4Ÿ:™:×0Ñ0×=Ñ=Ó?ÀÑBÓCÐCr%   N)r   r*   ÚreturnÚNone©r.   Úbool©r.   r/   )r.   r*   )Ú__name__Ú
__module__Ú__qualname__r   r$   r(   Úpropertyr-   ©r   s   €r   ÚStdoutr   +   s(   ø„ õóóð ôDó ñDr%   r8   )
ÚinteractÚ
enable_cprÚinteract_taskr   Úapp_sessionÚ_inputÚ_outputr	   r   Ústdout)r   r9   r:   r8   s   `   r   Ú__init__z PromptToolkitSSHSession.__init__   sX   ø€ ð !ˆŒØ$ˆŒØ8<ˆÔØ!%ˆŒ
Ø.2ˆÔð
 )-ˆŒØ,0ˆŒ÷	Dó 	Dô& œ6¡6£8Ó,ˆ�r%   c                óŒ   — | j                   €t        dd¬«      S | j                   j                  «       \  }}}}t        ||¬«      S )zU
        Callable that returns the current `Size`, required by Vt100_Output.
        é   éO   )ÚrowsÚcolumns)r   r   Úget_terminal_size©r   ÚwidthÚheightÚpixwidthÚ	pixheights        r   Ú	_get_sizez!PromptToolkitSSHSession._get_size@   sC   € ð �:‰:ÐÜ˜R¨Ô,Ð,à15·±×1MÑ1MÓ1OÑ.ˆE�6˜8 YÜ˜V¨UÔ3Ð3r%   c                ó   — || _         y r'   )r   )r   Úchans     r   Úconnection_madez'PromptToolkitSSHSession.connection_madeJ   s	   € Øˆ�
r%   c                 ó   — yr!   r"   r7   s    r   Úshell_requestedz'PromptToolkitSSHSession.shell_requestedM   s   € Ør%   c                ó\   — t        «       j                  | j                  «       «      | _        y r'   )r   Úcreate_taskÚ	_interactr;   r7   s    r   Úsession_startedz'PromptToolkitSSHSession.session_startedP   s   € Ü-Ó/×;Ñ;¸D¿N¹NÓ<LÓMˆÕr%   c              ƒ  ó|  K  — | j                   €t        d«      ‚t        | j                   d«      r1| j                   j                  �| j                   j	                  d«       | j                   j                  «       }t        | j                  | j                  || j                  ¬«      | _
        t        «       5 | _        t        | j                  | j                  ¬«      5 }|| _        	 | j                  | «      ƒ d {  –—†  | j                   j'                  «        | j                  j'                  «        	 d d d «       d d d «       y 7 ŒJ# t         $ r t#        j$                  «        Y Œgw xY w# | j                   j'                  «        | j                  j'                  «        w xY w# 1 sw Y   ŒpxY w# 1 sw Y   y xY w­w)Nz,`_interact` called before `connection_made`.Úset_line_modeF)Útermr:   )ÚinputÚoutput)r   Ú	ExceptionÚhasattrÚ_editorrW   Úget_terminal_typer   r?   rL   r:   r>   r   r=   r   r<   r9   ÚBaseExceptionÚ	tracebackÚ	print_excÚclose)r   rX   Úsessions      r   rT   z!PromptToolkitSSHSession._interactS   sD  è ø€ Ø�:‰:ÐäÐJÓKÐKä�4—:‘:˜Ô/°D·J±J×4FÑ4FÐ4Rð �J‰J×$Ñ$ UÔ+à�z‰z×+Ñ+Ó-ˆä#Ø�K‰K˜Ÿ™¨d¸t¿¹ô
ˆŒô Ô  D¤KÜ#¨$¯+©+¸d¿l¹lÕKÈwØ#*�Ô ð(ØŸ-™-¨Ó-×-Ð-ð
 —J‘J×$Ñ$Ô&Ø—K‘K×%Ñ%Õ'÷ L÷ !Ð ð .ùÜ$ò *Ü×'Ñ'Ö)ð*ûð —J‘J×$Ñ$Ô&Ø—K‘K×%Ñ%Õ'ú÷ LÐKú÷ !Ð üsx   ‚B5F<Â7'F0ÃF$Ã'EÃ;EÃ<EÄ 4F$Ä5F0Ä=	F<ÅEÅE(Å%E+Å'E(Å(E+Å+6F!Æ!F$Æ$F-	Æ)F0Æ0F9Æ5F<c                ó”   — | j                   r<| j                   j                  r%| j                   j                  j                  «        y y y r'   )r<   ÚappÚ
_on_resizerG   s        r   Úterminal_size_changedz-PromptToolkitSSHSession.terminal_size_changedo   s;   € ð ×Ò × 0Ñ 0× 4Ò 4Ø×Ñ× Ñ ×+Ñ+Õ-ð !5Ðr%   c                óT   — | j                   €y | j                   j                  |«       y r'   )r=   Ú	send_text)r   r   Údatatypes      r   Údata_receivedz%PromptToolkitSSHSession.data_receivedv   s!   € Ø�;‰;Ðàà�‰×Ñ˜dÕ#r%   N©r9   z>Callable[[PromptToolkitSSHSession], Coroutine[Any, Any, None]]r:   r1   r.   r/   )r.   r   )rN   r   r.   r/   r0   r2   )
rH   ÚintrI   rm   rJ   ÚobjectrK   rn   r.   r/   )r   r*   rj   rn   r.   r/   )r3   r4   r5   r@   rL   rO   rQ   rU   rT   rg   rk   r"   r%   r   r   r      sp   „ ð'-àPð'-ð ð	'-ð
 
ó'-óR4óóóNó(ð8.Øð.Ø"%ð.Ø17ð.ØDJð.à	ó.ô$r%   c                  ó8   — e Zd ZdZddœ	 	 	 	 	 dd„Zd	d„Zd
d„Zy)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:   c               ó    — || _         || _        y r'   )r9   r:   )r   r9   r:   s      r   r@   zPromptToolkitSSHServer.__init__¤   s   € ð !ˆŒØ$ˆ�r%   c                 ó   — y)NFr"   )r   Úusernames     r   Ú
begin_authz!PromptToolkitSSHServer.begin_auth­   s   € àr%   c                óD   — t        | j                  | j                  ¬«      S )Nrp   )r   r9   r:   r7   s    r   Úsession_requestedz(PromptToolkitSSHServer.session_requested±   s   € Ü& t§}¡}ÀÇÁÔQÐQr%   Nrl   )rs   r*   r.   r1   )r.   r   )r3   r4   r5   Ú__doc__r@   rt   rv   r"   r%   r   r   r   ~   s9   „ ñ#ðR  ñ	%àPð%ð ð	%ð
 
ó%óôRr%   )rw   Ú
__future__r   Úasyncior`   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ƒ      sa   ðñõ #ã Û Ý $ß 9Õ 9ã ç MÝ /ß =Ý 4à$Ð&>Ð
?€ôe$˜h×7Ñ7ô e$ôP4R˜X×/Ñ/õ 4Rr%   