
    YHh                       d dl m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
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mZ d dlmZmZmZmZm Z m!Z!m"Z" d dl#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/m0Z0m1Z1 d dl2m3Z3  ejh                  e5      Z6e G d de              Z7	 d 	 	 	 	 	 	 	 d!dZ8d"dZ9	 d 	 	 	 	 	 	 	 	 	 d#dZ:d$dZ;d%dZ*d&dZ<d'dZ=	 	 	 	 	 	 	 	 d(dZ>	 	 	 	 d)dZ?y)*    )annotationsN)	Awaitable)	dataclass)AnyCallable)BaseExceptionGroup	Starlette)CORSMiddleware)RequestHTMLResponse)StaticFiles)	WebSocketWebSocketDisconnect)ASSETS_PATHCLIENT_BUILD_DIRMODULES_PATHSTREAM_PATHCommonOptionsread_client_index_htmlserve_with_uvicorn)
ConnectionLocation)REACTPY_WEB_MODULES_DIR)ConnectionContext)use_connection)Layout)RecvCoroutineSendCoroutineserve_layout)RootComponentConstructorc                       e Zd ZU dZdZded<   y)OptionszDRender server config for :func:`reactpy.backend.starlette.configure`Fzbool | dict[str, Any]corsN)__name__
__module____qualname____doc__r%   __annotations__     R/var/www/html/planif/env/lib/python3.12/site-packages/reactpy/backend/starlette.pyr$   r$   '   s    N"'D
'r,   r$   c                R    |xs
 t               }t        || |       t        ||        y)zConfigure the necessary ReactPy routes on the given app.

    Parameters:
        app: An application instance
        component: A component constructor
        options: Options for configuring server behavior
    N)r$   #_setup_single_view_dispatcher_route_setup_common_routes)app	componentoptionss      r-   	configurer4   3   s(     "G (i@#&r,   c                     t        d      S )z6Return a :class:`Starlette` app instance in debug modeT)debugr	   r+   r,   r-   create_development_appr7   H   s    4  r,   c                <   K   t        | |||       d{    y7 w)z&Run a development server for starletteN)r   )r1   hostportstarteds       r-   serve_development_appr<   N   s      S$g
666s   c                 *    t               j                  S )z Get the current WebSocket object)r   carrierr+   r,   r-   use_websocketr?   X   s    ###r,   c                     t               } t        | j                  t              sd| j                   d}t	        |      | S )Nz"Connection has unexpected carrier z&. Are you running with a Flask server?)_use_connection
isinstancer>   r   	TypeError)connmsgs     r-   r   r   ]   s:    DdllI.24<<.@fgnKr,   c                   | j                   }|r.t        |t              r|nddgi} |j                  t        fi | | j
                  }|j                  t        t              t        t        j                  d             |j                  t        t              t        t        dz  d             t        |       }| j                  r+|j!                  | d|       |j!                  |dz   |       y y )Nallow_origins*F)	directory	check_dirassets//{path:path})r%   rB   dictadd_middlewarer   
url_prefixmountstrr   r   r   currentr   r   _make_index_routeserve_index_route	add_route)r3   r1   cors_optionscors_paramsrP   index_routes         r-   r0   r0   e   s    <<L&|T:LSVRW@X 	 	>9[9 ##JIIL5==O IIK.9UK
 $G,K  A&4j>1;? !r,   c                *    t        |       dfd}|S )Nc                "   K   t              S wNr   )request
index_htmls    r-   serve_indexz&_make_index_route.<locals>.serve_index   s     J''s   )r]   r   returnr   )r   )r3   r_   r^   s     @r-   rT   rT      s    '0J( r,   c                     d fd}|j                  t        t              |       |j                  t         d|       y )Nc                |  K   | j                          d {    t        |       \  }}d| j                  d   j                  dd      z   }|t	        j
                        d  xs d}| j                  d   j                         }	 t        t        t                t        | j                  t        ||rd| nd      |                   ||       d {    y 7 7 # t        $ rP}|j                  D ]6  }t        |t              st         j#                  d	|j$                           n  Y d }~y d }~ww xY ww)
NrL   path_paramspath query_string?)scopelocationr>   )valuezWebSocket disconnect: )accept_make_send_recv_callbacksrh   getlenrP   decoder!   r   r   r   r   r   
exceptionsrB   r   loggerinfocode)	socketsendrecvpathnamesearchegrouper2   r3   s	          r-   model_streamz9_setup_single_view_dispatcher_route.<locals>.model_stream   s4    mmo.v6
dm488DDC 2 2356=#n-446	%!("(,,%-h!F8TV%W$*	    	 " 	&& a!45KK"8 AB
  		sS   D<CA-D<AC  CC  D<C   	D9)D4	&D4/D<4D99D<rM   )rt   r   r`   None)add_websocket_routerR   r   )r3   r1   r2   r{   s   ` ` r-   r/   r/      s6    > C,l;{m>:LIr,   c                $     d fd}d fd}||fS )Nc                j   K   j                  t        j                  |              d {    y 7 wr\   )	send_textjsondumps)rj   rt   s    r-   	sock_sendz,_make_send_recv_callbacks.<locals>.sock_send   s$     tzz%0111s   (313c                 f   K   t        j                   j                          d {         S 7 wr\   )r   loadsreceive_text)rt   s   r-   	sock_recvz,_make_send_recv_callbacks.<locals>.sock_recv   s%     zz 3 3 55665s   #1/	1)rj   r   r`   r|   )r`   r   r+   )rt   r   r   s   `  r-   rl   rl      s    27 ir,   r\   )r1   r
   r2   r"   r3   zOptions | Noner`   r|   )r`   r
   )
r1   r
   r9   rR   r:   intr;   zasyncio.Event | Noner`   r|   )r`   r   )r`   zConnection[WebSocket])r3   r$   r1   r
   r`   r|   )r3   r$   r`   z,Callable[[Request], Awaitable[HTMLResponse]])r3   r$   r1   r
   r2   r"   r`   r|   )rt   r   r`   z#tuple[SendCoroutine, RecvCoroutine])@
__future__r   asyncior   loggingcollections.abcr   dataclassesr   typingr   r   exceptiongroupr   starlette.applicationsr
   starlette.middleware.corsr   starlette.requestsr   starlette.responsesr   starlette.staticfilesr   starlette.websocketsr   r   reactpy.backend._commonr   r   r   r   r   r   r   reactpy.backend.typesr   r   reactpy.configr   reactpy.core.hooksr   r   rA   reactpy.core.layoutr   reactpy.core.server   r    r!   reactpy.core.typesr"   	getLoggerr&   rq   r$   r4   r7   r<   r?   r0   rT   r/   rl   r+   r,   r-   <module>r      sE   "    % !   - , 4 & , - ?   7 2 0 @ & I I 7			8	$ m   #'	''' ' 
	'*! %)	7	7
7 7 "	7
 
7$
@8#J#J$#J1I#J	#JL	 	 (	 r,   