
     h-                    .   U d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ erd dlmZ d dlmZ dd	lmZ g d
Z G d d          Z ed e                      Zded<   d dZd!dZd"dZed#d            Ze	 d$d%d            Zed&d            ZdS )'    )annotationsN)contextmanager)
ContextVar)TYPE_CHECKINGAny	GeneratorOptional)Input)Output   )Application)
AppSessionget_app_sessionget_appget_app_or_noneset_appcreate_app_sessioncreate_app_session_from_ttyc                  V    e Zd ZdZ	 ddd	ZddZedd            Zedd            ZdS )r   aZ  
    An AppSession is an interactive session, usually connected to one terminal.
    Within one such session, interaction with many applications can happen, one
    after the other.

    The input/output device is not supposed to change during one session.

    Warning: Always use the `create_app_session` function to create an
    instance, so that it gets activated correctly.

    :param input: Use this as a default input for all applications
        running in this session, unless an input is passed to the `Application`
        explicitely.
    :param output: Use this as a default output.
    NinputInput | NoneoutputOutput | NonereturnNonec                0    || _         || _        d | _        d S N)_input_outputapp)selfr   r   s      ^/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/prompt_toolkit/application/current.py__init__zAppSession.__init__*   s      -1    strc                    d| j         dS )NzAppSession(app=))r    )r!   s    r"   __repr__zAppSession.__repr__4   s    .....r$   r
   c                H    | j         ddlm}  |            | _         | j         S )Nr   create_input)r   prompt_toolkit.input.defaultsr+   )r!   r+   s     r"   r   zAppSession.input7   s1    ;BBBBBB&,..DK{r$   r   c                H    | j         ddlm}  |            | _         | j         S )Nr   create_output)r   prompt_toolkit.output.defaultsr/   )r!   r/   s     r"   r   zAppSession.output?   s1    <DDDDDD(=??DL|r$   NN)r   r   r   r   r   r   )r   r%   )r   r
   )r   r   )	__name__
__module____qualname____doc__r#   r(   propertyr   r    r$   r"   r   r      s         " CG1 1 1 1 1/ / / /    X    X  r$   r   _current_app_session)defaultzContextVar[AppSession]r   c                 4    t                                           S r   )r8   getr7   r$   r"   r   r   M   s    ##%%%r$   Application[Any]c                 p    t                                           } | j        | j        S ddlm}  |            S )a'  
    Get the current active (running) Application.
    An :class:`.Application` is active during the
    :meth:`.Application.run_async` call.

    We assume that there can only be one :class:`.Application` active at the
    same time. There is only one terminal window, with only one stdin and
    stdout. This makes the code significantly easier than passing around the
    :class:`.Application` everywhere.

    If no :class:`.Application` is running, then return by default a
    :class:`.DummyApplication`. For practical reasons, we prefer to not raise
    an exception. This way, we don't have to check all over the place whether
    an actual `Application` was returned.

    (For applications like pymux where we can have more than one `Application`,
    we'll use a work-around to handle that.)
    Nr   )DummyApplication)r8   r;   r    dummyr>   )sessionr>   s     r"   r   r   Q   sF    & #&&((G{{''''''r$   Application[Any] | Nonec                 B    t                                           } | j        S )zj
    Get the current active (running) Application, or return `None` if no
    application is running.
    r8   r;   r    )r@   s    r"   r   r   m   s    
 #&&((G;r$   r    Generator[None, None, None]c              #     K   t                                           }|j        }| |_        	 dV  ||_        dS # ||_        w xY w)a  
    Context manager that sets the given :class:`.Application` active in an
    `AppSession`.

    This should only be called by the `Application` itself.
    The application will automatically be active while its running. If you want
    the application to be active in other threads/coroutines, where that's not
    the case, use `contextvars.copy_context()`, or use `Application.context` to
    run it in the appropriate context.
    NrC   )r    r@   previous_apps      r"   r   r   v   sS       #&&((G;LGK#"l""""s	   8 	Ar   r   r   r   !Generator[AppSession, None, None]c              #  n  K   t           j        dk    rt          d          | t                      j        } |t                      j        }t          | |          }t                              |          }	 |V  t          	                    |           dS # t          	                    |           w xY w)z
    Create a separate AppSession.

    This is useful if there can be multiple individual `AppSession`s going on.
    Like in the case of an Telnet/SSH server. This functionality uses
    contextvars and requires at least Python 3.7.
    )      z(Application sessions require Python 3.7.Nr   r   )
sysversion_infoRuntimeErrorr   r   r   r   r8   setreset)r   r   r@   tokens       r"   r   r      s       6!!EFFF }!!'~ "") uV444G $$W--E*""5)))))""5))))s   8B B4c               #     K   ddl m}  ddlm}  | d          } |d          }t	          ||          5 }|V  ddd           dS # 1 swxY w Y   dS )a  
    Create `AppSession` that always prefers the TTY input/output.

    Even if `sys.stdin` and `sys.stdout` are connected to input/output pipes,
    this will still use the terminal for interaction (because `sys.stderr` is
    still connected to the terminal).

    Usage::

        from prompt_toolkit.shortcuts import prompt

        with create_app_session_from_tty():
            prompt('>')
    r   r*   r.   T)always_prefer_ttyrK   N)r,   r+   r0   r/   r   )r+   r/   r   r   app_sessions        r"   r   r      s        ;:::::<<<<<<L4000E]T222F	%	7	7	7 ;                 s   A

AA)r   r   )r   r<   )r   rA   )r    r<   r   rD   r1   )r   r   r   r   r   rG   )r   rG   )
__future__r   rL   
contextlibr   contextvarsr   typingr   r   r   r	   prompt_toolkit.input.baser
   prompt_toolkit.output.baser   applicationr   __all__r   r8   __annotations__r   r   r   r   r   r   r7   r$   r"   <module>r^      s   " " " " " " " 



 % % % % % % " " " " " " : : : : : : : : : : : : )//////111111((((((  , , , , , , , ,^ 0:zJJLL0 0 0     
& & & &   8    # # # #* 8<* * * * *<      r$   