U
    Z+d                     @   s&  d Z ddlZddlZddlmZ ddlZddlmZmZm	Z	 dd Z
dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejedejdddedddejdddedd dejd!dedd"dejd#d$dedd%dejd&dedd'dejd(dedd)deje	d-d+d,ZdS ).z3The ``celery shell`` program, used to start a REPL.    N)import_module)CeleryCommandCeleryOptionhandle_preload_optionsc                 C   s^   dd l }zdd l}W n tk
r(   Y n&X dd l}||| j |d |j| d d S )Nr   ztab:complete)local)	codereadlineImportErrorrlcompleterZset_completerZ	CompleterZcompleteparse_and_bindZinteract)localsr   r   r
    r   4/tmp/pip-unpacked-wheel-ucduq0nd/celery/bin/shell.py_invoke_fallback_shell   s    

r   c                 C   s   dd l }||  d S Nr   )bpythonembed)r   r   r   r   r   _invoke_bpython_shell   s    r   c              	   C   s<   t ttttfD ](}z|| W   S  tk
r4   Y qX qd S )N)_ipython_ipython_pre_10_ipython_terminal_ipython_010_no_ipythonr	   )r   ipr   r   r   _invoke_ipython_shell    s     r   c                 C   s   ddl m} |g | d d S )Nr   )start_ipythonargvuser_ns)IPythonr   )r   r   r   r   r   r   *   s    r   c                 C   s:   ddl m} | }|jg d |jj|  |  d S )Nr   )TerminalIPythonApp)r   )ZIPython.frontend.terminal.ipappr    instanceZ
initializeshellr   updatestart)r   r    appr   r   r   r   /   s
    r   c                 C   s    ddl m} |j| d  d S )Nr   )r   )r   )ZIPython.terminalr   ZTerminalInteractiveShellmainloop)r   r   r   r   r   r   7   s    r   c                 C   s    ddl m} |g | d  d S )Nr   )IPShellr   )ZIPython.Shellr'   r&   )r   r'   r   r   r   r   <   s    r   c                 C   s   t dd S )Nzno suitable ipython found)r	   )selfr   r   r   r   A   s    r   c                 C   s`   zdd l }W nF tk
rR   zdd l}W n tk
rD   t|  Y n
X t|  Y n
X t|  d S r   )r   r	   r   r   r   r   )r   r   r   r   r   r   _invoke_default_shellE   s    r)   )clsz-Iz	--ipythonTzShell OptionszForce IPython.)Zis_flagr*   Z
help_grouphelpz-Bz	--bpythonzForce bpython.z--pythonzForce default Python shell.z-Tz--without-taskszDon't add tasks to locals.z
--eventletzUse eventlet.z--geventzUse gevent.Fc                 C   s:  t jdt  |rtd |r*td ddl}| jj}|j	
  |||j|j|j|j|j|j|j|j|jd}	|s|	dd |j D  |rt|	 n|rzt|	 W n* tk
r   | j| jj d Y nX nR|r.zt|	 W n> tk
r, }
 z| j| jj d	|
  W 5 d}
~
X Y nX t|	 dS )
a.  Start shell session with convenient access to celery symbols.

    The following symbols will be added to the main globals:
    - ``celery``:  the current application.
    - ``chord``, ``group``, ``chain``, ``chunks``,
      ``xmap``, ``xstarmap`` ``subtask``, ``Task``
    - all registered tasks.
    r   zcelery.concurrency.eventletzcelery.concurrency.geventN)r%   celeryTaskchordgroupchainchunksxmapxstarmapsubtask	signaturec                 S   s    i | ]}|j d s|j|qS )zcelery.)name
startswith__name__).0Ztaskr   r   r   
<dictcomp>   s    zshell.<locals>.<dictcomp>z: bpython is not installedz: )syspathinsertosgetcwdr   r,   objr%   loaderZimport_default_modulesr-   r.   r/   r0   r1   r2   r3   r4   r5   r#   Ztasksvaluesr   r   r	   ZechoERRORr   r)   )ctxZipythonr   pythonZwithout_tasksZeventletZgeventr,   r%   r   er   r   r   r"   S   sJ    /


,r"   )FFFFFF)__doc__r>   r;   	importlibr   ZclickZcelery.bin.baser   r   r   r   r   r   r   r   r   r   r   r)   commandoptionZpass_contextr"   r   r   r   r   <module>   s|   

       