B
    [                 @   s  d 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 ddlmZmZmZmZmZmZmZmZmZmZmZmZ eeZdd	d
iidfed< dddiidfed< dddiidfed< eeZdddiidfed< eeZdddiidfed< eeZde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#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(d.Z)G d/d0 d0eZ*e*j+Z,e-d1kre.e,  dS )2z"Jupyter LabExtension Entry Points.    N)copy)
JupyterApp
base_flagsbase_aliases)BoolUnicode   )install_extensionuninstall_extensionlist_extensionsenable_extensiondisable_extensioncheck_extensionlink_packageunlink_packagebuildget_app_versionHEREupdate_extensionBaseExtensionAppshould_buildFz(Defer building the app after the action.zno-build	dev_buildTzBuild in Development modez	dev-buildshould_cleanz,Cleanup intermediate files after the action.ZcleanCheckLabExtensionsAppshould_check_installed_onlyz)Check only if the extension is installed.Z	installedUpdateLabExtensionAppallzUpdate all extensionszBaseExtensionApp.app_dirzapp-dirc               @   sh   e Zd ZeZeZeZeddddZe	ddddZ
e	ddddZe	ddddZd	d
 Zdd Zdd ZdS )r    TzThe app directory to target)confighelpz)Whether to build the app after the actionz3Whether to build in dev mode (defaults to dev mode)FzFWhether temporary files should be cleaned up after building jupyterlabc          
   C   s   | j r| j trtdy:|  }|rR| jrR| js8dnd}t| j | j| j	|d W n t
k
r } zft \}}}t|j||}x|D ]}| j	| qW | j	d | j	|d   td W d d }~X Y nX d S )Nz-Cannot run lab extension commands in core appz
build:prodr   )app_dirZclean_stagingloggercommandz&
Errored, use --debug for full output:r   )r    
startswithr   
ValueErrorrun_taskr   r   r   r   log	Exceptionsysexc_info	tracebackformat_exception	__class__debugerrorstripexit)selfZansr"   ex_exc_tracebackmsgline r8   7lib/python3.7/site-packages/jupyterlab/labextensions.pystartI   s     


zBaseExtensionApp.startc             C   s   d S )Nr8   )r2   r8   r8   r9   r&   [   s    zBaseExtensionApp.run_taskc             C   s   dS )zA default format for messagesz%(message)sr8   )r2   r8   r8   r9   _log_format_default^   s    z$BaseExtensionApp._log_format_defaultN)__name__
__module____qualname__VERSIONversionflagsaliasesr   r    r   r   r   r   r:   r&   r;   r8   r8   r8   r9   r   8   s   c               @   s   e Zd ZdZdd ZdS )InstallLabExtensionAppzInstall labextension(s)c                s*    j pt g _ t fdd j D S )Nc                s   g | ]}t | j jd qS ))r!   )r	   r    r'   ).0arg)r2   r8   r9   
<listcomp>i   s   z3InstallLabExtensionApp.run_task.<locals>.<listcomp>)
extra_argsosgetcwdany)r2   r8   )r2   r9   r&   f   s    
zInstallLabExtensionApp.run_taskN)r<   r=   r>   descriptionr&   r8   r8   r8   r9   rC   c   s   rC   c               @   s*   e Zd ZdZeZeddddZdd ZdS )	r   zUpdate labextension(s)FTz Whether to update all extensions)r   r   c                sL    j s js jd dS  j r4td j jdS t fdd jD S )NzESpecify an extension to update, or use --all to update all extensionsFT)Zall_r    r!   c                s   g | ]}t | j jd qS ))namer    r!   )r   r    r'   )rD   rE   )r2   r8   r9   rF   |   s   z2UpdateLabExtensionApp.run_task.<locals>.<listcomp>)r   rG   r'   warnr   r    rJ   )r2   r8   )r2   r9   r&   u   s    
zUpdateLabExtensionApp.run_taskN)	r<   r=   r>   rK   update_flagsrA   r   r   r&   r8   r8   r8   r9   r   n   s
   c               @   s&   e Zd ZdZeddddZdd ZdS )LinkLabExtensionAppz
    Link local npm packages that are not lab extensions.

    Links a package to the JupyterLab build process. A linked
    package is manually re-installed from its source location when
    `jupyter lab build` is run.
    Tz)Whether to build the app after the action)r   r   c                s*    j pt g _ t fdd j D S )Nc                s   g | ]}t | j jd qS ))r!   )r   r    r'   )rD   rE   )r2   r8   r9   rF      s   z0LinkLabExtensionApp.run_task.<locals>.<listcomp>)rG   rH   rI   rJ   )r2   r8   )r2   r9   r&      s    
zLinkLabExtensionApp.run_taskN)r<   r=   r>   rK   r   r   r&   r8   r8   r8   r9   rO      s   rO   c               @   s   e Zd ZdZdd ZdS )UnlinkLabExtensionAppzUnlink packages by name or pathc                s*    j pt g _ t fdd j D S )Nc                s   g | ]}t | j jd qS ))r!   )r   r    r'   )rD   rE   )r2   r8   r9   rF      s   z2UnlinkLabExtensionApp.run_task.<locals>.<listcomp>)rG   rH   rI   rJ   )r2   r8   )r2   r9   r&      s    
zUnlinkLabExtensionApp.run_taskN)r<   r=   r>   rK   r&   r8   r8   r8   r9   rP      s   rP   c               @   s   e Zd ZdZdd ZdS )UninstallLabExtensionAppz!Uninstall labextension(s) by namec                s*    j pt g _ t fdd j D S )Nc                s   g | ]}t | j jd qS ))r!   )r
   r    r'   )rD   rE   )r2   r8   r9   rF      s   z5UninstallLabExtensionApp.run_task.<locals>.<listcomp>)rG   rH   rI   rJ   )r2   r8   )r2   r9   r&      s    
z!UninstallLabExtensionApp.run_taskN)r<   r=   r>   rK   r&   r8   r8   r8   r9   rQ      s   rQ   c               @   s   e Zd ZdZdd ZdS )ListLabExtensionsAppz List the installed labextensionsc             C   s   t | j| jd d S )N)r!   )r   r    r'   )r2   r8   r8   r9   r&      s    zListLabExtensionsApp.run_taskN)r<   r=   r>   rK   r&   r8   r8   r8   r9   rR      s   rR   c               @   s   e Zd ZdZdd ZdS )EnableLabExtensionsAppzEnable labextension(s) by namec                s    fdd j D  d S )Nc                s   g | ]}t | j jd qS ))r!   )r   r    r'   )rD   rE   )r2   r8   r9   rF      s   z3EnableLabExtensionsApp.run_task.<locals>.<listcomp>)rG   )r2   r8   )r2   r9   r&      s    
zEnableLabExtensionsApp.run_taskN)r<   r=   r>   rK   r&   r8   r8   r8   r9   rS      s   rS   c               @   s   e Zd ZdZdd ZdS )DisableLabExtensionsAppzDisable labextension(s) by namec                s    fdd j D  d S )Nc                s   g | ]}t | j jd qS ))r!   )r   r    r'   )rD   rE   )r2   r8   r9   rF      s   z4DisableLabExtensionsApp.run_task.<locals>.<listcomp>)rG   )r2   r8   )r2   r9   r&      s    
z DisableLabExtensionsApp.run_taskN)r<   r=   r>   rK   r&   r8   r8   r8   r9   rT      s   rT   c               @   s*   e Zd ZdZeZeddddZdd ZdS )	r   zCheck labextension(s) by nameFTz;Whether it should check only if the extensions is installed)r   r   c                s(   t  fdd jD }|s$td d S )Nc             3   s$   | ]}t | j j jd V  qdS ))r!   N)r   r    r   r'   )rD   rE   )r2   r8   r9   	<genexpr>   s   z1CheckLabExtensionsApp.run_task.<locals>.<genexpr>r   )r   rG   r1   )r2   Zall_enabledr8   )r2   r9   r&      s
    
zCheckLabExtensionsApp.run_taskN)	r<   r=   r>   rK   check_flagsrA   r   r   r&   r8   r8   r8   r9   r      s
   z
jupyter labextension list                        # list all configured labextensions
jupyter labextension install <extension name>    # install a labextension
jupyter labextension uninstall <extension name>  # uninstall a labextension
c                   sn   e Zd ZdZdZeZdZeZ	e
edfedfedfedfedfed	fed
fedfedfd	Z fddZ  ZS )LabExtensionAppz-Base jupyter labextension command entry pointzjupyter labextensionzWork with JupyterLab extensionszInstall labextension(s)zUpdate labextension(s)zUninstall labextension(s)zList labextensionszLink labextension(s)zUnlink labextension(s)zEnable labextension(s)zDisable labextension(s)zCheck labextension(s))	ZinstallupdateZ	uninstalllistlinkunlinkenabledisableZcheckc                s0   t t|   dt| j}td|  dS )z)Perform the App's functions as configuredz, z)Please supply at least one subcommand: %sN)superrW   r:   joinsortedsubcommandsr)   r1   )r2   Zsubcmds)r-   r8   r9   r:      s    zLabExtensionApp.start)r<   r=   r>   __doc__rL   r?   r@   rK   	_examplesZexamplesdictrC   r   rQ   rR   rO   rP   rS   rT   r   ra   r:   __classcell__r8   r8   )r-   r9   rW      s    rW   __main__)/rb   rH   r)   r+   r   Zjupyter_core.applicationr   r   r   Z	traitletsr   r   Zcommandsr	   r
   r   r   r   r   r   r   r   r   r   r   rd   rA   rV   rN   rB   r?   r   rC   r   rO   rP   rQ   rR   rS   rT   r   rc   rW   Zlaunch_instancemainr<   r1   r8   r8   r8   r9   <module>   sL   8









+
