o
    ;i
                     @   s  U d dl Z d dlZd dl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	 d dl
mZmZmZmZmZmZ e ejddZeee	f ed< e Zejededd	d
ZedrkejedddZedrzejedddndZerdeini ZdedefddZ ej!eededededde"de #eigeerdndddefddZ$e% dd  Z&dS )!    N)Any)AppImageQueueSecretVolumeforwardMODAL_LAUNCH_ARGSz{}argsimage
add_python)r   
jupyterlabmountz/root/lab/mount)remote_pathvolumeT)create_if_missingz/root/lab/volumeurlqc              
   C   s   t  }	 ztjddd
 	 W d    W n/1 sw   Y  W n$ tyD } zt d t  | dkr:td|W Y d }~nd }~ww q||  d S )NT)	localhost"  g      >@)timeoutg{Gz?z3Waited too long for port 8888 to accept connections)time	monotonicsocketcreate_connectionOSErrorsleepTimeoutErrorput)r   r   
start_timeexc r!   R/home/ubuntu/.local/lib/python3.10/site-packages/modal/cli/programs/run_jupyter.pywait_for_port'   s   $

r#   cpumemorygpur   i     )r   r$   r%   r&   r   secretsvolumesmax_containersc                 C   s   t jddd td}td9}|jd | }tjt|| fd	  t
d t
d	| d
 tjg di t j|ddtjd W d    n1 sLw   Y  | d d S )Nz	/root/labT)exist_ok   r   z/?token=)targetr
   z(
Jupyter on Modal, opening in browser...z   -> 
)	jupyterlabz--no-browserz--allow-rootz--ip=0.0.0.0z--port=8888z--notebook-dir=/root/labz--LabApp.allow_origin='*'z--LabApp.allow_remote_access=1z	/bin/bash)JUPYTER_TOKENSHELL)envstderrdone)osmakedirsr(   token_urlsafer   r   	threadingThreadr#   startprint
subprocessrunenvironDEVNULLr   )r   tokentunnelr   r!   r!   r"   run_jupyter4   s   

rC   c                  C   sd   t  $} t|  |  }td t| |  dks J W d    d S 1 s+w   Y  d S )Nr'   r5   )	r   	ephemeralrC   spawngetr   r   
webbrowseropen)r   r   r!   r!   r"   mainX   s   



"rI   )'jsonr6   r(   r   r=   r9   r   rG   typingr   modalr   r   r   r   r   r   loadsr?   rF   r
   dictstr__annotations__appfrom_registrypip_installr   add_local_dir	from_namer   r)   r#   function	from_dictdumpsrC   local_entrypointrI   r!   r!   r!   r"   <module>   sP   
 $ 




