o
    i%                     @   s   d 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	 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 G d
d dZG dd de	eZdZdS )z-Tornado handlers for frontend config storage.    N)ThreadPoolExecutor)Event)
APIHandler)ExtensionHandlerMixin)genweb)run_on_executor)
AppOptions_ensure_optionsbuildbuild_checkcleanc                   @   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   \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyterlab/handlers/build_handler.py__init__   s   zBuilder.__init__c                 #   s     j rtddd jrtdddz-  j j j jV }|r)dnd}|r= j	d  fdd|D  n j
d	 W n tyW    j	d
 d}g }Y nw t|d|d)Nstable )statusmessagebuildingneededzBuild recommendedc                    s   g | ]} j |qS r   )r   warning).0mr   r   r   
<listcomp>/   s    z&Builder.get_status.<locals>.<listcomp>zBuild is up to datez:Could not determine jupyterlab build status without nodejs
)r   r   Returnr!   _run_build_checkr   r   r   r   r#   info
ValueErrorjoin)r   messagesr   r   r&   r   
get_status!   s*   zBuilder.get_statusc              
   c   s    | j r
d}t|| jscd| _t  | _}d| _t  | _}z>z| 	| j
| j|| j| jV  |d W n# tyY } zt|dkrJ|d n|| W Y d }~nd }~ww W d| _nd| _w z| jV  W d S  tyx } z|d }~ww )NzCancel in progressFTAborted)
_cancelingr,   r!   canceledr   Future_futurer   _kill_event
_run_buildr   r   r   r   
set_result	Exceptionstrset_exception)r   msgfutureevter   r   r   r   9   s8   
zBuilder.buildc                 c   s2    | j s
d}t|d| _| jV  d| _d| _d S )NzNo current buildTF)r!   r,   r1   r4   r2   )r   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   sb   t |||||d}zt|dW S  ty0   | j rY d S | jd t|d t|d Y S w )N)r   r   
kill_eventr   r   r@   z)Build failed, running a clean and rebuild)r	   r   r8   r5   is_setr   r#   r   )r   r   r   rA   r   r   r   r   r   r   r6   i   s    

zBuilder._run_buildr   )__name__
__module____qualname__r!   r   executorr2   r1   r5   r4   r   r   	coroutiner/   r   r?   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  j|d || _d S )N)name)super
initializebuilder)r   rL   rI   	__class__r   r   rK   }   s   
zBuildHandler.initializec                 c   s"    | j  V }| t| d S r   )rL   r/   finishjsondumps)r   datar   r   r   get   s   zBuildHandler.getc              
   c   sX    | j d z| j V  W n ty$ } z	tdt|d d }~ww | d d S )NzCanceling build     )	r   r#   rL   r?   r8   r   	HTTPErrorr9   
set_statusr   r>   r   r   r   delete   s   zBuildHandler.deletec              
   c   sx    | j d z| j V  W n ty$ } z	tdt|d d }~ww | jjr/tdd| j d | 	d d S )NzStarting buildrT   i  zBuild canceledzBuild succeeded   )
r   debugrL   r   r8   r   rV   r9   r2   rW   rX   r   r   r   post   s   zBuildHandler.post)NN)rC   rD   rE   rK   r   authenticatedr   rG   rS   rY   r\   __classcell__r   r   rM   r   rH   |   s    rH   z/lab/api/build)__doc__rP   concurrent.futuresr   	threadingr   jupyter_server.base.handlersr    jupyter_server.extension.handlerr   tornador   r   tornado.concurrentr   jupyterlab.commandsr	   r
   r   r   r   r   rH   
build_pathr   r   r   r   <module>   s    k&