§
    ŒŸ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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     €ún/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/prompt_toolkit/contrib/ssh/server.pyr!   z6PromptToolkitSSHSession.__init__.<locals>.Stdout.write,   sd   ø€ ðØ”zÐ-Øœ
×(Ò(¨¯ª°d¸FÑ)CÔ)CÑDÔDÐDÐDÐDð .Ð-øå&ð ð ð Ø�D�Dðøøø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õ& �6 6 6¡8¤8Ñ,Ô,ˆŒˆˆ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´×1MÒ1MÑ1OÔ1OÑ.ˆE�6˜8 YÝ˜V¨UÐ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.   € Ý-Ñ/Ô/×;Ò;¸D¿NºNÑ<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”:˜Ñ/Ô/ð 	,°D´JÔ4FÐ4Rð ŒJ×$Ò$ UÑ+Ô+Ð+àŒz×+Ò+Ñ-Ô-ˆå#ØŒK˜œ¨d¸t¼ð
ñ 
ô 
ˆŒõ Ñ Ô ð 
	( D¤KÝ#¨$¬+¸d¼lÐ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,   