o
    i.                     @   s  d Z 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	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 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re!#  dS dS )zApps for managing kernel specs.    N)
JupyterAppbase_aliases
base_flags)BoolDictInstanceListUnicode)Application)Config   )__version__)KernelSpecManager)KernelProvisionerFactoryc                   @   sX   e Zd 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An app to list kernel specs.z%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   W/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_client/kernelspecapp.py_kernel_spec_manager_default(      z,ListKernelSpecs._kernel_spec_manager_defaultc                    s    j  } j  } jsG|std dS tt|dd dd } fdd}td	 t| |dD ]\}}td
|| d|  q3|S tt	j
d|idd |S )Start the application.zNo kernels availableNc                 S      t | S Nlennamer   r   r   <lambda>4       z'ListKernelSpecs.start.<locals>.<lambda>keyc                    s:   | d }t  jD ]\}}||r||f  S q	d|fS )z+sort key function for Jupyter path priorityr   r*   )	enumeratejupyter_path
startswith)itempathidxprefixr   r   r   path_key6   s   
z'ListKernelSpecs.start.<locals>.path_keyzAvailable kernels:      kernelspecs   )indent)kernel_spec_managerfind_kernel_specsget_all_specsr   printr#   sorteditemsljustr   dumps)r   pathsspecsname_lenr2   
kernelnamer/   r   r   r   start+   s   

	zListKernelSpecs.startN)__name__
__module____qualname____doc__r   versiondescriptionr   r   r8   r   r   r   flagsr   rD   r   r   r   r   r      s"    
r   c                       s   e Zd 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 )InstallKernelSpecz An app to install a kernel spec.a=  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      t | jdS N)r   r   r   r   r   r   r   X      z.InstallKernelSpec._kernel_spec_manager_default Tz&Install the kernel spec with this namer   r   c                 C   s   t j| jS r!   )osr/   basename	sourcedirr   r   r   r   _kernel_name_default^   r   z&InstallKernelSpec._kernel_name_defaultF
        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%   r1   user'Install to the per-user kernel registryreplacer1   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )rW   rY   z
sys-prefixr   c                    s>   t  | | jr| jd | _dS tdtjd | d dS )Parse the command line args.r   zNo source directory specified.filer   N)superparse_command_line
extra_argsrT   r;   sysstderrexitr   argv	__class__r   r   r^      s
   z$InstallKernelSpec.parse_command_linec              
   C   s   | j r| jr| d z| jj| j| j| j | j| jd W dS  ty^ } z4|j	t	j
krCt|tjd | j s=tdtjd | d  |j	t	jkrYtd|j tjd | d  d}~ww )r   zCCan't specify both user and prefix. Please choose one or the other.)kernel_namerW   r1   rY   r[   4Perhaps you want to install with `sudo` or `--user`?r   z$A kernel spec is already present at N)rW   r1   rb   r8   install_kernel_specrT   rg   rY   OSErrorerrnoEACCESr;   r`   ra   EEXISTfilename)r   er   r   r   rD      s.   


zInstallKernelSpec.start)rE   rF   rG   rH   r   rI   rJ   examplesusager   r   r8   r   r	   rT   rg   rU   r   rW   r1   rY   aliasesupdater   r`   r   rK   r^   rD   __classcell__r   r   re   r   rL   G   sN    



rL   c                       s~   e Zd 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An app to remove a kernel spec.z/Remove one or more Jupyter kernelspecs by name.z1jupyter kernelspec remove python2 [my_kernel ...]FTz-Force removal, don't prompt for confirmation.rQ   c                 C   s   t | j| dS )N)r   r   r   r   r   r   r   r      r   z-RemoveKernelSpec._kernel_spec_manager_defaultfforcec                    s4   t  | | jrtt| j| _dS | d dS )rZ   zNo kernelspec specified.N)r]   r^   r_   r<   set
spec_namesrb   rc   re   r   r   r^      s   z#RemoveKernelSpec.parse_command_linec                 C   s8  d| j _| j  }t| jt|}|r| dd|  | jsW| j	sWt
d | jD ]}|||}t
d|d d|d  q,tdt| j }| d	sWd
S | jD ]?}z| j |}W n- ty } z!|jtjkrt
|tjd t
dtjd | d n W Y d
}~nd
}~ww t
d|  qZd
S )r   Fz Couldn't find kernel spec(s): %sz, zKernel specs to remove:r3      	zRemove %i kernel specs [y/N]: yNr[   zPerhaps you want sudo?r   zRemoved )r8   ensure_native_kernelr9   rx   ry   
differencerb   joinrw   
answer_yesr;   getr>   inputr#   lowerr-   remove_kernel_specrj   rk   rl   r`   ra   )r   
spec_pathsmissingr%   r/   answerrg   ro   r   r   r   rD      s6   

"
zRemoveKernelSpec.start)rE   rF   rG   rH   r   rI   rJ   rp   r   rw   r   r	   ry   r   r   r8   r   r   rK   rs   r   r^   rD   rt   r   r   re   r   ru      s    
	ru   c                   @   sX   e Zd 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 )InstallNativeKernelSpecz)An app to install the native kernel spec.zG[DEPRECATED] Install the IPython kernel spec directory for this Python.c                 C   rM   rN   r   r   r   r   r   r      rO   z4InstallNativeKernelSpec._kernel_spec_manager_defaultFTrV   rQ   rW   rX   r   )rW   r   c              
   C   s   | j d zddlm} W n ty#   tdtjd | d Y nw z|j	| j
| jd W d	S  tyd } z(|jtjkrTt|tjd | jsOtdtjd | d | | W Y d	}~d	S d	}~ww )
r   z`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.r[   r   )rW   rh   N)logwarning	ipykernelr   ModuleNotFoundErrorr;   r`   ra   rb   installr8   rW   rj   rk   rl   )r   r   ro   r   r   r   rD      s.   
zInstallNativeKernelSpec.startN)rE   rF   rG   rH   r   rI   rJ   r   r   r8   r   r   rW   r   rK   rD   r   r   r   r   r      s"    
r   c                   @   s    e Zd ZdZeZdZdd ZdS )ListProvisionerszAn app to list provisioners.z=List available provisioners for use in kernel specifications.c                 C   sd   t j| d}td | }tt|dd dd }t|D ]}td|| d||   qd	S )
r   )r   zAvailable kernel provisioners:c                 S   r    r!   r"   r$   r   r   r   r&   &  r'   z(ListProvisioners.start.<locals>.<lambda>r(   r*   r3   r4   N)r   instancer;   get_provisioner_entriesr#   r<   r>   )r   kfpprovisionersrB   r%   r   r   r   rD     s    zListProvisioners.startN)rE   rF   rG   rH   r   rI   rJ   rD   r   r   r   r   r     s
    r   c                	   @   s  e Zd ZU 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eej
 d fdZi Zejejeejedf f ejeejeef f f ed< i Zejejeejedf f ejejejeejf ef ef f ed	< d
d ZdS )KernelSpecAppzAn app to manage kernel specs.zjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)listr   	uninstallremovezinstall-selfr   .rr   rK   c                 C   sJ   | j du r tdt| j  t  |   |   | d dS | j  S )r   Nz0No subcommand specified. Must specify one of: %sr   )subappr;   r   subcommandsprint_descriptionprint_subcommandsrb   rD   r   r   r   r   rD   I  s   

zKernelSpecApp.startN)rE   rF   rG   rH   r   rI   r%   rJ   r   r   
splitlinesrL   ru   r   r   r   rr   tUnionstrTuple__annotations__rK   Anyr   rD   r   r   r   r   r   ,  s0   
 >:r   __main__)$rH   rk   r   os.pathrR   r`   typingr   jupyter_core.applicationr   r   r   	traitletsr   r   r   r   r	   traitlets.config.applicationr
   traitlets.config.loaderr   rP   r   r   r   provisioning.factoryr   r   rL   ru   r   r   r   rE   launch_instancer   r   r   r   <module>   s,    3c;4)