o
    i#                     @   s  d Z ddlZ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
 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 ddlmZ ddlmZ ddlmZ ddlmZ e  ejdded ddlmZ W d   n1 syw   Y  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" 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' 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. dd$l/m0Z0 dd%l1m2Z2 d&d'l3m4Z4 d&d(l3m5Z5 d&d)l3m6Z6 d&d*l3m7Z7 d&d+l3m8Z8 d&d,l3m9Z9 d&d-l3m:Z: d&d.l3m;Z; d&d/l3m<Z< d&d0l3m=Z= d&d1l3m>Z> d&d2l3m?Z? d&d3l3m@Z@ d&d4l3mAZA d&d5l3mBZB d&d6l3mCZC d&d7l3mDZD d&d8l3mEZE G d9d: d:eZFG d;d< d<ZGd=efd>d?ZHd@e&fdAdBZIdCe$fdDdEZJdFeKfdGdHZLdS )I
    N)Path)Queue)Any)Callable)
NamedTuple)assert_type)Never)uuid4)	APIRouter)FastAPI)HTTPException)Config)Serverignoreztorch.distributed)messagecategory   )codefind)CodeFile)CodeFileOperation)AddOperation)UpdateOperation)DeleteOperation)ExceptionOperation)Extent)LineDefinition)GroupDefinition)
ModuleCode)ClassDefinition)FunctionDefinition)EventSource)Registry)glob_filter)EventSourceResponse)create_thread   )ApiCreateReloadRequest)ApiCreateReloadResponse)ApiCreateReloadResponseError)ApiCreateReloadResponseSuccess)ApiGetReloadRequest)ApiGetReloadEventSourceData)ApiGetStatusRequest)ApiGetStatusResponse)ApiFetchContentsRequest)ApiFetchContentsResponse)ApiFetchContentsResponseError)ApiFetchContentsResponseSuccess)ReloadRegion)ReloadOperationError)ReloadOperationException)ReloadOperationObject)ReloadOperationRun)ReloadOperationUIc                   @   s    e Zd ZU eed< ejed< dS )	ReloadRunactivitythreadN)__name__
__module____qualname__r!   __annotations__	threadingThread rB   rB   K/home/ubuntu/.local/lib/python3.10/site-packages/spaces/reloading/server.pyr9   ?   s   
 r9   c                   @   s   e Zd Zdeg ef deg ef dejfddZde	de
fdd	Zdedefd
dZdefddZdedefddZdefddZdefddZdefddZdS )ReloadServerprerunpostrun
stop_eventc                 C   s   || _ || _|| _t | _i | _d | _t | _	| j	j
ddd dgd | j	j
d| jdgd | j	j
d| jdgd | j	j
d	| jdgd | j	j
d
| jdgd t | _| jjtdd d S )Nz/healthzc                   S   s   i S NrB   rB   rB   rB   rC   <lambda>R   s    z'ReloadServer.__init__.<locals>.<lambda>GET)methodsz/get-statusPOSTz/fetch-contentsz/create-reloadz/get-reloadz./*.py)filter)rE   rF   rG   r@   Lockcreate_lockreload_runsactive_reload_idr   routeradd_api_route
get_statusfetch_contentscreate_reload
get_reloadr"   registryauto_registerr#   )selfrE   rF   rG   rB   rB   rC   __init__E   s   
zReloadServer.__init__reqreturnc                 C   s   t )z"
        POST /get-status
        )NotImplementedError)rZ   r\   rB   rB   rC   rT   [   s   zReloadServer.get_statusc                 C   s`   t  |j  }|t  rt |j } s#tdd}t|dS td|	 d}t|dS )z&
        POST /fetch-contents
        fileNotFoundstatusresok)ra   contents)
r   cwdfilepathresolveis_relative_tois_filer1   r0   r2   	read_text)rZ   r\   rg   filerc   rB   rB   rC   rU   b   s    


zReloadServer.fetch_contentsc                 C   s   | j d ur
tddS t |j  }|t r&| jt	| }d u r+tddS t|j
|j tdd}||_t| j|}|jd u rLt	t n|j}t||| j|< || _ |  td|dS )NalreadyReloadingr`   r_   T)save_historycreated)ra   reloadId)rQ   r)   r   rf   rg   rh   ri   rX   getstr
write_textre   r!   r:   r%   
run_reloadrp   r
   r9   rP   startr*   )rZ   r\   rg   	code_filer:   r;   	reload_idrB   rB   rC   _create_reloadp   s   

&

zReloadServer._create_reloadc                 C   s:   | j  | |}W d   n1 sw   Y  t|dS )z%
        POST /create-reload
        Nrb   )rO   rx   r(   )rZ   r\   rc   rB   rB   rC   rV      s   
zReloadServer.create_reloadc                    sl   |j }| j|d }du rtdd|dt |jjjdd dtfdd	  fd
d}t| S )z"
        POST /get-reload
        Ni  z
reload_id=z
 not foundT)apply_historyqueuec                 s   sb    |    }d ur/t|tr|V  nt|tr%t| }d ur%t|dV  |    }d us	d S d S )Ndata)rq   
isinstancer,   r   serialize_code_operation)rz   itemoprB   rB   rC   activity_stream   s   

z0ReloadServer.get_reload.<locals>.activity_streamc                  3   s     D ]} |   V  qd S rH   )model_dump_jsonr{   r   rz   rB   rC   event_source_stream   s   z4ReloadServer.get_reload.<locals>.event_source_stream)	rp   rP   rq   r   r   r:   registerputr$   )rZ   r\   rw   runr   rB   r   rC   rW      s   
zReloadServer.get_reloadrv   c              
   C   s   d}z|    |  |  }W n' ty7 } zt|}td|d}t|d}|j| W Y d }~nd }~ww t	d|d}t|d}|j| |jd  d | _
d S )NFerror)kind	tracebackr{   ui)r   updated)rE   refreshrF   	Exceptionformat_tracebackr4   r,   r:   emitr8   rQ   )rZ   rv   r   exctbr   r|   rB   rB   rC   rt      s"   


zReloadServer.run_reloadportc                 C   sL   t  }|| j tt|d|dd}t|j}|  | j	  d|_
d S )Nz0.0.0.0warning)hostr   	log_levelT)r   include_routerrR   r   r   r%   r   ru   rG   waitshould_exit)rZ   r   appserverserver_threadrB   rB   rC   r      s   


zReloadServer.runN)r<   r=   r>   r   r   boolr@   Eventr[   r-   r.   rT   r/   r0   rU   r'   rx   r(   rV   r+   rW   r   rt   intr   rB   rB   rB   rC   rD   D   s    


rD   cf_operationc                 C   s   t | j }ttfsJ t|j}t | tr,| j }d u r!td}t	|}t
d||dS t |trZt|}| }t | trAd}nt | trPt |tsMd S d}nd}t||||dS t |trnt | trfd S td||jd	S t|t d S )
Nz#Unable to retrieve reload exception	exception)r   regionr   addupdatedelete)r   r   
objectType
objectNamer   )r   r   	codeLines)r}   defnr   r   serialize_extentstashedr   r   r   r   r5   get_object_typedotpathr   r   r    r6   r   r7   textr   r	   )r   r   r   r   r   otypeonamer   rB   rB   rC   r~      s.   







r~   r   c                 C   s.   t | trdS t | trdS t | trdS dS )Nclassmodulefunctionunknown)r}   r   r   r    )r   rB   rB   rC   r      s   


r   extentc                 C   s   t | j| j| j| jdS )N)	startLinestartColendLineendCol)r3   lineno
col_offset
end_linenoend_col_offset)r   rB   rB   rC   r      s   r   r   c                 C   s   t t| | | j}d|S )N )r   format_exceptiontype__traceback__join)r   tracesrB   rB   rC   r      s   
r   )M__doc__r   r@   warningspathlibr   rz   r   typingr   r   r   typing_extensionsr   r	   uuidr
   fastapir   r   r   uvicornr   r   catch_warningsfilterwarningsFutureWarning_vendorr   _vendor.jurigged.codetoolsr   r   r   r   r   r   r   r   r   r   r   r    _vendor.jurigged.registerr!   r"   _vendor.jurigged.utilsr#   _vendor.sse_starletter$   utilsr%   typesr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   rD   r~   r   r   r   r   rB   rB   rB   rC   <module>   s~    
 
	