
    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 d dlmZ d dlmZ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mZ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-m.Z.m/Z/m0Z0 d dl1m2Z2  ejf                  e4      Z5e G d de             Z6	 d	 	 	 	 	 	 	 d dZ7d!dZ8	 d	 	 	 	 	 	 	 	 	 d"dZ9d#dZ:d$dZ;d%dZ(	 	 	 	 	 	 	 	 d&dZ<	 	 	 	 	 	 	 	 d'dZ=	 	 	 	 d(dZ>e G d d             Z?y))    )annotationsN)	dataclass)Any)parse)uuid4)	BlueprintSanicrequestresponse)Config)WebSocketConnection)CORS)	ASSETS_PATHMODULES_PATHPATH_PREFIXSTREAM_PATHCommonOptionsread_client_index_htmlsafe_client_build_dir_pathsafe_web_modules_dir_pathserve_with_uvicorn)
ConnectionLocation)ConnectionContext)use_connection)Layout)RecvCoroutineSendCoroutineStopserve_layout)RootComponentConstructorc                       e Zd ZU dZdZded<   y)Optionsz@Render server config for :func:`reactpy.backend.sanic.configure`Fzbool | dict[str, Any]corsN)__name__
__module____qualname____doc__r$   __annotations__     N/var/www/html/planif/env/lib/python3.12/site-packages/reactpy/backend/sanic.pyr#   r#   &   s    J"'D
'r+   r#   c                   |xs
 t               }t        dt        |        |j                        }t        dt        |        t	        t
                    }t        |||       t        |||       | j                  ||g       y)z@Configure an application instance to display the given componentreactpy_spa_)
url_prefixreactpy_api_N)	r#   r   idr/   strr   _setup_common_routes#_setup_single_view_dispatcher_route	blueprint)app	componentoptionsspa_bpapi_bps        r,   	configurer;   2   sr     "GbgY/G<N<NOFbgY/C<LMF1'	7CMM66"#r+   c                     dt         _        t        j                  d       t        dt	               j
                   t                     S )z1Return a :class:`Sanic` app instance in test modeTzSanic.test_mode is now activereactpy_development_app_)r	   	test_modeloggerwarningr   hexr   r*   r+   r,   create_development_apprB   D   s3    EO
NN23+EGKK=968DDr+   c                <   K   t        | |||       d{    y7 w)z)Run a development server for :mod:`sanic`N)r   )r6   hostportstarteds       r,   serve_development_apprG   L   s      S$g
666s   c                 >    t               j                  j                  S )zGet the current ``Request``)r   carrierr
   r*   r+   r,   use_requestrJ   V   s    ##+++r+   c                 >    t               j                  j                  S )zGet the current websocket)r   rI   	websocketr*   r+   r,   use_websocketrM   [   s    ##---r+   c                     t               } t        | j                  t              sd| j                   d}t	        |      | S )z#Get the current :class:`Connection`z"Connection has unexpected carrier z&. Are you running with a Sanic server?)_use_connection
isinstancerI   _SanicCarrier	TypeError)connmsgs     r,   r   r   `   s:    DdllM224<<.@fgnKr+   c                   |j                   }|r t        |t              r|ni }t        | fi | t	        |      	 d
	 	 	 	 	 dfd}|j
                  r(|j                  |dd       |j                  |dd       	 d
	 	 	 	 	 dd}| j                  |dt        j                   d       	 d
	 	 	 	 	 	 	 dd	}| j                  |dt        j                   d       y )Nc                6   K   t        j                        S wN)r   html)r
   _
index_htmls     r,   single_page_app_filesz3_setup_common_routes.<locals>.single_page_app_filesu   s      }}Z((s   /single_page_app_files_rootnamez	/<_:path>single_page_app_files_pathc                   K   t        j                  |      }t        j                  t	        d|              d {   S 7 w)Nzassets/)urllib_parseunquoter   filer   )r
   paths     r,   asset_filesz)_setup_common_routes.<locals>.asset_files   s:      ##D)]]#=v>N#OPPPPs   :AAAz/<path:path>c                   K   t        j                  |      }t        j                  t	        |      d       d {   S 7 w)Nztext/javascript)	mime_type)rb   rc   r   rd   r   )r
   re   rY   s      r,   web_module_filesz._setup_common_routes.<locals>.web_module_files   s>     
 ##D)]]%d+'
 
 	
 
s   9AA A )r
   request.Request[Any, Any]rY   r2   returnresponse.HTTPResponse)r
   rl   re   r2   rm   rn   )r
   rl   re   r2   rY   r2   rm   rn   )
r$   rP   dictr   r   serve_index_route	add_router   r_   r   )	api_blueprintspa_blueprintr8   cors_optionscors_paramsr[   rf   ri   rZ   s	           @r,   r3   r3   i   s<   
 <<L&0t&Dl"]*k*'0J )*)) 
)   !- 	  	

 	!- 	  	
 Q*QQ 
Q K1[-=-=,>l)KL
 	
*	
	
 	
 
		
 ,,2C2C1DL.QRr+   c                    	 d	 	 	 	 	 	 	 dfd}| j                  |dt        j                   d       | j                  |dt        j                   dd       y )	Nc                  K   t        | j                  dd       }|r|j                  j                  ni }|st        j                  d       t        |      \  }}t        t        t                t        |t        d|t        j                        d   | j                  rd| j                   nd      t        | |                        ||       d {    y 7 w)	N	_asgi_appz6No scope. Sanic may not be running with an ASGI serverr\   ?rk   )pathnamesearch)scopelocationrI   )value)getattrr6   	transportr|   r?   r@   _make_send_recv_callbacksr    r   r   r   r   lenr/   query_stringrQ   )	r
   socketre   asgi_appr|   sendrecvconstructorr8   s	          r,   model_streamz9_setup_single_view_dispatcher_route.<locals>.model_stream   s     
 7;;T:,4""(("NNST.v6
d!M$#!)'(c'2D2D.E.F)G(H%I $+#7#7 #$G$8$8#9 :%'" !.gv >" '
 	
 	
s   CC CC r\   model_stream_rootr^   z/<path:path>/model_stream_pathrj   )r
   rl   r   r   re   r2   rm   None)add_websocket_router   r_   )rr   r   r8   r   s    `` r,   r4   r4      s     
*
#
 
 
	
B %%
K  & 
 %%
K]+  & r+   c                $     d fd}d fd}||fS )Nc                j   K   j                  t        j                  |              d {    y 7 wrW   )r   jsondumps)r~   r   s    r,   	sock_sendz,_make_send_recv_callbacks.<locals>.sock_send   s"     kk$**U+,,,s   (313c                    K   j                          d {   } | 
t               t        j                  |       S 7 %wrW   )r   r   r   loads)datar   s    r,   	sock_recvz,_make_send_recv_callbacks.<locals>.sock_recv   s5     [[]"<&Lzz$ #s   ?=&?)r~   r   rm   r   )rm   r   r*   )r   r   r   s   `  r,   r   r      s    -  ir+   c                  (    e Zd ZU dZded<   	 ded<   y)rQ   z3A simple wrapper for holding connection informationz%request.Request[Sanic[Any, Any], Any]r
   r   rL   N)r%   r&   r'   r(   r)   r*   r+   r,   rQ   rQ      s    =22$""+r+   rQ   rW   )r6   Sanic[Any, Any]r7   r!   r8   zOptions | Nonerm   r   )rm   r   )
r6   r   rD   r2   rE   intrF   zasyncio.Event | Nonerm   r   )rm   rl   )rm   r   )rm   zConnection[_SanicCarrier])rr   r   rs   r   r8   r#   rm   r   )rr   r   r   r!   r8   r#   rm   r   )r   r   rm   z#tuple[SendCoroutine, RecvCoroutine])@
__future__r   asyncior   loggingdataclassesr   typingr   urllibr   rb   uuidr   sanicr   r	   r
   r   sanic.configr   "sanic.server.websockets.connectionr   
sanic_corsr   reactpy.backend._commonr   r   r   r   r   r   r   r   r   reactpy.backend.typesr   r   reactpy.core.hooksr   r   rO   reactpy.core.layoutr   reactpy.core.server   r   r   r    reactpy.core.typesr!   	getLoggerr%   r?   r#   r;   rB   rG   rJ   rM   r3   r4   r   rQ   r*   r+   r,   <module>r      s   "    !  (  5 5  B 
 
 
 7 0 @ & O O 7			8	$ m   #$	$'$ $ 
	$$E %)	7	7
7 7 "	7
 
7,
.
2S2S2S 2S 
	2Sj//)/ / 
	/d  (  , , ,r+   