B
    \(                 @   s  d dl m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
mZmZ d dlmZmZmZmZmZ ddlmZ ddlmZ ye W n ek
r   eZY nX 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 )    )print_functionN)Application)
JupyterApp
base_flagsbase_aliases)InstanceDictUnicodeBoolList   )__version__)KernelSpecManagerc               @   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   ;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>2   s    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_key4   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   pathsZspecsZname_lenr&   Z
kernelnamer#   r   )r   r   start*   s    

	zListKernelSpecs.startN)__name__
__module____qualname__r   versiondescriptionr   r   r)   r
   r   r   flagsr   r1   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 )InstallKernelSpecaA  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   )r>   r?   z
sys-prefixr   c                s:   t t| | | jr$| jd | _ntd | d d S )Nr   zNo source directory specified.r   )superr8   parse_command_line
extra_argsr<   r+   exit)r   argv)	__class__r   r   rA   ~   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_namer>   r%   r?   )filez4Perhaps you want to install with `sudo` or `--user`?r   z&A kernel spec is already present at %s)r>   r%   rC   r)   Zinstall_kernel_specr<   rF   r?   OSErrorerrnoEACCESr+   sysstderrZEEXISTfilename)r   er   r   r   r1      s$    


zInstallKernelSpec.start)r2   r3   r4   r   r5   r6   examplesZusager   r   r)   r   r	   r<   rF   r=   r
   r>   r%   r?   aliasesupdater   rK   r   r7   rA   r1   __classcell__r   r   )rE   r   r8   G   s8   


	r8   c                   s~   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d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forcer   c                s6   t t| | | jr(tt| j| _n
| d d S )NzNo kernelspec specified.)r@   rS   rA   rB   r,   set
spec_namesrC   )r   rD   )rE   r   r   rA      s    z#RemoveKernelSpec.parse_command_linec             C   s(  d| j _| j  }t| jt|}|r>| dd|  | jst	d x(| jD ]}t	d|
d|| f  qTW tdt| j }| dsd S x| jD ]~}y| j |}W nZ tk
r } z:|jtjkrt	|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)rG   zPerhaps you want sudo?r   z
Removed %s)r)   Zensure_native_kernelr*   rV   rW   
differencerC   joinrU   r+   r.   	raw_inputr   lowerr!   Zremove_kernel_specrH   rI   rJ   rK   rL   loginfo)r   Z
spec_pathsZmissingr   ZanswerrF   r#   rN   r   r   r   r1      s,    
zRemoveKernelSpec.start)r2   r3   r4   r   r5   r6   rO   r
   rU   r   r	   rW   r   r   r)   r   Zget_metadatar7   rQ   r   rA   r1   rR   r   r   )rE   r   rS      s   
rS   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   r>   z'Install to the per-user kernel registryr   )r>   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.)rG   r   )r>   z4Perhaps you want to install with `sudo` or `--user`?)r^   ZwarningZ	ipykernelra   ImportErrorr+   rK   rL   rC   installr)   r>   rH   rI   rJ   )r   ra   rN   r   r   r   r1      s    
zInstallNativeKernelSpec.startN)r2   r3   r4   r   r5   r6   r   r   r)   r   r
   r>   r   r7   r1   r   r   r   r   r`      s   
r`   c               @   sx   e Zd Z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dZi Zi Zdd ZdS )	KernelSpecAppzjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)listrc   Z	uninstallremovezinstall-selfc             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+   re   subcommandsZprint_descriptionZprint_subcommandsrC   r1   )r   r   r   r   r1   	  s    
zKernelSpecApp.startN)r2   r3   r4   r   r5   r   r6   r   r   
splitlinesr8   rS   r`   rg   rP   r7   r1   r   r   r   r   rd      s   rd   __main__)!Z
__future__r   rI   os.pathr:   rK   r   Ztraitlets.config.applicationr   Zjupyter_core.applicationr   r   r   Z	traitletsr   r   r	   r
   r   r9   r   ra   r   r\   	NameErrorinputr   r8   rS   r`   rd   r2   Zlaunch_instancer   r   r   r   <module>   s(   
,U7&
