B
    2d,                 @   s.  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 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 ddlmZ ddlmZ ddlmZ G dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd deZedkr*e   dS )    N)base_aliases)
base_flags)
JupyterApp)Bool)Dict)Instance)List)Unicode)Application   )__version__)KernelSpecManager)KernelProvisionerFactoryc               @   sT   e Zd ZeZdZeeZe	ddddZ
d ddiidfed dZd	d
 Zdd ZdS )ListKernelSpecsz%List installed kernel specifications.Fz7output spec name and location as machine-readable json.T)helpconfigjson_outputdebug)jsonr   c             C   s   t | | jdS )N)parentdata_dir)r   r   )self r   i/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/jupyter_client/kernelspecapp.py_kernel_spec_manager_default*   s    z,ListKernelSpecs._kernel_spec_manager_defaultc                s    j  } j  } js|s*td d S tt|dd dd } fdd}td xJt| |dD ]\}}td	|||f  qhW ntt	j
d
|idd d S )NzNo kernels availablec             S   s   t | S )N)len)namer   r   r   <lambda>5       z'ListKernelSpecs.start.<locals>.<lambda>)keyc                s:   | d }x(t  jD ]\}}||r||fS qW d|fS )z+sort key function for Jupyter path priorityr   r    )	enumerateZjupyter_path
startswith)itempathidxprefix)r   r   r   path_key7   s
    
z'ListKernelSpecs.start.<locals>.path_keyzAvailable kernels:z
  %s    %sZkernelspecs   )indent)kernel_spec_managerfind_kernel_specsZget_all_specsr   printr   sorteditemsljustr   dumps)r   pathsspecsname_lenr'   Z
kernelnamer$   r   )r   r   start-   s    

	zListKernelSpecs.startN)__name__
__module____qualname__r   versiondescriptionr   r   r*   r   r   r   flagsr   r4   r   r   r   r   r      s   
r   c                   s   e Zd ZeZdZdZdZee	Z
dd Ze Zedddd	Zd
d Zedddd	Zedddd	Zedddd	ZdddZee d ddiidfd ddiidfd dejiidfed dZ fddZdd Z  ZS )InstallKernelSpeca=  Install a kernel specification directory.

    Given a SOURCE DIRECTORY containing a kernel spec,
    jupyter will copy that directory into one of the Jupyter kernel directories.
    The default is to install kernelspecs for all users.
    `--user` can be specified to install a kernel only for the current user.
    z>
    jupyter kernelspec install /path/to/my_kernel --user
    z1jupyter kernelspec install SOURCE_DIR [--options]c             C   s   t | jdS )N)r   )r   r   )r   r   r   r   r   V   s    z.InstallKernelSpec._kernel_spec_manager_default Tz&Install the kernel spec with this name)r   r   c             C   s   t j| jS )N)osr$   basename	sourcedir)r   r   r   r   _kernel_name_default\   s    z&InstallKernelSpec._kernel_name_defaultFz
        Try to install the kernel spec to the per-user directory instead of
        the system or environment directory.
        zSpecify a prefix to install to, e.g. an env.
        The kernelspec will be installed in PREFIX/share/jupyter/kernels/
        z0Replace any existing kernel spec with this name.zInstallKernelSpec.kernel_namezInstallKernelSpec.prefix)r   r&   userz'Install to the per-user kernel registryreplacer&   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )rA   rB   z
sys-prefixr   c                s6   t  | | jr | jd | _ntd | d d S )Nr   zNo source directory specified.r   )superparse_command_line
extra_argsr?   r,   exit)r   argv)	__class__r   r   rD      s
    z$InstallKernelSpec.parse_command_linec          
   C   s   | j r| jr| d y$| jj| j| j| j | j| jd W n tk
r } zj|j	t	j
krt|tjd | j sztdtjd | d n*|j	t	jkrtd|j tjd | d  W d d }~X Y nX d S )NzCCan't specify both user and prefix. Please choose one or the other.)kernel_namerA   r&   rB   )filez4Perhaps you want to install with `sudo` or `--user`?r   z&A kernel spec is already present at %s)rA   r&   rF   r*   Zinstall_kernel_specr?   rI   rB   OSErrorerrnoEACCESr,   sysstderrEEXISTfilename)r   er   r   r   r4      s.    



zInstallKernelSpec.start)r5   r6   r7   r   r8   r9   examplesusager   r   r*   r   r	   r?   rI   r@   r   rA   r&   rB   aliasesupdater   rN   r   r:   rD   r4   __classcell__r   r   )rH   r   r;   G   s<   


	r;   c                   sz   e Zd ZeZdZdZeddddZe	e
 ZeeZdd Zd	d d
diiejfiZeej  fddZdd Z  ZS )RemoveKernelSpecz/Remove one or more Jupyter kernelspecs by name.z1jupyter kernelspec remove python2 [my_kernel ...]FTz-Force removal, don't prompt for confirmation.)r   r   c             C   s   t | j| dS )N)r   r   )r   r   )r   r   r   r   r      s    z-RemoveKernelSpec._kernel_spec_manager_defaultfforcec                s2   t  | | jr$tt| j| _n
| d d S )NzNo kernelspec specified.)rC   rD   rE   r-   set
spec_namesrF   )r   rG   )rH   r   r   rD      s    z#RemoveKernelSpec.parse_command_linec             C   s0  d| j _| j  }t| jt|}|r>| dd|  | js| j	st
d x(| jD ]}t
d|d|| f  qZW tdt| j }| dsd S x| jD ]}y| j |}W n\ tk
r } z<|jtjkrt
|tjd	 t
d
tjd	 | d n W d d }~X Y nX | jd| qW d S )NFz Couldn't find kernel spec(s): %sz, zKernel specs to remove:z  %s	%s   zRemove %i kernel specs [y/N]: y)rJ   zPerhaps you want sudo?r   z
Removed %s)r*   Zensure_native_kernelr+   r[   r\   
differencerF   joinrZ   Z
answer_yesr,   r/   inputr   lowerr"   Zremove_kernel_specrK   rL   rM   rN   rO   loginfo)r   Z
spec_pathsmissingr   ZanswerrI   r$   rR   r   r   r   r4      s,    
zRemoveKernelSpec.start)r5   r6   r7   r   r8   r9   rS   r   rZ   r   r	   r\   r   r   r*   r   r   r:   rV   r   rD   r4   rW   r   r   )rH   r   rX      s   
rX   c               @   sT   e Zd ZeZdZeeZdd Z	e
ddddZd ddiid	fed
 dZdd ZdS )InstallNativeKernelSpeczG[DEPRECATED] Install the IPython kernel spec directory for this Python.c             C   s   t | jdS )N)r   )r   r   )r   r   r   r   r      s    z4InstallNativeKernelSpec._kernel_spec_manager_defaultFTz
        Try to install the kernel spec to the per-user directory instead of
        the system or environment directory.
        )r   r   rA   z'Install to the per-user kernel registryr   )rA   r   c          
   C   s   | j d yddlm} W n, tk
rH   tdtjd | d Y nX y|j	| j
| jd W nd tk
r } zF|jtjkrt|tjd | jstdtjd | d | | W d d }~X Y nX d S )	Nz`jupyter kernelspec install-self` is DEPRECATED as of 4.0. You probably want `ipython kernel install` to install the IPython kernelspec.r   )
kernelspecz0ipykernel not available, can't install its spec.)rJ   r   )rA   z4Perhaps you want to install with `sudo` or `--user`?)rc   warningZ	ipykernelrg   ImportErrorr,   rN   rO   rF   installr*   rA   rK   rL   rM   )r   rg   rR   r   r   r   r4      s$    

zInstallNativeKernelSpec.startN)r5   r6   r7   r   r8   r9   r   r   r*   r   r   rA   r   r:   r4   r   r   r   r   rf      s   
rf   c               @   s   e Zd ZeZdZdd ZdS )ListProvisionersz=List available provisioners for use in kernel specifications.c             C   sh   t j| d}td | }tt|dd dd }x.t|D ]"}td|| d||   q>W d S )	N)r   zAvailable kernel provisioners:c             S   s   t | S )N)r   )r   r   r   r   r     r   z(ListProvisioners.start.<locals>.<lambda>)r   r    z  z    )r   instancer,   Zget_provisioner_entriesr   r-   r/   )r   Zkfpprovisionersr3   r   r   r   r   r4     s    zListProvisioners.startN)r5   r6   r7   r   r8   r9   r4   r   r   r   r   rk     s   rk   c            	   @   s   e Zd ZU eZdZdZeeej	 d fe
e
j	 d fedfeej	 d feej	 d feej	 d fdZi Zejeef ed< i Zejeef ed< dd	 Zd
S )KernelSpecAppzjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)listrj   	uninstallremovezinstall-selfrm   rU   r:   c             C   sL   | j d kr>tdt| j  t  |   |   | d n
| j  S d S )Nz0No subcommand specified. Must specify one of: %sr   )Zsubappr,   ro   subcommandsZprint_descriptionZprint_subcommandsrF   r4   )r   r   r   r   r4   <  s    
zKernelSpecApp.startN)r5   r6   r7   r   r8   r   r9   r   r   
splitlinesr;   rX   rf   rk   rr   rU   tstrobject__annotations__r:   r4   r   r   r   r   rn   #  s   
rn   __main__)!rL   r   os.pathr=   rN   typingrt   Zjupyter_core.applicationr   r   r   Z	traitletsr   r   r   r   r	   Ztraitlets.config.applicationr
   r<   r   rg   r   Zprovisioning.factoryr   r   r;   rX   rf   rk   rn   r5   Zlaunch_instancer   r   r   r   <module>   s0   /e61$
