
    ch?4                    V   % S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SK	J
r
JrJrJrJrJr  S SKJrJr  S SKJr  S SKJrJr  S SKJrJrJr  \" \5      rS	\S
'   SrSS jr SS jr!SS jr"SS jr#SS jr$SS jr%SS jr&SS jr'SS jr(SS jr)SS jr*SS.           S S jjr+g)!    )annotationsN)AnyFinal)cli_utilconfigenv_util	file_utilnet_utilsecrets)MIN_GIT_VERSIONGitRepo)
get_logger)report_watchdog_availability
watch_file)Serverserver_address_is_unix_socketserver_utilr   _LOGGERi   @c                  ^  [         R                  S5        SU 4S jjn[        R                  " [        R                  U5        [        R                  " [        R                  U5        [
        R                  S:X  a&  [        R                  " [        R                  U5        g [        R                  " [        R                  U5        g )NzSetting up signal handlerc                &   > TR                  5         g N)stop)signal_numberstack_frameservers     jC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\streamlit/web/bootstrap.pysignal_handler._set_up_signal_handler.<locals>.signal_handler)   s        win32)r   intr   r   returnNone)	r   debugsignalSIGTERMSIGINTsysplatformSIGBREAKSIGQUIT)r   r   s   ` r   _set_up_signal_handlerr,   &   sk    MM-. MM&...1
MM&--0
||wfoo~6fnnn5r   c                ~    [         R                  R                  S[        R                  R	                  U 5      5        g)zAdd the script's folder to the sys path.

Python normally does this automatically, but since we exec the script
ourselves we need to do it instead.
r   N)r(   pathinsertosdirname)main_script_paths    r   _fix_sys_pathr3   5   s$     HHOOArww'789r   c                     [         R                  (       aG   SSKJn Jn  [        [        R                  " 5       5      U L a  [        R                  " U" 5       5        ggg! [         a     gf = f)a  Set default asyncio policy to be compatible with Tornado 6.

Tornado 6 (at least) is not compatible with the default
asyncio implementation on Windows. So here we
pick the older SelectorEventLoopPolicy when the OS is Windows
if the known-incompatible default policy is in use.

This has to happen as early as possible to make it a low priority and
overridable

See: https://github.com/tornadoweb/tornado/issues/2608

FIXME: if/when tornado supports the defaults in asyncio,
remove and bump tornado requirement for py38
r   WindowsProactorEventLoopPolicyWindowsSelectorEventLoopPolicyN)	r   
IS_WINDOWSasyncior6   r7   typeget_event_loop_policyset_event_loop_policyImportErrorr5   s     r   _fix_tornado_crashr>   >   sd      	P G11348VV --.L.NO W   		s   A 
A+*A+c                2    SSK nU /[        U5      QUl        g)zlsys.argv needs to exclude streamlit arguments and parameters
and be set to what a user's script may expect.
r   N)r(   listargv)r2   argsr(   s      r   _fix_sys_argvrC   ^   s      .4:.CHr   c                ^   [        U R                  5        [        U R                  5        [        U R                  5        [        5          [        R                  " 5         SS jn[        R                  " 5       R                  U5        g ! [         a    [        R                  S5         NKf = f)Nz Failed to load secrets.toml filec                 |   [         R                  " S5      (       a  g [         R                  " S5      (       a  [         R                  " S5      n OD[         R                  " S5      (       a'  [        5       (       a  g [         R                  " S5      n OSn [        R
                  " [        R                  " U 5      5        g )Nserver.headlessbrowser.serverAddressserver.address	localhost)r   
get_optionis_manually_setr   r   open_browserr   get_url)addrs    r   maybe_open_browser,_on_server_start.<locals>.maybe_open_browseru   s    .//!!"9::$$%<=D##$455,..$$%56DDk11$78r   r"   r#   )_maybe_print_old_git_warningr2   "_maybe_print_static_folder_warning
_print_urlis_running_hellor   r   load_if_toml_exists	Exceptionr   	exceptionr9   get_running_loop	call_soon)r   rO   s     r   _on_server_startr[   g   s     !8!89&v'>'>?v&&' "
>##%9$ (();<+  ><=>s   B
 
B,+B,c                 |    S[         R                  ;  a(  [        R                  " S5      [         R                  S'   gg)zaSets MAPBOX_API_KEY environment variable needed for PyDeck otherwise it
will throw an exception.
MAPBOX_API_KEYzmapbox.tokenN)r0   environr   rJ    r   r   _fix_pydeck_mapbox_api_warningr`      s/    
 rzz)'-'8'8'H

#$ *r   c                ~   [         R                  " S5      (       a  [        R                  " U 5      n[        R
                  R                  U5      (       d  [        R                  " SU S3SS9  g[        R                  " U5      nU[        :  a-  [         R                  " SS5        [        R                  " SSS9  ggg)	z7Prints a warning if the static folder is misconfigured.zserver.enableStaticServingzGWARNING: Static file serving is enabled, but no static folder found at zJ. To disable static file serving, set server.enableStaticServing to false.yellowfgFzVWARNING: Static folder size is larger than 1GB. Static file serving has been disabled.N)r   rJ   r	   get_app_static_dirr0   r.   isdirr   print_to_cliget_directory_sizeMAX_APP_STATIC_FOLDER_SIZE
set_option)r2   static_folder_pathstatic_folder_sizes      r   rS   rS      s     566&99:JKww}}/00!!() *;< 	 "+!=!=>P!Q!$>>!!">F%%= ? 7r   c                   U (       a  SnOSn/ n[         R                  " S5      (       a/  S[        R                  " [         R                  " S5      5      4/nGO;[         R                  " S5      (       a=  [        5       (       d.  S[        R                  " [         R                  " S5      5      4/nO[        5       (       a  S[         R                  " S5      4/nOS[        R                  " S5      4/n[        R                  " 5       nU(       a'  UR                  S	[        R                  " U5      45        [         R                  " S
5      (       aC  [        R                  " 5       nU(       a'  UR                  S[        R                  " U5      45        [        R                  " S5        [        R                  " SU 3SSS9  [        R                  " S5        U H4  u  pV[        R                  " SU S3SSS9  [        R                  " USS9  M6     [        R                  " S5        U (       a  [        R                  " S5        [        R                  " SSS9  [        R                  " SSS9  [        R                  " S5        [        R                  " S5        [        R                  " S5        [        R                  " S5        g g )Nz9Welcome to Streamlit. Check out our demo in your browser.z4You can now view your Streamlit app in your browser.rG   URLrH   zUnix Socketz	Local URLrI   zNetwork URLrF   zExternal URL z  blueTrd   boldz: F)nlrd   )rr   z5  Ready to create your own Python apps super quickly?z  Head over to )rs   zhttps://docs.streamlit.ioz  May you create awesome apps!)r   rK   r   rM   rJ   r   r
   get_internal_ipappendget_external_ipr   rg   )rU   title_message
named_urlsinternal_ipexternal_ipurl_nameurls          r   rT   rT      s3   SNJ566K''(9(9:Q(RST


 	/009V9X9X K''(9(9:J(KLM

 
'	(	(F--.>?@

 +--k:;

 ..0}k.A.A+.NOP.//"224K!!>;3F3F{3S"TU"B}o.6E"#8*B/EfEc- $ "UV/E:9Eb!>?b!b! r   c                   [        U 5      nUR                  5       (       d  UR                  b  UR                  [        :  a  SR	                  S UR                   5       5      nSR	                  S [         5       5      n[
        R                  " S5        [
        R                  " SSSS	9  [
        R                  " S5        [
        R                  " S
U SU S3SS9  [
        R                  " SSS9  [
        R                  " SSS9  gggg)zIf our script is running in a Git repo, and we're running a very old
Git version, print a warning that Git integration will be unavailable.
N.c              3  8   #    U  H  n[        U5      v   M     g 7fr   str.0vals     r   	<genexpr>/_maybe_print_old_git_warning.<locals>.<genexpr>   s     %K:J3c#hh:J   c              3  8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r   r      s     %J/3c#hh/r   ro   z  Git integration is disabled.rb   Trq   z  Streamlit requires Git z or later, but you have rc   z>  Git is used by Streamlit Cloud (https://streamlit.io/cloud).z,  To enable this feature, please update Git.)r   is_validgit_versionr   joinr   rg   )r2   repogit_version_stringmin_version_strings       r   rR   rR      s     #$DMMOO(. XX%K$:J:J%KK XX%J/%JJb!>8RVWb!'(:'; <./q2	

 	L	
 	:x	
! / ) r   c                    U R                  5        VVs0 s H%  u  pUc  M
  US:w  d  M  UR                  SS5      U_M'     nnn[        R                  " SUS9  gs  snnf )a  Load config options from config.toml files, then overlay the ones set by
flag_options.

The "streamlit run" command supports passing Streamlit's config options
as flags. This function reads through the config options set via flag,
massages them, and passes them to get_config_options() so that they
overwrite config option defaults and those loaded from config.toml files.

Parameters
----------
flag_options : dict[str, Any]
    A dict of config options where the keys are the CLI flag version of the
    config option names.
Nr_   _r~   T)force_reparseoptions_from_flags)itemsreplacer   get_config_options)flag_optionsnamer   r   s       r   load_config_optionsr     sh    ( &++--ID 	$"by 	$S##-   DEWXs   	AAAc                   ^  SU 4S jjn[         R                  " S5       H4  n[        R                  R	                  U5      (       d  M)  [        X!5        M6     g )Nc                   > [        T5        g r   )r   )_pathr   s    r   on_config_changed3_install_config_watchers.<locals>.on_config_changed"  s    L)r   zconfig.toml)r   r   r"   r#   )r   get_config_filesr0   r.   existsr   )r   r   filenames   `  r   _install_config_watchersr   !  s:    * ++M:77>>(##x3 ;r   F)stop_immediately_for_testingc                 ^^^	 [        U 5        [        5         [        X5        [        5         [	        U5        [        X5      m	S
U	U4S jjmS
U4S jjnSn [        R                  " 5         SnU(       a7  [        R                  S5        [        R                  " U" 5       SS9nUT	l        g	[        R                  S5        [        R                  " U" 5       5        g	! [         a     N{f = f)zmRun a script in a separate thread and start a server for the app.

This starts a blocking asyncio eventloop.
c                    >#    T R                  5       I S h  vN   [        T 5        [        T 5        T(       a%  [        R	                  S5        T R                  5         T R                  I S h  vN   g  N[ N7f)Nz'Stopping server immediately for testing)startr[   r,   r   r$   r   stopped)r   r   s   r   
run_serverrun.<locals>.run_server@  s[     lln  	v& (MMCDKKM nn 	 	s"   A7A3AA7-A5.A75A7c                 0   >#    T " 5       I S h  vN   g  N7fr   r_   )r   s   r   mainrun.<locals>.mainS  s     ls   FTz&Running server in existing event loop.zbootstrap.run_server)r   z"Starting new event loop for serverNrQ   )r3   r>   rC   r`   r   r   r9   rY   RuntimeErrorr   r$   create_task_bootstrap_taskrun)
r2   is_hellorB   r   r   r   running_in_event_looptaskr   r   s
       `   @@r   r   r   *  s     "#")"$\* $/F & "  " $
 >?""460FG "& 	:;DF  s   C 
C+*C+)r   r   r"   r#   )r2   r   r"   r#   rQ   )r2   r   rB   	list[str]r"   r#   )rU   boolr"   r#   )r   dict[str, Any]r"   r#   )r2   r   r   r   rB   r   r   r   r   r   r"   r#   ),
__future__r   r9   r0   r%   r(   typingr   r   	streamlitr   r   r   r	   r
   r   streamlit.git_utilr   r   streamlit.loggerr   streamlit.watcherr   r   streamlit.web.serverr   r   r   __name__r   __annotations__ri   r,   r3   r>   rC   r[   r`   rS   rT   rR   r   r   r   r_   r   r   <module>r      s    #  	  
  N N 7 ' F S SH% % 4 6:P@/ =FI28"v
:Y:4 */AAA A !	A #'A 
Ar   