
    /_iK                    (   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZ d dl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 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l0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB e
rd dlCZCd dlDmEZE d dlFmGZG  eeH      ZIdeJd<   dMdZKdNdZLdZMdeJd <   d!ZNdeJd"<   d#ZOdeJd$<   d%ZPdeJd&<   d'ZQdeJd(<   d)ZRdeJd*<   d+ZSdeJd,<   d-ZTdeJd.<   d/ZUdeJd0<   d1ZVdeJd2<   d3ZWdeJd4<   d5eW d6ZXdeJd7<   d8ZYdeJd9<   d:ZZdeJd;<   d<Z[deJd=<   d>Z\deJd?<   d@Z]deJdA<    G dB dCe^      Z_dOdDZ`dOdEZadPdFZbdQdGZcdRdHZddRdIZe G dJ dK      ZfdSdLZgy)T    )annotationsN)Path)TYPE_CHECKINGAnyFinal)
HTTPServer)cli_utilconfig	file_utilutil)is_authlib_installed)ConfigOption)
get_logger)RuntimeRuntimeConfigRuntimeState)MemoryMediaFileStorage)MemorySessionStorage)MemoryUploadedFileManager)get_max_message_size_bytes)$create_default_cache_storage_manager)AppStaticFileHandler)BidiComponentRequestHandler)BrowserWebSocketHandler)ComponentRequestHandler)MediaFileHandler)AddSlashHandlerHealthHandlerHostConfigHandlerRemoveSlashHandlerStaticFileHandler)get_cookie_secretis_tornado_version_less_thanis_xsrf_enabledmake_url_path_regex)StatsRequestHandler)UploadFileRequestHandler)	Awaitable)
SSLContextr   _LOGGERc                     t        j                  d      } | 6t        |       }t        d      s|dk  rt        j                  d||       ||fS t        d      rdnd}|dfS )zGet the websocket ping interval and timeout from config or defaults.

    Returns
    -------
        tuple: (ping_interval, ping_timeout)
    zserver.websocketPingIntervalz6.5.0   a  You have set server.websocketPingInterval to %s, but Tornado >= 6.5 requires websocket_ping_interval >= websocket_ping_timeout. To comply, we are setting both the ping interval and ping timeout to %s. Depending on the specific deployment setup, this may cause connection issues.   )r
   
get_optionintr#   r*   warning)configured_intervalintervaldefault_intervals      Z/var/www/html/land_sniper/venv/lib/python3.12/site-packages/streamlit/web/server/server.py(_get_websocket_ping_interval_and_timeoutr5   G   sz     !++,JK&*+ ,G4BOO`  !! 9AqrR    c                 *    t               \  } }d| |ddS )zqGet Tornado settings for the server.

    This is a function to allow for testing and dynamic configuration.
    T_streamlit_xsrf)compress_responsewebsocket_ping_intervalwebsocket_ping_timeoutxsrf_cookie_name)r5   )ping_intervalping_timeouts     r4   get_tornado_settingsr?   g   s.    
 #K"LM< " $1 #/- r6   d   MAX_PORT_SEARCH_RETRIESzunix://UNIX_SOCKET_PREFIXz/mediaMEDIA_ENDPOINTz
/componentCOMPONENT_ENDPOINTz/_stcore/bidi-componentsBIDI_COMPONENT_ENDPOINTz/app/staticSTATIC_SERVING_ENDPOINTz/_stcore/upload_fileUPLOAD_FILE_ENDPOINTz_stcore/streamSTREAM_ENDPOINTz(?:st-metrics|_stcore/metrics)METRIC_ENDPOINTz_stcore/messageMESSAGE_ENDPOINTz_stcore/healthNEW_HEALTH_ENDPOINTz(?:healthz|)HEALTH_ENDPOINTz_stcore/host-configHOST_CONFIG_ENDPOINTz3(?:script-health-check|_stcore/script-health-check)SCRIPT_HEALTH_CHECK_ENDPOINTz/oauth2callbackOAUTH2_CALLBACK_ENDPOINTz/auth/loginAUTH_LOGIN_ENDPOINTz/auth/logoutAUTH_LOGOUT_ENDPOINTc                      e Zd Zy)RetriesExceededErrorN)__name__
__module____qualname__ r6   r4   rT   rT      s    r6   rT   c                 ,    t        j                  d      S )Nserver.port)r
   is_manually_setrX   r6   r4   server_port_is_manually_setr\      s    !!-00r6   c                 b    t        j                  d      } | d uxr | j                  t              S )Nserver.address)r
   r.   
startswithrB   )addresss    r4   server_address_is_unix_socketra      s/     01G$I7#5#56H#IIr6   c                    t        j                  d      }t        j                  d      }t        ||      }t        | t        j                  d      dz  dz  |      }t	               rt        |       yt        |       y)zMakes the server start listening at the configured port.

    In case the port is already taken it tries listening to the next available
    port.  It will error after MAX_PORT_SEARCH_RETRIES attempts.

    zserver.sslCertFilezserver.sslKeyFilezserver.maxUploadSizei   )max_buffer_sizessl_optionsN)r
   r.   _get_ssl_optionsr   ra   start_listening_unix_socketstart_listening_tcp_socket)app	cert_filekey_filerd   http_servers        r4   start_listeningrl      ss     !!"67I  !45H"9h7K))*@ADH4OK %&#K0";/r6   c                   t        |       t        |      k7  r*t        j                  d       t        j                  d       | r|rt        |       j                         s+t        j                  d|        t        j                  d       t        |      j                         s+t        j                  d|       t        j                  d       dd l}|j                  |j                  j                        }	 |j                  | |       |S y # |j                  $ r0 t        j                  d| |       t        j                  d       Y |S w xY w)NzzOptions 'server.sslCertFile' and 'server.sslKeyFile' must be set together. Set missing options or delete existing options.r-   zCert file '%s' does not exist.zKey file '%s' does not exist.r   zWFailed to load SSL certificate. Make sure cert file '%s' and key file '%s' are correct.)boolr*   errorsysexitr   existssslcreate_default_contextPurposeCLIENT_AUTHload_cert_chainSSLError	exception)ri   rj   rs   ssl_ctxs       r4   re   re      s	   I$x.(O	
 	X I%%'MM:IFHHQKH~$$&MM98DHHQK,,S[[-D-DE		##Ix8  || 	@	 HHQK	s   8D ;EEc                n   t        j                  d      }t        j                  j	                  |t        t              d        }dd l}t        |j                  d      r-|j                  j                  |      }| j                  |       y t        j                  d       t        j                  d       y )Nr^   r   bind_unix_socketz@Unix socket support is not available in this version of Tornado.r-   )r
   r.   ospath
expanduserlenrB   tornado.netutilhasattrnetutilr|   
add_socketr*   ro   rp   rq   )rk   r`   	file_nametornadounix_sockets        r4   rf   rf      s     01G""73/A+B+D#EFIw 23oo66yA{+N	
 	r6   c                P   d}d }|t         k  r>t        j                  d      }t        j                  d      }	 | j                  ||       	 |t         k\  rt!        d| dt          d	      y # t        $ r}|j
                  t
        j                  k(  r|t               r,t        j                  d|       t        j                  d       nGt        j                  d|       |dz  }t        j                  d|t        j                         |dz  }n Y d }~nd }~ww xY w|t         k  r)
Nr   r^   rZ   zPort %s is already in user-   z3Port %s already in use, trying to use the next one.z$Cannot start Streamlit server. Port zG is already in use, and Streamlit was unable to find a free port after z
 attempts.)rA   r
   r.   listenOSErrorerrno
EADDRINUSEr\   r*   ro   rp   rq   debug
set_optionr   STREAMLIT_DEFINITIONrT   )rk   
call_countportr`   es        r4   rg   rg      s   JD
.
.##$45  /	tW-( ,,"24& 9>>U=VV`b
 	
 -%  	ww%***.0MM"=tDHHQKMMMt AID%%%t\-N-N !OJ!	 .
.s   A, ,	D5BDDc                      e Zd ZddZedd       ZddZedd       ZddZ	edd       Z
ddZedd       Zedd	       Zdd
Zy)Serverc                   t                | j                          || _        d| _        t	        t
              }t        j                  |       t        t              }t        t        |d||t               |t        t        j                  d                        | _        | j                   j"                  j%                  |       y)z+Create the server. It won't be started yet.Nzserver.disconnectedSessionTTL)ttl_seconds)script_pathcommand_linemedia_file_storageuploaded_file_managercache_storage_manageris_hellosession_storage)_set_tornado_log_levelsinitialize_mimetypes_main_script_path_bootstrap_taskr   rC   r   initialize_storager   rG   r   r   r   r   r
   r.   _runtime	stats_mgrregister_provider)selfmain_script_pathr   r   uploaded_file_mgrs        r4   __init__zServer.__init__  s    !!!#!1
 ;? 4NC++,>?56JK,!#5&7&J&L! 4 & 1 12Q R!

 	112DEr6   c                    t        j                  dd       t        j                  dd       t        j                  dd       t        j                  dd       t        j                  dd	       y
)zJEnsures that common mime-types are robust against system misconfiguration.z	text/htmlz.htmlzapplication/javascriptz.jsz.mjsztext/cssz.cssz
image/webpz.webpN)	mimetypesadd_type)clss    r4   r   zServer.initialize_mimetypes@  sV     	;03U;3V<:v.<1r6   c                ,    t        j                  |       S N)r   repr_r   s    r4   __repr__zServer.__repr__I  s    zz$r6   c                    | j                   S r   )r   r   s    r4   r   zServer.main_script_pathL  s    %%%r6   c                
  K   t         j                  d       | j                         }t        |       t	        j
                  d      }t         j                  d|       | j                  j                          d{    y7 w)zaStart the server.

        When this returns, Streamlit is ready to accept new sessions.
        zStarting server...rZ   zServer started on port %sN)r*   r   _create_apprl   r
   r.   r   start)r   rh   r   s      r4   r   zServer.startP  s`      	*+   /148mm!!###s   A9B;B<Bc                .    | j                   j                  S )z>A Future that completes when the Server's run loop has exited.)r   stoppedr   s    r4   r   zServer.stopped`  s     }}$$$r6   c                    t        j                  d      }t        |t              t        d j
                  ift        |t              t        d fdift        |t              t        d j
                  j                  ift        |t              t        ft        |t         d      t         j
                  j                   j
                  j                   dft        |t"         d      t$        d	d
ift        |t&         d      t(        d j
                  j*                  ift        |t,         d      t.        d j
                  j0                  ifg}t        j                  d      r,|j3                  t        |t4              t        d fdifg       t        j                  d      rI|j3                  t        |t6         d      t8        d	t;        j<                   j>                        ifg       tA               rWddl!m"}m#}m$} |j3                  t        |tJ              |d|ift        |tL              |d|ift        |tN              |d|ifg       t        j                  d      rtP        jS                  d       nt;        jT                         }tP        jS                  d|       |j3                  t        |dd      tV        ft        |d      tX        | ddtZ        t        gdft        |d      t\        fg       t_        j`                  jb                  |fte               tg               ti               dtk               S )zCreate our tornado web app.zserver.baseUrlPathruntimecallbackc                 0     j                   j                  S r   )r   is_ready_for_browser_connectionr   s   r4   <lambda>z$Server._create_app.<locals>.<lambda>r  s    T]]%R%R r6   stats_managerz)/(?P<session_id>[^/]+)/(?P<file_id>[^/]+))file_mgris_active_sessionz/(.*)r~    registrycomponent_managerzserver.scriptHealthCheckEnabledc                 8     j                   j                         S r   )r   does_script_run_without_errorr   s   r4   r   z$Server._create_app.<locals>.<lambda>  s    0[0[0] r6   zserver.enableStaticServingr   )AuthCallbackHandlerAuthLoginHandlerAuthLogoutHandlerbase_urlglobal.developmentModez/Serving static content from the Node dev serverzServing static content from %sz	(?!/)(.*)required)trailing_slashz(.*)/z
index.html)r~   default_filenamereserved_paths
prohibited)cookie_secretxsrf_cookieswebsocket_max_message_size)6r
   r.   r%   rH   r   r   rM   r   rI   r&   r   rN   r   rG   r'   r   r   rC   r   rD   r   component_registryrE   r   bidi_component_registryextendrO   rF   r   r   get_app_static_dirr   r   )streamlit.web.server.oauth_authlib_routesr   r   r   rP   rQ   rR   r*   r   get_static_dirr    r!   rK   r   r   webApplicationr"   r$   r   r?   )r   baseroutesr   r   r   static_paths   `      r4   r   zServer._create_appe  s]     !56 $D/:'DMM* $D/:RS $D/:# $--"9"9: $D*>?!
 $,--VW ) $ ? ?)-)H)H
 $D^,<E*BC  $D-?,@*FG'T]]==> $D-D,EU*KL+$dmm&K&KLS.
` >?MM ,D2NO%&(]
 9:MM ,D5L4MU2ST,!=!=d>S>S!TU  !  MM ,D2JK+#T* ,D2EF(#T* ,D2FG)#T*( 56MMKL#224KMM:KHMM , +j + ,D&9)'2m1$50< !4 4	/	 ,DN'1@ {{&&
+-(*'A'C
 #$
 	
r6   c                P    | j                   j                  t        j                  k(  S r   )r   stater   ONE_OR_MORE_SESSIONS_CONNECTEDr   s    r4   browser_is_connectedzServer.browser_is_connected  s    }}""l&Q&QQQr6   c                @    ddl m} | j                  |j                  k(  S )Nr   )streamlit_app)streamlit.hellor   r   __file__)r   r   s     r4   is_running_hellozServer.is_running_hello  s    1%%)?)???r6   c                f    t        j                  dd       | j                  j                          y )Nz  Stopping...blue)fg)r	   print_to_clir   stopr   s    r4   r   zServer.stop  s"    o&9r6   N)r   strr   rn   returnNoner   r   )r   r   )r   zAwaitable[None])r   tornado.web.Applicationr   rn   )rU   rV   rW   r   classmethodr   r   propertyr   r   r   r   r   r   r   rX   r6   r4   r   r     s     FD 2 2  & &$  % %T
l R R @ @
r6   r   c                 \   t        j                  d      st        j                  d      j	                  t        j
                         t        j                  d      j	                  t        j
                         t        j                  d      j	                  t        j
                         y y )Nr   ztornado.accessztornado.applicationztornado.general)r
   r.   logging	getLoggersetLevelERRORrX   r6   r4   r   r   
  sr    56 	*+44W]]C/099'--H+,55gmmD 7r6   )r   ztuple[int, int])r   zdict[str, Any]r   )rh   r   r   r   )ri   
str | Nonerj   r   r   zSSLContext | None)rk   r   r   r   r   )h
__future__r   r   r   r   r}   rp   pathlibr   typingr   r   r   tornado.webr   tornado.httpserverr   	streamlitr	   r
   r   r   streamlit.auth_utilr   streamlit.config_optionr   streamlit.loggerr   streamlit.runtimer   r   r   +streamlit.runtime.memory_media_file_storager   (streamlit.runtime.memory_session_storager   .streamlit.runtime.memory_uploaded_file_managerr   streamlit.runtime.runtime_utilr   *streamlit.web.cache_storage_manager_configr   ,streamlit.web.server.app_static_file_handlerr   3streamlit.web.server.bidi_component_request_handlerr   .streamlit.web.server.browser_websocket_handlerr   .streamlit.web.server.component_request_handlerr   'streamlit.web.server.media_file_handlerr   streamlit.web.server.routesr   r   r   r    r!    streamlit.web.server.server_utilr"   r#   r$   r%   *streamlit.web.server.stats_request_handlerr&   0streamlit.web.server.upload_file_request_handlerr'   asynciocollections.abcr(   rs   r)   rU   r*   __annotations__r5   r?   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rM   rN   rO   rP   rQ   rR   	ExceptionrT   r\   ra   rl   re   rf   rg   r   r   rX   r6   r4   <module>r     s   #    	 
  , ,  ) 7 7 4 0 ' B B N I T E N S R D   K U)H% % @2 "%  $ & E %
 !  ( E (!;  ;!.  .4 e 4* *: :, % ,- U -'(;'<A> >4 e 4: e  #4 % 3* U *, e ,	9 	1J
0.$N "
Jj jZEr6   