
    YHh                    v   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
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 d d
lmZ d dlmZ er
d dlZd dlmZ  ed      Zedz  Zedz  Zedz  Z  e
e      jB                  dz  Z"	 	 	 	 	 	 	 	 	 	 ddZ#ddZ$ddZ%ddZ&ddZ'ddZ(d dZ)e G d d             Z*y)!    )annotationsN)	AwaitableSequence)	dataclass)PathPurePosixPath)TYPE_CHECKINGAnycast)__file__)html)REACTPY_WEB_MODULES_DIR)VdomDict)vdom_to_html)ASGIApplicationz	/_reactpymodulesassetsstream_staticc                :  K   ddl } |j                   |j                  | ||d            }|j                  j	                          |j                         g}|r|j                  t        ||             	 t        j                  |  d{    t        |d      sg |_        t        j                  |j                         d       d{    y7 E7 # t        |d      sg |_        t        j                  |j                         d       d{  7   w xY ww)z0Run a development server for an ASGI applicationr   Nasyncio)hostportloopservers   )timeout)uvicornServerConfigconfigsetup_event_loopserveappend_check_if_startedr   gatherhasattrr   wait_forshutdown)appr   r   startedr   servercoross          P/var/www/html/planif/env/lib/python3.12/site-packages/reactpy/backend/_common.pyserve_with_uvicornr/      s      W^^		
F MM""$#)<<>"2E &vw78=nne$$$
 vy)FNv0!<<< 	% 	= vy)FNv0!<<<sN   A3D6C CC ;DCDC D<DDDDc                   K   | j                   s*t        j                  d       d {    | j                   s*|j                          y 7 "w)Ng?)r+   r   sleepset)r,   r+   s     r.   r%   r%   >   s6     nnmmC    nnKKM 	!s   %AA
AAc                L    t        t        g| dv rdn| j                  d       S )z6Prevent path traversal out of :data:`CLIENT_BUILD_DIR`>    /
index.htmlr5   )traversal_safe_pathCLIENT_BUILD_DIRsplitpaths    r.   safe_client_build_dir_pathr<   D   s.    ,0I,=L4NNsS     c                T    t        t        j                  g| j                  d       S )zLPrevent path traversal out of :data:`reactpy.config.REACTPY_WEB_MODULES_DIR`r5   )r7   r   currentr9   r:   s    r.   safe_web_modules_dir_pathr@   K   s!    6>>QCQQr=   c                2   t         j                  j                  |       } t         j                  j                  t        j                  j                  | g|       }t         j                  j	                  | |g      | k7  rd}t        |      t        |      S )zLRaise a ``ValueError`` if the ``unsafe`` path resolves outside the root dir.zUnsafe path)osr;   abspathjoincommonprefix
ValueErrorr   )rootunsafer;   msgs       r.   r7   r7   P   sn    77??4 D 77??277<<6v67D	wwT4L)T1o:r=   CommonOptionsc                v    t         dz  j                         j                  t        | j                              S )Nr6   )__head__)r8   	read_textformatvdom_head_elements_to_htmlhead)optionss    r.   read_client_index_htmlrR   `   s,    	L	(		3GLLA	Br=   c                    t        | t              r| S t        | t              r5| j                  d      dk(  rt	        t
        i | ddi      } t        |       S t        t        j                  |        S )NtagNamerP   r4   )	
isinstancestrdictgetr   r   r   r   _)rP   s    r.   rO   rO   h   sc    $	D$	88I&("9T"99b"9:DD!!DFFDM**r=   c                      e Zd ZU dZ ej
                  d       ej                  dddd      fZded<   	 d	Z	d
ed<   	 dZ
ded<   	 ddZy)rJ   z<Options for ReactPy's built-in backed server implementationsReactPyiconz!/_reactpy/assets/reactpy-logo.icozimage/x-icon)relhreftype#Sequence[VdomDict] | VdomDict | strrP   r4   rV   
url_prefixTboolserve_index_routec                n    | j                   r)| j                   j                  d      sd}t        |      y y )Nr5   z'Expected 'url_prefix' to start with '/')ra   
startswithrF   )selfrI   s     r.   __post_init__zCommonOptions.__post_init__   s1    ??4??#=#=c#B;CS/! $C?r=   N)returnNone)__name__
__module____qualname____doc__r   titlelinkrP   __annotations__ra   rc   rg    r=   r.   rJ   rJ   s   sg    F 	

9		;&	
	1D
- 	 JD"t"B"r=   )
r*   zASGIApplication | Anyr   rV   r   intr+   zasyncio.Event | Nonerh   ri   )r,   zuvicorn.Serverr+   zasyncio.Eventrh   ri   )r;   rV   rh   r   )rG   
str | PathrH   rs   rh   r   )rQ   rJ   rh   rV   )rP   r`   rh   rV   )+
__future__r   r   rB   collections.abcr   r   dataclassesr   pathlibr   r   typingr	   r
   r   reactpyr   _reactpy_file_pathr   reactpy.configr   reactpy.core.typesr   reactpy.utilsr   r   asgiref.typingr   PATH_PREFIXMODULES_PATHASSETS_PATHSTREAM_PATHparentr8   r/   r%   r<   r@   r7   rR   rO   rJ   rq   r=   r.   <module>r      s    "  	 / ! ' + + 2  2 ' &.K(Y&H$H$*+22Y>  =	 =
 =  = "	 =
 
 =FR
 + " " "r=   