o
    tf%                     @   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   j/var/www/html/software/conda/envs/catlas/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)NZ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 progressFTZAborted)
_cancelingr+   r    canceledr   Future_futurer   _kill_event
_run_buildr   r   r   r   
set_result	Exceptionstrset_exception)r   msgfutureZ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+   r/   r2   r0   )r   r9   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   r6   r3   is_setr   r"   r   )r   r   r   r>   r   r   r   r   r   r   r4   i   s    

zBuilder._run_buildr   )__name__
__module____qualname__r    r   executorr0   r/   r3   r2   r   r   	coroutiner.   r   r<   r   r)   r4   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   rI   rF   	__class__r   r   rH   }   s   
zBuildHandler.initializec                 c   s"    | j  V }| t| d S r   )rI   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"   rI   r<   r6   r   	HTTPErrorr7   
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 buildrQ   i  zBuild canceledzBuild succeeded   )
r   debugrI   r   r6   r   rS   r7   r0   rT   rU   r   r   r   post   s   zBuildHandler.post)NN)r@   rA   rB   rH   r   authenticatedr   rD   rP   rV   rY   __classcell__r   r   rJ   r   rE   |   s    rE   z/lab/api/build)__doc__rM   concurrent.futuresr   	threadingr   Zjupyter_server.base.handlersr   Z jupyter_server.extension.handlerr   tornador   r   Ztornado.concurrentr   Zjupyterlab.commandsr	   r
   r   r   r   r   rE   Z
build_pathr   r   r   r   <module>   s    k&