U
    .e                     @   s   d dl mZ d dlZd dl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mZ dd	lmZ d
ddgZddd
Zi ddfddZdddZdS )    )with_statementN)PromptSession)InMemoryHistory   )ClickCompleter)	ClickExit)CommandLineParserErrorExitReplExceptionInvalidGroupFormat)_execute_internal_and_sys_cmdsbootstrap_promptregister_replreplc                 C   s$   t  t| |ddd}|| |S )z
    Bootstrap prompt_toolkit kwargs or use user defined values.

    :param group: click Group
    :param prompt_kwargs: The user specified prompt kwargs.
    )ctxz> )historyZ	completermessage)r   r   update)groupprompt_kwargsr   defaults r   4/tmp/pip-unpacked-wheel-rnw4k0lb/click_repl/_repl.pyr      s    

Tc              
      s<  | }| j dk	r"t| jtjs"| j }|j}|jD ]J}t|tjr.|j|j dkr.|js.t	t
|j d|j d|j dq.tj }| jj}t|jtjrdd |jjD }	n|jj}	|	|d}
|rt|||}tf |  fdd}ntjj}z
| }W n4 tk
r   Y qY n tk
r0   Y q&Y nX |sF|r&qnq&zt|||}|dkrbW qW n4 tk
r~   Y qY n tk
r   Y q&Y nX z(|j}z||_|| W 5 ||_X W q tjk
r } z|  W 5 d}~X Y q tt fk
r   Y q tk
r"   Y q&Y qX q|
dk	r8|
|	|< dS )	a8  
    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.PromptSession`.

    If stdin is not a TTY, no prompt will be printed, but only commands read
    from stdin.
    Nz 'z+' requires value for an optional argument 'z' in REPL modec                 S   s&   i | ]}|j  D ]\}}||qqS r   )commandsitems).0sourcecmd_namecmd_objr   r   r   
<dictcomp>S   s
     zrepl.<locals>.<dictcomp>c                      s      S )N)promptr   sessionr   r   get_commanda   s    zrepl.<locals>.get_command)!parent
isinstancecommandclickGroupparamsZArgumentnamerequiredr
   type__name__sysstdinisattyZCommandCollectionsourcesr   popr   r   readlineKeyboardInterruptEOFErrorr   r   r	   Zprotected_argsZinvokeZClickExceptionshowr   
SystemExit)Zold_ctxr   Zallow_system_commandsZallow_internal_commandsZ	group_ctxr   paramr/   Zrepl_command_nameZavailable_commandsZoriginal_commandr"   r%   argsZold_protected_argser   r    r   r   '   s~    




  

c                 C   s   | j |dtt dS )z9Register :func:`repl()` as sub-command *name* of *group*.)r)   N)r%   r&   Zpass_contextr   )r   r)   r   r   r   r      s    )N)r   )
__future__r   r&   r-   Zprompt_toolkitr   Zprompt_toolkit.historyr   Z
_completerr   
exceptionsr   r   r	   r
   utilsr   __all__r   r   r   r   r   r   r   <module>   s    
 
  
o