L iQ/$UddlmZddlZddlZddlZddlZddlmZmZddl m Z m Z m Z m Z mZmZddlmZddlmZmZddlmZmZmZeeZded <d Zdd Zdd Zdd ZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&dd ddZ'y)) annotationsN)AnyFinal)cli_utilconfigenv_util file_utilnet_utilsecrets) get_logger)report_watchdog_availability watch_file)Serverserver_address_is_unix_socket server_utilr_LOGGERi@ctjddfd }tjtj|tjtj|t j dk(r%tjtj|ytjtj|y)NzSetting up signal handlerc&jyN)stop) signal_number stack_frameservers ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/streamlit/web/bootstrap.pysignal_handlerz._set_up_signal_handler..signal_handler(s  win32)rintrrreturnNone) rdebugsignalSIGTERMSIGINTsysplatformSIGBREAKSIGQUIT)rrs` r_set_up_signal_handlerr)%sk MM-. MM&...1 MM&--0 ||w foo~6 fnnn5rc~tjjdtjj |y)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. rN)r%pathinsertosdirname)main_script_paths r _fix_sys_pathr04s$ HHOOArww'789rctjrD ddlm}m}t tj |urtj|yyy#t$rYywxYw)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 rWindowsProactorEventLoopPolicyWindowsSelectorEventLoopPolicyN) r IS_WINDOWSasyncior3r4typeget_event_loop_policyset_event_loop_policy ImportErrorr2s r_fix_tornado_crashr;=sd  P G11348VV--.L.NOW    sA A"!A"c2ddl}|gt||_y)ztsys.argv needs to exclude streamlit arguments and parameters and be set to what a user's script may expect. rN)r%listargv)r/argsr%s r _fix_sys_argvr@]s .4:.CHrc,t|jt|jt  t j dd}tjj|y#t$rtjdYHwxYw)Nz Failed to load secrets.toml filecFtjdrytjdrtjd}n8tjdr!trytjd}nd}t j t j|y)Nserver.headlessbrowser.serverAddressserver.address localhost)r get_optionis_manually_setrr open_browserrget_url)addrs rmaybe_open_browserz,_on_server_start..maybe_open_browserss{   . /   ! !"9 :$$%<=D  # #$4 5,.$$%56DDk11$78rrr ) "_maybe_print_static_folder_warningr/ _print_urlis_running_hellor r load_if_toml_exists Exceptionr exceptionr6get_running_loop call_soon)rrLs r_on_server_startrVfst&v'>'>?v&&' " >##%9$ (();<+ ><=>sA22BBcvdtjvr'tjdtjd<yy)ziSets MAPBOX_API_KEY environment variable needed for PyDeck otherwise it will throw an exception. MAPBOX_API_KEYz mapbox.tokenN)r-environrrGrr_fix_pydeck_mapbox_api_warningr[s/ rzz)'-'8'8'H #$*rchtjdrtj|}tj j |stjd|ddytj|}|tkDr.tjddtjddyyy) z7Prints a warning if the static folder is misconfigured.zserver.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) rrGr get_app_static_dirr-r+isdirr print_to_cliget_directory_sizeMAX_APP_STATIC_FOLDER_SIZE set_option)r/static_folder_pathstatic_folder_sizes rrNrNs56&99:JKww}}/0  ! !()*;<  "+!=!=>P!Q !$>>!!">F%%=?7rc"|rd}nd}g}tjdr-dtjtjdfg}ntjdr6t s,dtjtjdfg}nt rdtjdfg}ndtjdfg}t j}|r&|jd tj|ftjd r? @ +--k: ; ..0    }k.A.A+.NO P   . /"224K!!>;3F3F{3S"TU " B}o.6E "#. #8*B/EfEc-. "UV/E:9Eb!>?b!b!rc|jDcic]\}}||dk7r|jdd|!}}}tjd|ycc}}w)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. NrZ_.T) force_reparseoptions_from_flags)itemsreplacerget_config_options) flag_optionsnamevalrzs rload_config_optionsrsb(&++- D# ?sby S## DEWXs$Acdfd }tjdD].}tjj |s#t ||0y)Nctyr)r)_pathr~s ron_config_changedz3_install_config_watchers..on_config_changeds L)rz config.toml)rstrrr )rget_config_filesr-r+existsr)r~rfilenames` r_install_config_watchersrs?*++M:4 77>>( # x!2 34rF)stop_immediately_for_testingc t|tt||tt |t || d fd d fd }d} t jd}|r9tjdt j|d}| _ y tjdt j|y #t$rYvwxYw) zuRun a script in a separate thread and start a server for the app. This starts a blocking asyncio eventloop. cKjd{ttr%tj dj j d{y7V7w)Nz'Stopping server immediately for testing)startrVr)rr!rstopped)rrsr run_serverzrun..run_server!s]lln  v& ( MMC D KKMnn  s"A2A.AA2(A0)A20A2c0Kd{y7wrrZ)rsrmainzrun..main4sls FTz&Running server in existing event loop.zbootstrap.run_server)rz"Starting new event loop for serverNrM)r0r;r@r[rrr6rT RuntimeErrorrr! create_task_bootstrap_taskrun) r/is_hellor?r~rrrunning_in_event_looptaskrrs ` @@rrr s"#"D)"$\*$h /F&"   " $  >?""460FG"&  :; DF    sC C#"C#)rrrr )r/rrr rM)r/rr? list[str]rr )rPboolrr )r~dict[str, Any]rr ) r/rrrr?rr~rrrrr )( __future__rr6r-r"r%typingrr streamlitrrrr r r streamlit.loggerr streamlit.watcherr rstreamlit.web.serverrrr__name__r__annotations__rcr)r0r;r@rVr[rNrOrrrrZrrrs# NN'FSSH%% 4 6:P@/=DI28"vY:4*/ AAA A! A #' A Ar