
    Ne,                     l   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e
      Z G d de
      Z G d de
      Z G d de
      Z G d de
      Z G d de      Zedk(  rejA                          yy)    N)base_aliases)
base_flags)
JupyterApp)Bool)Dict)Instance)List)Unicode)Application   )__version__)KernelSpecManager)KernelProvisionerFactoryc                   b    e Zd ZeZdZ ee      Z e	ddd      Z
d ddiidfed   dZd	 Zd
 Zy)ListKernelSpecsz%List installed kernel specifications.Fz7output spec name and location as machine-readable json.T)helpconfigjson_outputdebug)jsonr   c                 0    t        | | j                        S )N)parentdata_dirr   r   selfs    >/usr/lib/python3/dist-packages/jupyter_client/kernelspecapp.py_kernel_spec_manager_defaultz,ListKernelSpecs._kernel_spec_manager_default*   s     t}}EE    c                      j                   j                         } j                   j                         } j                  s||st	        d       y t        t        |d       d         } fd}t	        d       t        |j                         |      D ]%  \  }}t	        d|j                  |      d|       ' y t	        t        j                  d	|id
             y )NzNo kernels availablec                     t        |       S Nlennames    r   <lambda>z'ListKernelSpecs.start.<locals>.<lambda>5   s
    #d) r   keyc                 ~    | d   }t        j                        D ]  \  }}|j                  |      s||fc S  d|fS )z+sort key function for Jupyter path priorityr   r*   )	enumeratejupyter_path
startswith)itempathidxprefixr   s       r   path_keyz'ListKernelSpecs.start.<locals>.path_key7   sL    Aw#,T->->#? +KCv. #T{*+ Dz!r   zAvailable kernels:      kernelspecs   )indent)kernel_spec_managerfind_kernel_specsget_all_specsr   printr$   sorteditemsljustr   dumps)r   pathsspecsname_lenr3   
kernelnamer0   s   `      r   startzListKernelSpecs.start-   s    ((::<((668,-6%-CDRHIH" &'$*5;;=h$G I 
Dj&6&6x&@$GHI $**mU3A>?r   N)__name__
__module____qualname__r   versiondescriptionr   r   r9   r   r   r   flagsr   rE    r   r   r   r      s_    G=K"#45FK  56E
 G$EF@r   r   c                   .    e Zd ZeZdZdZdZ ee	      Z
d Z e       Z eddd      Zd	 Z ed
dd      Z eddd      Z ed
dd      ZdddZej+                  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Zd Z x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                 .    t        | j                        S N)r   r   r   s    r   r   z.InstallKernelSpec._kernel_spec_manager_defaultV        $--88r    Tz&Install the kernel spec with this namer   r   c                 T    t         j                  j                  | j                        S r"   )osr0   basename	sourcedirr   s    r   _kernel_name_defaultz&InstallKernelSpec._kernel_name_default\   s    ww//r   F
        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&   r2   user'Install to the per-user kernel registryreplacer2   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )rZ   r\   z
sys-prefixr   c                     t         |   |       | j                  r| j                  d   | _        y t	        d       | j                  d       y )Nr   zNo source directory specified.r   )superparse_command_line
extra_argsrW   r<   exitr   argv	__class__s     r   r_   z$InstallKernelSpec.parse_command_line   s;    "4(??!__Q/DN23IIaLr   c                    | j                   r| j                  r| j                  d       	 | j                  j	                  | j
                  | j                  | j                   | j                  | j                         y # t        $ r}|j                  t        j                  k(  rTt        |t        j                         | j                   st        dt        j                         | j                  d        |j                  t        j                  k(  r9t        d|j                  z  t        j                         | j                  d        d }~ww xY w)NzCCan't specify both user and prefix. Please choose one or the other.)kernel_namerZ   r2   r\   file4Perhaps you want to install with `sudo` or `--user`?r   z&A kernel spec is already present at %s)rZ   r2   ra   r9   install_kernel_specrW   rf   r\   OSErrorerrnoEACCESr<   sysstderrEEXISTfilename)r   es     r   rE   zInstallKernelSpec.start   s    99II[\	$$88 ,,YY{{ 9   	ww%,,&acjj)yyN ZZ 		!  ELL(<qzzI 		!	s   AA> >	ECEE)rF   rG   rH   r   rI   rJ   examplesusager   r   r9   r   r
   rW   rf   rX   r   rZ   r2   r\   aliasesupdater   rn   r   rK   r_   rE   __classcell__rd   s   @r   rN   rN   G   s   GKH @E"#459 	I"T0XYK0 D 
F 5,^_G 0,G NN<  !64.15

 !9d"34>

 !8SZZ"89S
 G$E r   rN   c                        e Zd ZeZdZdZ eddd      Z e	 e
             Z ee      Zd Zdd d	diiej                   fiZej%                  ej"                          fd
Zd Z x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.rS   c                 0    t        | j                  |       S )N)r   r   r   r   s    r   r   z-RemoveKernelSpec._kernel_spec_manager_default   s     $--EEr   fforcec                     t         |   |       | j                  r$t        t	        | j                              | _        y | j                  d       y )NzNo kernelspec specified.)r^   r_   r`   r=   set
spec_namesra   rb   s     r   r_   z#RemoveKernelSpec.parse_command_line   s9    "4(??$S%9:DOII01r   c                    d| j                   _        | j                   j                         }t        | j                        j                  t        |            }|r#| j                  ddj                  |      z         | j                  s| j                  st        d       | j                  D ]%  }t        d|j                  d      d||          ' t        dt        | j                        z        }|j                         j                  d	      sy | j                  D ]:  }	 | j                   j!                  |      }| j,                  j/                  d       < y # t"        $ rp}|j$                  t$        j&                  k(  rHt        |t(        j*                  
       t        dt(        j*                  
       | j                  d       n Y d }~d }~ww xY w)NFz Couldn't find kernel spec(s): %sz, zKernel specs to remove:r4      	zRemove %i kernel specs [y/N]: yrg   zPerhaps you want sudo?r   z
Removed %s)r9   ensure_native_kernelr:   r   r   
differencera   joinr}   
answer_yesr<   r?   inputr$   lowerr.   remove_kernel_specrk   rl   rm   rn   ro   loginfo)r   
spec_pathsmissingr&   answerrf   r0   rr   s           r   rE   zRemoveKernelSpec.start   sh   8=  5--??A
doo&11#j/BII8499W;MMN

doo+, GDJJrNJt4DEFG;c$//>RRSF<<>,,S1?? 
	.K//BB;O HHMM,-
	.  77ell*!#**-2DIIaL !	s   &E  	G)A&GG)rF   rG   rH   r   rI   rJ   rs   r   r}   r	   r
   r   r   r   r9   r   r   rK   rv   r   r_   rE   rw   rx   s   @r   rz   rz      s}    GGKFHt*]^EgiJ"#45F 	!GT?3UZZ@E 
LL!!"2.r   rz   c                   b    e Zd ZeZdZ ee      Zd Z	 e
ddd      Zd ddiidfed	   d
Zd Zy)InstallNativeKernelSpeczG[DEPRECATED] Install the IPython kernel spec directory for this Python.c                 .    t        | j                        S rP   r   r   s    r   r   z4InstallNativeKernelSpec._kernel_spec_manager_default   rQ   r   FTrY   rS   rZ   r[   r   )rZ   r   c                 <   | j                   j                  d       	 ddlm} 	 j                  | j                  | j                         y # t        $ r/ t        dt        j                         | j                  d       Y `w xY w# t        $ r}|j                  t        j                  k(  rSt        |t        j                         | j                  st        dt        j                         | j                  d       | j                  |       Y d }~y d }~ww xY w)	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   )rZ   ri   )r   warning	ipykernelr   ImportErrorr<   rn   ro   ra   installr9   rZ   rk   rl   rm   )r   r   rr   s      r   rE   zInstallNativeKernelSpec.start   s    ]	
	,	t77diiH	  	D3::VIIaL	
  		ww%,,&acjj)yyN ZZ 		!IIaLL		s)   A 'B 5BB	DBDDN)rF   rG   rH   r   rI   rJ   r   r   r9   r   r   rZ   r   rK   rE   rL   r   r   r   r      s`    G_K"#459 D '75
 G$Er   r   c                       e Zd ZeZdZd Zy)ListProvisionersz=List available provisioners for use in kernel specifications.c                     t        j                  |       }t        d       |j                         }t	        t        |d       d         }t        |      D ]%  }t        d|j                  |       d||           ' y )N)r   zAvailable kernel provisioners:c                     t        |       S r"   r#   r%   s    r   r'   z(ListProvisioners.start.<locals>.<lambda>  s
    SY r   r(   r*   r4   r5   )r   instancer<   get_provisioner_entriesr$   r=   r?   )r   kfpprovisionersrC   r&   s        r   rE   zListProvisioners.start  s}    &//t<./224 vl0FGKL<( 	GDBtzz(+,Dd1C0DEF	Gr   N)rF   rG   rH   r   rI   rJ   rE   rL   r   r   r   r     s    GUK	Gr   r   c            
          e Zd ZU eZdZdZ eeej                  j                         d   fe
e
j                  j                         d   fedfeej                  j                         d   feej                  j                         d   feej                  j                         d   fd      Zi Zej                  eef   ed<   i Zej                  eef   ed<   d Zy	)
KernelSpecAppzjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)listr   	uninstallremovezinstall-selfr   ru   rK   c                    | j                   ]t        dt        | j                        z         t                | j	                          | j                          | j                  d       y | j                   j                         S )Nz0No subcommand specified. Must specify one of: %sr   )subappr<   r   subcommandsprint_descriptionprint_subcommandsra   rE   r   s    r   rE   zKernelSpecApp.start<  s`    ;;DtDL\L\G]]^G""$""$IIaL;;$$&&r   N)rF   rG   rH   r   rI   r&   rJ   r   r   
splitlinesrN   rz   r   r   r   ru   tstrobject__annotations__rK   rE   rL   r   r   r   r   #  s    GD=K$o&A&A&L&L&Nq&QR!!--88:1= +,>?')9)E)E)P)P)RST)UV''33>>@C ./?/K/K/V/V/XYZ/[\	
K" $&GQVVCK %!#E166#v+#'r   r   __main__)!rl   r   os.pathrU   rn   typingr   jupyter_core.applicationr   r   r   	traitletsr   r   r   r	   r
   traitlets.config.applicationr   rR   r   r   r   provisioning.factoryr   r   rN   rz   r   r   r   rF   launch_instancerL   r   r   <module>r      s       
  1 / /      4  ) :,@j ,@^b
 bJ3.z 3.l.j .bGz G !'K !'H z!!# r   