)L idZddlmZddlZddlZddlmZddlmZmZm Z m Z m Z ddl Z ddl mZmZddlmZddlmZmZdd lmZd d gZGd d e j0ZGd d e j4Zy)zI Utility for running a prompt_toolkit application in an asyncssh server. ) annotationsN)get_running_loop)AnyCallable CoroutineTextIOcast) AppSessioncreate_app_session)Size) PipeInputcreate_pipe_input) Vt100_OutputPromptToolkitSSHSessionPromptToolkitSSHServercleZdZ d dZd dZd dZd dZddZddZ ddZ ddZ y )rc|_|_d_d_d_d_d_Gfdd}tt|_ y)Nc@eZdZdfd ZddZddZed fd Zy) 0PromptToolkitSSHSession.__init__..Stdoutc j,jj|jddyy#t$rYywxYw)N z )_chanwritereplaceBrokenPipeError)sdataselfs g/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/prompt_toolkit/contrib/ssh/server.pyrz6PromptToolkitSSHSession.__init__..Stdout.write,sFzz- ((dF)CD.&s7< AAcyNTrs risattyz7PromptToolkitSSHSession.__init__..Stdout.isatty3scyNr"r#s rflushz6PromptToolkitSSHSession.__init__..Stdout.flush6sr%cjJtjjjdS)Nr)rstr _orig_chan get_encoding)rrs rencodingz9PromptToolkitSSHSession.__init__..Stdout.encoding9s6zz---4::00==?BCCr%N)rr*returnNoner.boolr.r/)r.r*)__name__ __module__ __qualname__rr$r(propertyr-rsrStdoutr+s(    D Dr%r8) interact enable_cpr interact_taskr app_session_input_outputr rstdout)rr9r:r8s` r__init__z PromptToolkitSSHSession.__init__sX ! $8<!% .2 )- ,0  D D&668, r%c|j tddS|jj\}}}}t||S)zU Callable that returns the current `Size`, required by Vt100_Output. O)rowscolumns)rr get_terminal_sizerwidthheightpixwidth pixheights r _get_sizez!PromptToolkitSSHSession._get_size@sC :: R, ,151M1M1O .E68YVU3 3r%c||_yr')r)rchans rconnection_madez'PromptToolkitSSHSession.connection_madeJs  r%cyr!r"r7s rshell_requestedz'PromptToolkitSSHSession.shell_requestedMsr%c\tj|j|_yr')r create_task _interactr;r7s rsession_startedz'PromptToolkitSSHSession.session_startedPs-/;;DNNrr=r r<r9 BaseException traceback print_excclose)rrXsessions rrTz!PromptToolkitSSHSession._interactSsR :: JK K 4:: /DJJ4F4F4R JJ $ $U +zz++-# KKdt   (DK#$++dllK (w#* (----- JJ$$&KK%%' ( ( (.$*'')*JJ$$&KK%%' ( ( ( (sxB5F<7'F0F$'E;E<E4F$5F0= F<EE(%E+'E((E++6F!!F$$F- )F00F95F<c|jr<|jjr%|jjjyyyr')r<app _on_resizerGs rterminal_size_changedz-PromptToolkitSSHSession.terminal_size_changedos;    0 0 4 4    + + -!5 r%cT|jy|jj|yr')r= send_text)rrdatatypes r data_receivedz%PromptToolkitSSHSession.data_receivedvs! ;;   d#r%Nr9z>Callable[[PromptToolkitSSHSession], Coroutine[Any, Any, None]]r:r1r.r/)r.r )rNrr.r/r0r2) rHintrIrmrJobjectrKrnr.r/)rr*rjrnr.r/) r3r4r5r@rLrOrQrUrTrgrkr"r%rrrsp'-P'- '-  '-R4N(8.."%.17.DJ. .$r%c8eZdZdZdd ddZd dZd dZy) raZ 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. Tr:c ||_||_yr')r9r:)rr9r:s rr@zPromptToolkitSSHServer.__init__s ! $r%cy)NFr")rusernames r begin_authz!PromptToolkitSSHServer.begin_authsr%cDt|j|jS)Nrp)rr9r:r7s rsession_requestedz(PromptToolkitSSHServer.session_requesteds&t}}QQr%Nrl)rsr*r.r1)r.r)r3r4r5__doc__r@rtrvr"r%rrr~s9#R %P% %  %Rr%)rw __future__rasyncior`rtypingrrrrr asyncssh"prompt_toolkit.application.currentr r prompt_toolkit.data_structuresr prompt_toolkit.inputr rprompt_toolkit.output.vt100r__all__SSHServerSessionr SSHServerrr"r%rrsa#$99M/=4 $&> ?e$h77e$P4RX//4Rr%