o
    ;iA                     @   s  d dl 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 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 ddlmZmZ ddlmZm Z  e	rhd dl!Z"dede#dede#de$f
ddZ%dddede#de#de&def
ddZ'd+de
e de&fddZ(ded e#d!ee)e# df de#fd"d#Z*eddd$d%d&ded'e
ee)e# df  de
e# ded( f
d)d*Z+ee+Z,dS ),    N)AsyncGenerator)SpawnProcess)Event)TYPE_CHECKINGOptional)asynccontextmanager   )TaskContextasyncifysynchronize_api)logger)watch)	ImportRefimport_app_from_ref)_Client)config)OutputManagerenable_output)_run_appserve_update
import_refexisting_app_idis_readyenvironment_nameshow_progressc                 C   sR   t | dd}t }||  t|||| W d    d S 1 s"w   Y  d S )Nzmodal serve)base_cmd)r   r   set_quiet_moder   )r   r   r   r   r   app
output_mgr r   A/home/ubuntu/.local/lib/python3.10/site-packages/modal/serving.py
_run_serve   s
   "r!         @)timeoutr#   returnc                   sV   t d}| }t j}|jt| ||||fd}|  t	|j
|I d H  |S )Nspawn)targetargs)multiprocessingget_contextr   r   get
is_enabledProcessr!   startr
   wait)r   r   r   r#   ctxr   r   pr   r   r    _restart_serve"   s   

r1   procc                    s   | d u rd S t  }z4|   t| j|I d H  | jd ur,|d| j d W d S |d| j d| d |   W d S  t	yI   Y d S w )NzServe process z terminatedz[red]Serve process z didn't terminate after zs, killing it[/red])
r   r*   	terminater
   joinexitcodeprintpidkillProcessLookupError)r2   r#   r   r   r   r    
_terminate0   s   
r:   app_idwatcherc          	         s   d }t  dkrd}	 t }|r#|2 z3 d H W }|| q6 d S d }z0|2 z"3 d H W }tdd|  t|I d H  t	| ||dI d H }q(6 W t|I d H  d S t|I d H  w )NWindowszELive-reload skipped. This feature is currently unsupported on Windowsz-The following files triggered an app update: z, )r   r   )
platformsystemr   r*   r6   r   debugr4   r:   r1   )	r   r;   r<   r   unsupported_msgr   _	curr_proctrigger_filesr   r   r    _run_watch_loop@   s$   "rE   )_watcherr   r   modal.app._ApprF   )rG   Nc             
   C  s   |d u r
t d}t I d H }t| ||d4 I d H I |d ur$|}n|  }t|}tdd4 I d H }|t	|| j
||d | V  W d   I d H  n1 I d H sUw   Y  W d   I d H  d S 1 I d H skw   Y  d S )Nenvironment)clientr   g?)grace)r;   r<   r   )r   r*   r   from_envr   _get_watch_mountsr   r	   create_taskrE   r;   )r   r   rF   r   rI   r<   mounts_to_watchtcr   r   r    
_serve_app[   s    
*.rP   )r"   )-r(   r>   collections.abcr   multiprocessing.contextr   multiprocessing.synchronizer   typingr   r   synchronicity.async_wrapr   _utils.async_utilsr	   r
   r   _utils.loggerr   rF   r   cli.import_refsr   r   rI   r   r   outputr   r   runnerr   r   	modal.appmodalstrboolr!   floatr1   r:   setrE   rP   	serve_appr   r   r   r    <module>   s   


