a
    xd"                     @   s  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	Z	d dl
Z	d dlZd dlZd dlZd dlZddlmZmZ zd dlZ	dZW n ey   d dlZ	d	ZY n0 zd d
lmZ W n" ey   G dd deZY n0 ejd  dkZereZneZdZe  Z!d)ddZ"d*ddZ#dd Z$dd Z%e"g de$d e"g de%d G dd deZ&dd Z'd+dd Z(d,d!d"Z)d#d$ Z*d%d& Z+d'd( Z,dS )-    )defaultdict)	Completer
Completion)InMemoryHistorypromptN   )InternalCommandExceptionExitReplExceptionTF)Exitc                   @   s   e Zd ZdS )	ClickExitN)__name__
__module____qualname__ r   r   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/click_repl/__init__.pyr      s   r      z0.2.0c                 C   sV   t |dstdt| tjr&| g} nt| ttfs<td| D ]}||ft|< q@d S )N__call__z#Internal command must be a callablez*"names" must be a string or a list / tuple)hasattr
ValueError
isinstancesixstring_typeslisttuple_internal_commands)namestargetdescriptionnamer   r   r   _register_internal_command)   s    
r    c                 C   s   t | }|r|d S |S )Nr   )r   get)r   defaulttarget_infor   r   r   _get_registered_target6   s    
r$   c                   C   s
   t  d S N)r
   r   r   r   r   _exit_internal=   s    r&   c                  C   s   t  } | d |   | d | d W d    n1 sD0    Y  | db | d tt}t	t
D ]\}}||d  | qv| dd t	|D  W d    n1 s0    Y  |  S )	Nz	REPL helpzExternal Commandsz!prefix external commands with "!"zInternal Commandsz!prefix internal commands with ":"r   c                 s   s.   | ]&\}}d  dd t|D |fV  qdS )z, c                 s   s   | ]}d  |V  qdS )z:{0}N)format).0mnemonicr   r   r   	<genexpr>N       z+_help_internal.<locals>.<genexpr>.<genexpr>N)joinsorted)r(   r   Z	mnemonicsr   r   r   r*   L   s   z!_help_internal.<locals>.<genexpr>)clickHelpFormatterZwrite_headingindentsection
write_textr   r   r   	iteritemsr   appendZwrite_dlgetvalue)	formatterZ
info_tabler)   r#   r   r   r   _help_internalA   s    
(

&r7   )qquitexitzexits the repl)?hhelpz!displays general help informationc                   @   s   e Zd Zdd ZdddZdS )ClickCompleterc                 C   s
   || _ d S r%   )cli)selfr?   r   r   r   __init__]   s    zClickCompleter.__init__Nc              
   c   s  zt |j}W n ty$   Y d S 0 |j |jk}|rH|rH| }nd}trftj	| j
i d|}ntj| j
d|}|d u rd S g }|jjD ]}t|tjr|j|jfD ].}	|	D ]$}
|tt|
t| |jd qqqt|tjrt|jtjr|jjD ] }|tt|t|  q qt|jtjrz|j|D ]8}|j||}|tt|t| t|dd q@|D ]}|j !|r~|V  q~d S )N )Zdisplay_metaZ
short_help)"shlexsplitZtext_before_cursorr   rstrippopHAS_C8r.   Zshell_completionZ_resolve_contextr?   Z_bashcompleteZresolve_ctxcommandparamsr   OptionoptsZsecondary_optsr4   r   	text_typelenr=   ZArgumenttypeZChoicechoicesZMultiCommandZlist_commandsget_commandgetattrtext
startswith)r@   documentZcomplete_eventargsZcursor_within_command
incompletectxrO   paramoptionsochoicer   rH   itemr   r   r   get_completions`   sR    

 zClickCompleter.get_completions)N)r   r   r   rA   r]   r   r   r   r   r>   \   s   r>   c                 C   s@   | pi } t  t|dd}|D ]}|| }|| vr|| |< q| S )z
    Bootstrap prompt_toolkit kwargs or use user defined values.

    :param prompt_kwargs: The user specified prompt kwargs.
    z> )historyZ	completermessage)r   r>   )prompt_kwargsgroupdefaultskeydefault_valuer   r   r   bootstrap_prompt   s    
re   c              
      s0  | j p| }|j}tj }| jj}t|jtjrDdd |jj	D }n|jj
}||d t | |rt fdd}	ntjj}	z
|	 }
W n, ty   Y q|Y n ty   Y q,Y n0 |
s|rq|nq,|rt|
rq||rz&t|
}t|tjrt| W q|W n ty   Y q,Y n0 zt|
}W nJ tyr } z0tdt|j| W Y d}~q|W Y d}~n
d}~0 0 zH|jd||d"}|| |  W d   n1 s0    Y  W q| tjy } z|   W Y d}~q|d}~0  t!y   Y q| t"y   Y q| ty(   Y q,Y q|0 q|dS )a<  
    Start an interactive shell. All subcommands are available in it.

    :param old_ctx: The current Click context.
    :param prompt_kwargs: Parameters passed to
        :py:func:`prompt_toolkit.shortcuts.prompt`.

    If stdin is not a TTY, no prompt will be printed, but only commands read
    from stdin.

    c                 S   s&   i | ]}|j  D ]\}}||qqS r   )commandsitems)r(   sourcecmd_namecmd_objr   r   r   
<dictcomp>   s   zrepl.<locals>.<dictcomp>Nc                      s   t f i  S r%   r   r   r`   r   r   rP      s    zrepl.<locals>.get_commandz{}: {})parent)#rm   rH   sysstdinisattyr   r   r.   ZCommandCollectionsourcesrf   rF   re   readlineKeyboardInterruptEOFErrordispatch_repl_commandshandle_internal_commandsr   r   Zechor
   rC   rD   r   r'   rN   r   Zmake_contextZinvoker:   ZClickExceptionshowr   
SystemExit)Zold_ctxr`   Zallow_system_commandsZallow_internal_commandsZ	group_ctxra   rp   Zrepl_command_nameZavailable_commandsrP   rH   resultrU   erW   r   rl   r   repl   sf    




"
,r{   c                 C   s   | j |dtt dS )z9Register :func:`repl()` as sub-command *name* of *group*.)r   N)rH   r.   Zpass_contextr{   )ra   r   r   r   r   register_repl  s    r|   c                   C   s
   t   dS )zExit the replN)r&   r   r   r   r   r:     s    r:   c                 C   s$   |  dr t| dd  dS dS )zkExecute system commands entered in the repl.

    System commands are all commands starting with "!".

    !r   NTF)rS   ossystem)rH   r   r   r   ru     s    
ru   c                 C   s,   |  dr(t| dd dd}|r(| S dS )zaRun repl-internal commands.

    Repl-internal commands are all commands starting with ":".

    :r   N)r"   )rS   r$   )rH   r   r   r   r   rv   &  s    
rv   )N)N)NTT)r{   )-collectionsr   Zprompt_toolkit.completionr   r   Zprompt_toolkit.historyr   Zprompt_toolkit.shortcutsr   r.   Zclick.parserr~   rC   rn   r   
exceptionsr	   r
   Zclick.shell_completionrG   ImportErrorZclick._bashcompleteZclick.exceptionsr   r   RuntimeErrorversion_infoPY2unicoderL   str__version__dictr   r    r$   r&   r7   r>   re   r{   r|   r:   ru   rv   r   r   r   r   <module>   sX   



A   
\
