o
    Zh/                     @  s  d Z ddlm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 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.    )annotationsN)
JupyterAppbase_aliases
base_flags)BoolDictInstanceListUnicode)Application   )__version__)KernelSpecManager)KernelProvisionerFactoryc                   @  s\   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dZd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   returnr   c                 C  s   t | | jdS )N)parentdata_dirr   r   self r   S/var/www/html/lang_env/lib/python3.10/site-packages/jupyter_client/kernelspecapp.py_kernel_spec_manager_default)      z,ListKernelSpecs._kernel_spec_manager_defaultdict[str, t.Any] | Nonec                   s    j  } j  } jsH|std dS tt|dd dd }d fd
d}td t| |dD ]\}}td|| d|  q4|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>5       z'ListKernelSpecs.start.<locals>.<lambda>keyitemt.Anyr   c                   s:   | d }t  jD ]\}}||r||f  S q	d|fS )z+sort key function for Jupyter path priorityr   r,   )	enumerateZjupyter_path
startswith)r-   pathidxprefixr   r   r   path_key7   s   
z'ListKernelSpecs.start.<locals>.path_keyzAvailable kernels:      Zkernelspecs   )indent)r-   r.   r   r.   )kernel_spec_managerfind_kernel_specsZget_all_specsr   printr%   sorteditemsljustr   dumps)r   pathsspecsname_lenr4   Z
kernelnamer1   r   r   r   start,   s   

	zListKernelSpecs.startNr   r   )r   r    )__name__
__module____qualname____doc__r   versiondescriptionr   r   r9   r   r   r   flagsr   rC   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dZe Zed	d
ddZd&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d' fd!d"Zd(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]r   r   c                 C     t | jdS N)r   r   r   r   r   r   r   Y      z.InstallKernelSpec._kernel_spec_manager_default Tz&Install the kernel spec with this namer   r   strc                 C  s   t j| jS r#   )osr1   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'   r3   user'Install to the per-user kernel registryreplacer3   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )rX   rZ   z
sys-prefixr   argvNone | list[str]Nonec                   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_argsrU   r;   sysstderrexitr   r[   	__class__r   r   rb      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_namerX   r3   rZ   r_   4Perhaps you want to install with `sudo` or `--user`?r   z$A kernel spec is already present at N)rX   r3   rf   r9   Zinstall_kernel_specrU   rj   rZ   OSErrorerrnoEACCESr;   rd   re   EEXISTfilename)r   er   r   r   rC      s.   


zInstallKernelSpec.startrD   )r   rR   )r[   r\   r   r]   r   r]   )rE   rF   rG   rH   r   rI   rJ   examplesusager   r   r9   r   r
   rU   rj   rV   r   rX   r3   rZ   aliasesupdater   rd   r   rK   rb   rC   __classcell__r   r   rh   r   rL   H   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
dZdd ddiie	jfiZeej d fddZd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   r   r   c                 C  s   t | j| dS )N)r   r   r   r   r   r   r   r      r   z-RemoveKernelSpec._kernel_spec_manager_defaultfforcer[   list[str] | Noner]   c                   s4   t  | | jrtt| j| _dS | d dS )r^   zNo kernelspec specified.N)ra   rb   rc   r<   set
spec_namesrf   rg   rh   r   r   rb      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:r5      	zRemove %i kernel specs [y/N]: yNr_   zPerhaps you want sudo?r   zRemoved )r9   Zensure_native_kernelr:   r|   r}   
differencerf   joinrz   Z
answer_yesr;   getr>   inputr%   lowerr0   Zremove_kernel_specrl   rm   rn   rd   re   )r   Z
spec_pathsmissingr'   r1   Zanswerrj   rq   r   r   r   rC      s6   

"
zRemoveKernelSpec.startrD   )r[   r{   r   r]   rr   )rE   rF   rG   rH   r   rI   rJ   rs   r   rz   r	   r
   r}   r   r   r9   r   r   rK   rv   r   rb   rC   rw   r   r   rh   r   rx      s    

	rx   c                   @  s\   e Zd ZdZeZdZeeZ	dddZ
eddd	d
Zd ddiidfed dZd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.r   r   c                 C  rM   rN   r   r   r   r   r   r      rO   z4InstallNativeKernelSpec._kernel_spec_manager_defaultFTrW   rQ   rX   rY   r   )rX   r   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   )rX   rk   N)logwarningZ	ipykernelr   ModuleNotFoundErrorr;   rd   re   rf   installr9   rX   rl   rm   rn   )r   r   rq   r   r   r   rC     s.   
zInstallNativeKernelSpec.startNrD   rr   )rE   rF   rG   rH   r   rI   rJ   r   r   r9   r   r   rX   r   rK   rC   r   r   r   r   r      s"    

r   c                   @  s"   e Zd ZdZeZdZdddZdS )	ListProvisionerszAn app to list provisioners.z=List available provisioners for use in kernel specifications.r   r]   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,   r5   r6   N)r   instancer;   Zget_provisioner_entriesr%   r<   r>   )r   ZkfpprovisionersrB   r'   r   r   r   rC      s    zListProvisioners.startNrr   )rE   rF   rG   rH   r   rI   rJ   rC   r   r   r   r   r     s
    r   c                	   @  s   e Zd 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eej
 d fdZi Zi Z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   r   r]   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   )Zsubappr;   r   subcommandsZprint_descriptionZprint_subcommandsrf   rC   r   r   r   r   rC   H  s   

zKernelSpecApp.startNrr   )rE   rF   rG   rH   r   rI   r'   rJ   r   r   
splitlinesrL   rx   r   r   r   ru   rK   rC   r   r   r   r   r   -  s*    r   __main__)$rH   
__future__r   rm   r   Zos.pathrS   rd   typingtZjupyter_core.applicationr   r   r   Z	traitletsr   r   r   r	   r
   Ztraitlets.config.applicationr   rP   r   r   r   Zprovisioning.factoryr   r   rL   rx   r   r   r   rE   Zlaunch_instancer   r   r   r   <module>   s,    3c;4'