a
    2b                     @   s   d Z ddlm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mZ ddlmZ d	d
lmZmZmZmZmZ d	dlmZ G dd deZG dd de	eZdZdS )z-Tornado handlers for frontend config storage.    )ThreadPoolExecutorN)Event)
APIHandler)ExtensionHandlerMixin)genweb)run_on_executor   )buildcleanbuild_check
AppOptions_ensure_options)
CoreConfigc                   @   sv   e Zd ZdZeddZdZdZdZdZ	dddZ
ejdd Zejd	d
 Zejdd Zedd Zedd ZdS )BuilderF   )max_workersNc                 C   s2   t |}|j| _|| _|j| _|j| _|j| _d S N)r   loggerlog	core_modeapp_dircore_configlabextensions_path)selfr   app_options r   @lib/python3.9/site-packages/jupyterlab/handlers/build_handler.py__init__   s    zBuilder.__init__c              
   #   s    j rttddd jr0ttdddzZ  j j j j	V }|rTdnd}|r| j
d  fdd|D  n jd	 W n8 ty } z  j
d
 d}g }W Y d }~n
d }~0 0 tt|d|dd S )NZstable )statusmessagebuildingZneededzBuild recommendedc                    s   g | ]} j |qS r   )r   warn).0mr   r   r   
<listcomp>/       z&Builder.get_status.<locals>.<listcomp>zBuild is up to datez:Could not determine jupyterlab build status without nodejs
)r   r   ZReturndictr"   _run_build_checkr   r   r   r   r#   info
ValueErrorjoin)r   messagesr    er   r&   r   
get_status"   s(    zBuilder.get_statusc              
   c   s   | j rtd| jsd| _t  | _}d| _t  | _}z|z*| 	| j
| j|| j| jV  |d W nF ty } z.t|dkr|d n
|| W Y d }~n
d }~0 0 W d| _nd| _0 z| jV  W n( ty } z|W Y d }~n
d }~0 0 d S )NzCancel in progressFTZAborted)
_cancelingr-   r"   canceledr   ZFuture_futurer   _kill_event
_run_buildr   r   r   r   Z
set_result	ExceptionstrZset_exception)r   ZfutureZevtr0   r   r   r   r
   ;   s*    "zBuilder.buildc                 c   s,   | j stdd| _| jV  d| _d| _d S )NzNo current buildTF)r"   r-   r2   r4   r3   r&   r   r   r   cancelT   s    zBuilder.cancelc                 C   s   t t||||ddS )N)r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   r+   ]   s    zBuilder._run_build_checkc              
   C   s   t |||||d}zt|dW S  tyz } zD| j rFW Y d }~d S | jd t|d t|dW  Y d }~S d }~0 0 d S )N)r   r   
kill_eventr   r   r:   z)Build failed, running a clean and rebuild)r   r
   r7   r5   is_setr   r#   r   )r   r   r   r;   r   r   r   r0   r   r   r   r6   b   s    

zBuilder._run_build)N)__name__
__module____qualname__r"   r   executorr3   r2   r5   r4   r   r   	coroutiner1   r
   r9   r   r+   r6   r   r   r   r   r      s"   





r   c                       sZ   e Zd Zd
 fdd	Zejejdd Zejejdd Z	ejejdd	 Z
  ZS )BuildHandlerNc                    s   t t| j|d || _d S )N)name)superrB   
initializebuilder)r   rF   rC   	__class__r   r   rE   s   s    zBuildHandler.initializec                 c   s    | j  V }| t| d S r   )rF   r1   Zfinishjsondumps)r   datar   r   r   getw   s    zBuildHandler.getc              
   c   s`   | j d z| j V  W n4 tyP } ztdt|W Y d }~n
d }~0 0 | d d S )NzCanceling build     )	r   ZwarningrF   r9   r7   r   	HTTPErrorr8   
set_statusr   r0   r   r   r   delete}   s    &zBuildHandler.deletec              
   c   s   | j d z| j V  W n4 tyP } ztdt|W Y d }~n
d }~0 0 | jjrftdd| j d | 	d d S )NzStarting buildrM   i  zBuild canceledzBuild succeeded   )
r   debugrF   r
   r7   r   rO   r8   r3   rP   rQ   r   r   r   post   s    &zBuildHandler.post)NN)r=   r>   r?   rE   r   Zauthenticatedr   rA   rL   rR   rU   __classcell__r   r   rG   r   rB   q   s   rB   z/lab/api/build)__doc__concurrent.futuresr   rI   	threadingr   Zjupyter_server.base.handlersr   Z jupyter_server.extension.handlerr   Ztornador   r   Ztornado.concurrentr   Zcommandsr
   r   r   r   r   Z
coreconfigr   objectr   rB   Z
build_pathr   r   r   r   <module>   s   _'