o
    Df/#                     @  s  d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlm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l"m#Z#m$Z$ d dl%m&Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 g dZ6					dVdWd#d$Z7e	d%Z8ddg dfdXd)d*Z9			+	,			-		dYdZd8d9Z:			:	d[d\d<d=Z;			:	,			d]d^dAdBZ<			:	,			d]d_dFdGZ=dddHdI dfd`dLdMZ>dadQdRZ?dbdTdUZ@dS )c    )annotationsN)get_running_loop)AnyCallableSequenceTypeVar)Application)get_app)Buffer)	Completerrun_in_executor_with_context)FilterOrBool)AnyFormattedText)
focus_nextfocus_previous)load_key_bindings)KeyBindingsmerge_key_bindings)Layout)AnyContainerHSplit)	Dimension)	BaseStyle)	Validator)	BoxButtonCheckboxListDialogLabelProgressBar	RadioListTextAreaValidationToolbar)yes_no_dialogbutton_dialoginput_dialogmessage_dialogradiolist_dialogcheckboxlist_dialogprogress_dialog YesNotitler   textyes_textstrno_textstyleBaseStyle | NonereturnApplication[bool]c                 C  sJ   ddd}ddd}t | t|ddt||d	t||d	gdd
}t||S )z8
    Display a Yes/No dialog.
    Return a boolean.
    r5   Nonec                   S     t  jdd d S )NTresultr	   exit r=   r=   Y/home/ubuntu/webapp/venv/lib/python3.10/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handler9      z"yes_no_dialog.<locals>.yes_handlerc                   S  r8   )NFr9   r;   r=   r=   r=   r>   
no_handler<   r@   z!yes_no_dialog.<locals>.no_handlerTr/   dont_extend_heightr/   handlerr.   bodybuttonswith_backgroundNr5   r7   )r   r   r   _create_app)r.   r/   r0   r2   r3   r?   rA   dialogr=   r=   r>   r$   -   s   






r$   _TrH   list[tuple[str, _T]]Application[_T]c                   s:   ddd t | t|dd fd	d
|D dd}t||S )zx
    Display a dialog with button choices (given as a list of tuples).
    Return the value associated with button.
    vrM   r5   r7   c                 S  s   t  j| d d S Nr9   r;   )rP   r=   r=   r>   button_handlerZ   r@   z%button_dialog.<locals>.button_handlerTrB   c                   s$   g | ]\}}t |t |d qS )rD   )r   	functoolspartial).0trP   rR   r=   r>   
<listcomp>`   s    z!button_dialog.<locals>.<listcomp>rF   N)rP   rM   r5   r7   )r   r   rK   )r.   r/   rH   r3   rL   r=   rW   r>   r%   O   s   




r%   OKCancelFok_textcancel_text	completerCompleter | None	validatorValidator | Nonepasswordr   defaultApplication[str]c	                   s   d fdd}	dfdd	}
t ||
d
 t |td
}t|d||||	dt| tt|ddt gtdddd |gdd}t||S )zV
    Display a text input box.
    Return the given text, or None when cancelled.
    bufr
   r5   boolc                   s   t  j  dS )NT)r	   layoutfocus)rd   )	ok_buttonr=   r>   acceptz   s   zinput_dialog.<locals>.acceptr7   c                        t  j jd d S rQ   )r	   r<   r/   r=   )	textfieldr=   r>   
ok_handler~      z input_dialog.<locals>.ok_handlerrD   F)r/   	multilinera   r]   r_   accept_handlerTrB      )	preferredmaxpaddingrF   N)rd   r
   r5   re   rJ   )	r   _return_noner"   r   r   r   r#   DrK   )r.   r/   r[   r\   r]   r_   ra   r3   rb   ri   rl   cancel_buttonrL   r=   )rh   rk   r>   r&   j   s2   	


r&   OkApplication[None]c                 C  s,   t | t|ddt|tdgdd}t||S )zM
    Display a simple message box and wait until the user presses enter.
    TrB   rD   rF   )r   r   r   ru   rK   )r.   r/   r[   r3   rL   r=   r=   r>   r'      s   	

r'   values,Sequence[tuple[_T, AnyFormattedText]] | None	_T | Nonec           	        h   |du rg }d fdd}t ||d t| tt|dd gd	d
t||dt|tdgdd}t||S )z
    Display a simple list of element the user can choose amongst.

    Only one element can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr5   r7   c                     rj   rQ   )r	   r<   current_valuer=   
radio_listr=   r>   rl      rm   z$radiolist_dialog.<locals>.ok_handler)rz   rb   TrB   rp   rs   rD   rF   rJ   )r!   r   r   r   r   ru   rK   )	r.   r/   r[   r\   rz   rb   r3   rl   rL   r=   r   r>   r(          


r(   default_valuesSequence[_T] | NoneApplication[list[_T]]c           	        r}   )z
    Display a simple list of element the user can choose multiple values amongst.

    Several elements can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr5   r7   c                     rj   rQ   )r	   r<   current_valuesr=   cb_listr=   r>   rl      rm   z'checkboxlist_dialog.<locals>.ok_handler)rz   r   TrB   rp   rs   rD   rF   rJ   )r   r   r   r   r   ru   rK   )	r.   r/   r[   r\   rz   r   r3   rl   rL   r=   r   r>   r)      r   r)   c                  G  s   d S Nr=   )ar=   r=   r>   <lambda>  s    r   run_callback>Callable[[Callable[[int], None], Callable[[str], None]], None]c                   s   t  t tdtdddtttt|dttddg| dd	}t	|| d fddd fddd fdddfdd} j
|  S )zz
    :param run_callback: A function that receives as input a `set_percentage`
        function and it does the work.
    Fl    d(	 )rq   )	focusableheightr/   rp   rs   T)rG   r.   rI   valueintr5   r7   c                   s   t | _   d S r   )r   
percentage
invalidate)r   )appprogressbarr=   r>   set_percentage!  s   
z'progress_dialog.<locals>.set_percentager/   r1   c                   s    jj|     d S r   )call_soon_threadsafebufferinsert_textr   r   )r   loop	text_arear=   r>   log_text%  s   z!progress_dialog.<locals>.log_textc                     s$   z W     d S     w r   )r<   r=   )r   r   r   r   r=   r>   start+  s   zprogress_dialog.<locals>.startc                     s   t   d S r   r   r=   )r   r=   r>   pre_run1  s   z progress_dialog.<locals>.pre_runN)r   r   r5   r7   )r/   r1   r5   r7   rJ   )r   r    r"   rv   r   r   r   r   exactrK   pre_run_callablesappend)r.   r/   r   r3   rL   r   r=   )r   r   r   r   r   r   r   r   r>   r*      s.   
r*   rL   r   Application[Any]c                 C  sB   t  }|dt |dt tt| tt |gd|ddS )Ntabzs-tabT)rf   key_bindingsmouse_supportr3   full_screen)r   addr   r   r   r   r   r   )rL   r3   bindingsr=   r=   r>   rK   9  s   rK   r7   c                   C  s   t    dS )z!Button handler that returns None.Nr;   r=   r=   r=   r>   ru   H  s   ru   )r+   r+   r,   r-   N)r.   r   r/   r   r0   r1   r2   r1   r3   r4   r5   r6   )
r.   r   r/   r   rH   rN   r3   r4   r5   rO   )	r+   r+   rY   rZ   NNFNr+   )r.   r   r/   r   r[   r1   r\   r1   r]   r^   r_   r`   ra   r   r3   r4   rb   r1   r5   rc   )r+   r+   rx   N)
r.   r   r/   r   r[   r1   r3   r4   r5   ry   )r+   r+   rx   rZ   NNN)r.   r   r/   r   r[   r1   r\   r1   rz   r{   rb   r|   r3   r4   r5   rO   )r.   r   r/   r   r[   r1   r\   r1   rz   r{   r   r   r3   r4   r5   r   )
r.   r   r/   r   r   r   r3   r4   r5   ry   )rL   r   r3   r4   r5   r   rJ   )A
__future__r   rS   asyncior   typingr   r   r   r   prompt_toolkit.applicationr   "prompt_toolkit.application.currentr	   prompt_toolkit.bufferr
   prompt_toolkit.completionr   prompt_toolkit.eventloopr   prompt_toolkit.filtersr   prompt_toolkit.formatted_textr   )prompt_toolkit.key_binding.bindings.focusr   r   #prompt_toolkit.key_binding.defaultsr   'prompt_toolkit.key_binding.key_bindingsr   r   prompt_toolkit.layoutr    prompt_toolkit.layout.containersr   r   prompt_toolkit.layout.dimensionr   rv   prompt_toolkit.stylesr   prompt_toolkit.validationr   prompt_toolkit.widgetsr   r   r   r   r   r    r!   r"   r#   __all__r$   rM   r%   r&   r'   r(   r)   r*   rK   ru   r=   r=   r=   r>   <module>   s    ,5((
: