
    f/                    L   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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!jG                          yy)zApps for managing kernel specs.    )annotationsN)
JupyterAppbase_aliases
base_flags)BoolDictInstanceListUnicode)Application   )__version__)KernelSpecManager)KernelProvisionerFactoryc                  j    e Zd 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d
ZddZy)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                0    t        | | j                        S )N)parentdata_dirr   r   selfs    W/var/www/cvtools/html/venv/lib/python3.12/site-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         }d fd}t	        d       t        |j                         |      D ]%  \  }}t	        d|j                  |       d	|        ' |S t	        t        j                  d
|id             |S )Start the application.zNo kernels availableNc                    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)r1   t.Anyreturnr;   )kernel_spec_managerfind_kernel_specsget_all_specsr   printr&   sorteditemsljustr   dumps)r   pathsspecsname_lenr5   
kernelnamer2   s   `      r   startzListKernelSpecs.start,   s    ((::<((668,-6%-CDRHIH" &'$*5;;=h$G C 
D:++H56d4&ABC  $**mU3A>?r    Nr<   r   )r<   zdict[str, t.Any] | None)__name__
__module____qualname____doc__r   versiondescriptionr	   r   r=   r   r   r   flagsr   rI    r    r   r   r      sa    &G=K"#45FK  56E
 G$EFr    r   c                  :    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	      Zd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d fdZddZ x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                .    t        | j                        S N)r   r   r   s    r   r   z.InstallKernelSpec._kernel_spec_manager_defaultY        $--88r     Tz&Install the kernel spec with this namer   r   c                T    t         j                  j                  | j                        S r$   )osr2   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(   r4   user'Install to the per-user kernel registryreplacer4   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )r`   rb   z
sys-prefixr   c                    t         |   |       | j                  r| j                  d   | _        yt	        dt
        j                         | j                  d       y)Parse the command line args.r   zNo source directory specified.filer   N)superparse_command_line
extra_argsr]   r@   sysstderrexitr   argv	__class__s     r   rh   z$InstallKernelSpec.parse_command_line   sA    "4(??!__Q/DN2D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                   t        j                         | j                  d        d}~ww xY w)r"   zCCan't specify both user and prefix. Please choose one or the other.)kernel_namer`   r4   rb   re   4Perhaps you want to install with `sudo` or `--user`?r   z$A kernel spec is already present at N)r`   r4   rl   r=   install_kernel_specr]   rq   rb   OSErrorerrnoEACCESr@   rj   rk   EEXISTfilename)r   es     r   rI   zInstallKernelSpec.start   s    99II[\	$$88 ,,YY{{ 9   		ww%,,&acjj)yyPWZWaWab		!  ELL(<QZZLIPSPZPZ[		!		s   AA> >	ECEErJ   )r<   str)rn   zNone | list[str]r<   Noner<   r{   )rK   rL   rM   rN   r   rO   rP   examplesusager	   r   r=   r   r   r]   rq   r^   r   r`   r4   rb   aliasesupdater   rj   r   rQ   rh   rI   __classcell__ro   s   @r   rT   rT   H   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    rT   c                       e Zd ZdZeZdZdZ e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j'                  ej$                         d fdZddZ x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.rY   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)rd   zNo kernelspec specified.N)rg   rh   ri   rA   set
spec_namesrl   rm   s     r   rh   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 ]C  }|j                  ||      }t        d|j                  d       d|j                  d              E t        dt        | j                        z        }|j                         j!                  d	      sy
| j                  D ],  }	 | j                   j#                  |      }t        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)r"   Fz Couldn't find kernel spec(s): %sz, zKernel specs to remove:r6      	zRemove %i kernel specs [y/N]: yNre   zPerhaps you want sudo?r   zRemoved )r=   ensure_native_kernelr>   r   r   
differencerl   joinr   
answer_yesr@   getrC   inputr&   lowerr0   remove_kernel_specrt   ru   rv   rj   rk   )r   
spec_pathsmissingr(   r2   answerrq   ry   s           r   rI   zRemoveKernelSpec.start   s   8=  5--??A
doo&11#j/BII8499W;MMN

doo+, ?!~~dD14::b>*"TZZ^,<=>? ;c$//>RRSF<<>,,S1?? 
	%K//BB;O HTF#$
	%  77ell*!#**-2DIIaL !	s   E00	G)9A&G$$G)rJ   )rn   zlist[str] | Noner<   r{   r|   )rK   rL   rM   rN   r   rO   rP   r}   r   r   r
   r   r   r	   r   r=   r   r   rQ   r   r   rh   rI   r   r   s   @r   r   r      s    )GGKFHt*]^EgiJ"#45F 	!GT?3UZZ@E 
LL!!"2%r    r   c                  j    e Zd ZdZeZdZ ee      Z	ddZ
 eddd      Zd ddiid	fed
   dZddZy)InstallNativeKernelSpecz)An app to install the native kernel spec.zG[DEPRECATED] Install the IPython kernel spec directory for this Python.c                .    t        | j                        S rV   r   r   s    r   r   z4InstallNativeKernelSpec._kernel_spec_manager_default   rW   r    FTr_   rY   r`   ra   r   )r`   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)
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.re   r   )r`   rr   N)logwarning	ipykernelr   ModuleNotFoundErrorr@   rj   rk   rl   installr=   r`   rt   ru   rv   )r   r   ry   s      r   rI   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NrJ   r|   )rK   rL   rM   rN   r   rO   rP   r	   r   r=   r   r   r`   r   rQ   rI   rR   r    r   r   r      sc    3G_K"#459 D '75
 G$Er    r   c                       e Zd ZdZeZdZddZy)ListProvisionerszAn app to list provisioners.z=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)	r"   )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,   r6   r7   N)r   instancer@   get_provisioner_entriesr&   rA   rC   )r   kfpprovisionersrG   r(   s        r   rI   zListProvisioners.start   s}    &//t<./224 vl0FGKL<( 	GDBtzz(+,Dd1C0DEF	Gr    Nr|   )rK   rL   rM   rN   r   rO   rP   rI   rR   r    r   r   r     s    &GUK
Gr    r   c            
      p   e Zd ZdZ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i Zd	dZy)
KernelSpecAppzAn app to manage kernel specs.zjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)listr   	uninstallremovezinstall-selfr   c                   | j                   ]t        dt        | j                        z         t                | j	                          | j                          | j                  d       y| j                   j                         S )r"   Nz0No subcommand specified. Must specify one of: %sr   )subappr@   r   subcommandsprint_descriptionprint_subcommandsrl   rI   r   s    r   rI   zKernelSpecApp.startH  s`    ;;DtDL\L\G]]^G""$""$IIaL;;$$&&r    Nr|   )rK   rL   rM   rN   r   rO   r(   rP   r   r   
splitlinesrT   r   r   r   r   r   rQ   rI   rR   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" GE	'r    r   __main__)$rN   
__future__r   ru   r   os.pathr[   rj   typingtjupyter_core.applicationr   r   r   	traitletsr   r   r	   r
   r   traitlets.config.applicationr   rX   r   r   r   provisioning.factoryr   r   rT   r   r   r   r   rK   launch_instancerR   r    r   <module>r      s    % #    
  I I 9 9 4  ) :0j 0f`
 `F8%z 8%v1j 1hGz G&$'K $'N z!!# r    