streamlit-nightly 1.43.2.dev20250307__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- streamlit/__init__.py +306 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +218 -0
- streamlit/cli_util.py +105 -0
- streamlit/column_config.py +56 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +126 -0
- streamlit/commands/execution_control.py +238 -0
- streamlit/commands/experimental_query_params.py +169 -0
- streamlit/commands/logo.py +189 -0
- streamlit/commands/navigation.py +385 -0
- streamlit/commands/page_config.py +311 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +150 -0
- streamlit/components/v1/__init__.py +31 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +130 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +243 -0
- streamlit/config.py +1513 -0
- streamlit/config_option.py +311 -0
- streamlit/config_util.py +177 -0
- streamlit/connections/__init__.py +28 -0
- streamlit/connections/base_connection.py +174 -0
- streamlit/connections/snowflake_connection.py +562 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +425 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +210 -0
- streamlit/dataframe_util.py +1416 -0
- streamlit/delta_generator.py +602 -0
- streamlit/delta_generator_singletons.py +204 -0
- streamlit/deprecation_util.py +209 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +234 -0
- streamlit/elements/arrow.py +962 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +133 -0
- streamlit/elements/code.py +114 -0
- streamlit/elements/deck_gl_json_chart.py +546 -0
- streamlit/elements/dialog_decorator.py +267 -0
- streamlit/elements/doc_string.py +558 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +331 -0
- streamlit/elements/form.py +354 -0
- streamlit/elements/graphviz_chart.py +150 -0
- streamlit/elements/heading.py +302 -0
- streamlit/elements/html.py +105 -0
- streamlit/elements/iframe.py +191 -0
- streamlit/elements/image.py +196 -0
- streamlit/elements/json.py +139 -0
- streamlit/elements/layouts.py +879 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1157 -0
- streamlit/elements/lib/color_util.py +263 -0
- streamlit/elements/lib/column_config_utils.py +542 -0
- streamlit/elements/lib/column_types.py +2188 -0
- streamlit/elements/lib/dialog.py +147 -0
- streamlit/elements/lib/dicttools.py +154 -0
- streamlit/elements/lib/event_utils.py +37 -0
- streamlit/elements/lib/file_uploader_utils.py +66 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +441 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/mutable_status_container.py +183 -0
- streamlit/elements/lib/options_selector_utils.py +250 -0
- streamlit/elements/lib/pandas_styler_utils.py +274 -0
- streamlit/elements/lib/policies.py +194 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
- streamlit/elements/lib/subtitle_utils.py +176 -0
- streamlit/elements/lib/utils.py +250 -0
- streamlit/elements/map.py +508 -0
- streamlit/elements/markdown.py +277 -0
- streamlit/elements/media.py +793 -0
- streamlit/elements/metric.py +301 -0
- streamlit/elements/plotly_chart.py +546 -0
- streamlit/elements/progress.py +156 -0
- streamlit/elements/pyplot.py +194 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/spinner.py +113 -0
- streamlit/elements/text.py +76 -0
- streamlit/elements/toast.py +98 -0
- streamlit/elements/vega_charts.py +1984 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +310 -0
- streamlit/elements/widgets/button.py +1123 -0
- streamlit/elements/widgets/button_group.py +1008 -0
- streamlit/elements/widgets/camera_input.py +263 -0
- streamlit/elements/widgets/chat.py +647 -0
- streamlit/elements/widgets/checkbox.py +352 -0
- streamlit/elements/widgets/color_picker.py +265 -0
- streamlit/elements/widgets/data_editor.py +983 -0
- streamlit/elements/widgets/file_uploader.py +486 -0
- streamlit/elements/widgets/multiselect.py +338 -0
- streamlit/elements/widgets/number_input.py +545 -0
- streamlit/elements/widgets/radio.py +407 -0
- streamlit/elements/widgets/select_slider.py +437 -0
- streamlit/elements/widgets/selectbox.py +366 -0
- streamlit/elements/widgets/slider.py +880 -0
- streamlit/elements/widgets/text_widgets.py +628 -0
- streamlit/elements/widgets/time_widgets.py +970 -0
- streamlit/elements/write.py +574 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +61 -0
- streamlit/error_util.py +105 -0
- streamlit/errors.py +452 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +406 -0
- streamlit/file_util.py +247 -0
- streamlit/git_util.py +173 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +37 -0
- streamlit/hello/mapping_demo.py +114 -0
- streamlit/hello/plotting_demo.py +55 -0
- streamlit/hello/streamlit_app.py +55 -0
- streamlit/hello/utils.py +28 -0
- streamlit/logger.py +130 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +302 -0
- streamlit/net_util.py +125 -0
- streamlit/platform.py +33 -0
- streamlit/proto/Alert_pb2.py +29 -0
- streamlit/proto/Alert_pb2.pyi +90 -0
- streamlit/proto/AppPage_pb2.py +27 -0
- streamlit/proto/AppPage_pb2.pyi +64 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
- streamlit/proto/Arrow_pb2.py +33 -0
- streamlit/proto/Arrow_pb2.pyi +188 -0
- streamlit/proto/AudioInput_pb2.py +28 -0
- streamlit/proto/AudioInput_pb2.pyi +58 -0
- streamlit/proto/Audio_pb2.py +27 -0
- streamlit/proto/Audio_pb2.pyi +58 -0
- streamlit/proto/AuthRedirect_pb2.py +27 -0
- streamlit/proto/AuthRedirect_pb2.pyi +41 -0
- streamlit/proto/AutoRerun_pb2.py +27 -0
- streamlit/proto/AutoRerun_pb2.pyi +45 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +105 -0
- streamlit/proto/Balloons_pb2.py +27 -0
- streamlit/proto/Balloons_pb2.pyi +43 -0
- streamlit/proto/Block_pb2.py +53 -0
- streamlit/proto/Block_pb2.pyi +322 -0
- streamlit/proto/BokehChart_pb2.py +27 -0
- streamlit/proto/BokehChart_pb2.pyi +49 -0
- streamlit/proto/ButtonGroup_pb2.py +36 -0
- streamlit/proto/ButtonGroup_pb2.pyi +169 -0
- streamlit/proto/Button_pb2.py +27 -0
- streamlit/proto/Button_pb2.pyi +71 -0
- streamlit/proto/CameraInput_pb2.py +28 -0
- streamlit/proto/CameraInput_pb2.pyi +58 -0
- streamlit/proto/ChatInput_pb2.py +31 -0
- streamlit/proto/ChatInput_pb2.pyi +111 -0
- streamlit/proto/Checkbox_pb2.py +30 -0
- streamlit/proto/Checkbox_pb2.pyi +90 -0
- streamlit/proto/ClientState_pb2.py +30 -0
- streamlit/proto/ClientState_pb2.pyi +90 -0
- streamlit/proto/Code_pb2.py +27 -0
- streamlit/proto/Code_pb2.pyi +55 -0
- streamlit/proto/ColorPicker_pb2.py +28 -0
- streamlit/proto/ColorPicker_pb2.pyi +67 -0
- streamlit/proto/Common_pb2.py +51 -0
- streamlit/proto/Common_pb2.pyi +293 -0
- streamlit/proto/Components_pb2.py +35 -0
- streamlit/proto/Components_pb2.pyi +172 -0
- streamlit/proto/DataFrame_pb2.py +56 -0
- streamlit/proto/DataFrame_pb2.pyi +397 -0
- streamlit/proto/DateInput_pb2.py +28 -0
- streamlit/proto/DateInput_pb2.pyi +83 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
- streamlit/proto/Delta_pb2.py +31 -0
- streamlit/proto/Delta_pb2.pyi +74 -0
- streamlit/proto/DocString_pb2.py +29 -0
- streamlit/proto/DocString_pb2.pyi +93 -0
- streamlit/proto/DownloadButton_pb2.py +27 -0
- streamlit/proto/DownloadButton_pb2.pyi +70 -0
- streamlit/proto/Element_pb2.py +78 -0
- streamlit/proto/Element_pb2.pyi +312 -0
- streamlit/proto/Empty_pb2.py +27 -0
- streamlit/proto/Empty_pb2.pyi +36 -0
- streamlit/proto/Exception_pb2.py +27 -0
- streamlit/proto/Exception_pb2.pyi +72 -0
- streamlit/proto/Favicon_pb2.py +27 -0
- streamlit/proto/Favicon_pb2.pyi +40 -0
- streamlit/proto/FileUploader_pb2.py +28 -0
- streamlit/proto/FileUploader_pb2.pyi +78 -0
- streamlit/proto/ForwardMsg_pb2.py +53 -0
- streamlit/proto/ForwardMsg_pb2.pyi +293 -0
- streamlit/proto/GitInfo_pb2.py +29 -0
- streamlit/proto/GitInfo_pb2.pyi +83 -0
- streamlit/proto/GraphVizChart_pb2.py +27 -0
- streamlit/proto/GraphVizChart_pb2.pyi +53 -0
- streamlit/proto/Heading_pb2.py +27 -0
- streamlit/proto/Heading_pb2.pyi +56 -0
- streamlit/proto/Html_pb2.py +27 -0
- streamlit/proto/Html_pb2.pyi +42 -0
- streamlit/proto/IFrame_pb2.py +27 -0
- streamlit/proto/IFrame_pb2.pyi +59 -0
- streamlit/proto/Image_pb2.py +29 -0
- streamlit/proto/Image_pb2.pyi +84 -0
- streamlit/proto/Json_pb2.py +27 -0
- streamlit/proto/Json_pb2.pyi +53 -0
- streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
- streamlit/proto/LinkButton_pb2.py +27 -0
- streamlit/proto/LinkButton_pb2.pyi +58 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +51 -0
- streamlit/proto/Markdown_pb2.py +29 -0
- streamlit/proto/Markdown_pb2.pyi +86 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +101 -0
- streamlit/proto/MetricsEvent_pb2.py +30 -0
- streamlit/proto/MetricsEvent_pb2.pyi +200 -0
- streamlit/proto/MultiSelect_pb2.py +28 -0
- streamlit/proto/MultiSelect_pb2.pyi +81 -0
- streamlit/proto/NamedDataSet_pb2.py +28 -0
- streamlit/proto/NamedDataSet_pb2.pyi +59 -0
- streamlit/proto/Navigation_pb2.py +30 -0
- streamlit/proto/Navigation_pb2.pyi +84 -0
- streamlit/proto/NewSession_pb2.py +51 -0
- streamlit/proto/NewSession_pb2.pyi +481 -0
- streamlit/proto/NumberInput_pb2.py +30 -0
- streamlit/proto/NumberInput_pb2.pyi +121 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +126 -0
- streamlit/proto/PageInfo_pb2.py +27 -0
- streamlit/proto/PageInfo_pb2.pyi +43 -0
- streamlit/proto/PageLink_pb2.py +27 -0
- streamlit/proto/PageLink_pb2.pyi +63 -0
- streamlit/proto/PageNotFound_pb2.py +27 -0
- streamlit/proto/PageNotFound_pb2.pyi +42 -0
- streamlit/proto/PageProfile_pb2.py +31 -0
- streamlit/proto/PageProfile_pb2.pyi +127 -0
- streamlit/proto/PagesChanged_pb2.py +28 -0
- streamlit/proto/PagesChanged_pb2.pyi +48 -0
- streamlit/proto/ParentMessage_pb2.py +27 -0
- streamlit/proto/ParentMessage_pb2.pyi +46 -0
- streamlit/proto/PlotlyChart_pb2.py +31 -0
- streamlit/proto/PlotlyChart_pb2.pyi +131 -0
- streamlit/proto/Progress_pb2.py +27 -0
- streamlit/proto/Progress_pb2.pyi +43 -0
- streamlit/proto/Radio_pb2.py +28 -0
- streamlit/proto/Radio_pb2.pyi +84 -0
- streamlit/proto/RootContainer_pb2.py +27 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +28 -0
- streamlit/proto/Selectbox_pb2.pyi +80 -0
- streamlit/proto/SessionEvent_pb2.py +28 -0
- streamlit/proto/SessionEvent_pb2.pyi +62 -0
- streamlit/proto/SessionStatus_pb2.py +27 -0
- streamlit/proto/SessionStatus_pb2.pyi +57 -0
- streamlit/proto/Skeleton_pb2.py +29 -0
- streamlit/proto/Skeleton_pb2.pyi +71 -0
- streamlit/proto/Slider_pb2.py +32 -0
- streamlit/proto/Slider_pb2.pyi +142 -0
- streamlit/proto/Snow_pb2.py +27 -0
- streamlit/proto/Snow_pb2.pyi +43 -0
- streamlit/proto/Spinner_pb2.py +27 -0
- streamlit/proto/Spinner_pb2.pyi +49 -0
- streamlit/proto/TextArea_pb2.py +28 -0
- streamlit/proto/TextArea_pb2.pyi +80 -0
- streamlit/proto/TextInput_pb2.py +30 -0
- streamlit/proto/TextInput_pb2.pyi +107 -0
- streamlit/proto/Text_pb2.py +27 -0
- streamlit/proto/Text_pb2.pyi +46 -0
- streamlit/proto/TimeInput_pb2.py +28 -0
- streamlit/proto/TimeInput_pb2.pyi +74 -0
- streamlit/proto/Toast_pb2.py +27 -0
- streamlit/proto/Toast_pb2.pyi +45 -0
- streamlit/proto/VegaLiteChart_pb2.py +29 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
- streamlit/proto/Video_pb2.py +31 -0
- streamlit/proto/Video_pb2.pyi +117 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +126 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +60 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +982 -0
- streamlit/runtime/caching/__init__.py +98 -0
- streamlit/runtime/caching/cache_data_api.py +665 -0
- streamlit/runtime/caching/cache_errors.py +142 -0
- streamlit/runtime/caching/cache_resource_api.py +527 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +523 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +637 -0
- streamlit/runtime/caching/legacy_cache_api.py +169 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/connection_factory.py +436 -0
- streamlit/runtime/context.py +280 -0
- streamlit/runtime/credentials.py +364 -0
- streamlit/runtime/forward_msg_cache.py +296 -0
- streamlit/runtime/forward_msg_queue.py +240 -0
- streamlit/runtime/fragment.py +477 -0
- streamlit/runtime/media_file_manager.py +234 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +181 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +138 -0
- streamlit/runtime/metrics_util.py +486 -0
- streamlit/runtime/pages_manager.py +165 -0
- streamlit/runtime/runtime.py +792 -0
- streamlit/runtime/runtime_util.py +106 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +159 -0
- streamlit/runtime/scriptrunner/magic.py +273 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +756 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
- streamlit/runtime/secrets.py +534 -0
- streamlit/runtime/session_manager.py +394 -0
- streamlit/runtime/state/__init__.py +41 -0
- streamlit/runtime/state/common.py +191 -0
- streamlit/runtime/state/query_params.py +205 -0
- streamlit/runtime/state/query_params_proxy.py +218 -0
- streamlit/runtime/state/safe_session_state.py +138 -0
- streamlit/runtime/state/session_state.py +772 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +135 -0
- streamlit/runtime/stats.py +109 -0
- streamlit/runtime/uploaded_file_manager.py +148 -0
- streamlit/runtime/websocket_session_manager.py +167 -0
- streamlit/source_util.py +98 -0
- streamlit/static/favicon.png +0 -0
- streamlit/static/index.html +61 -0
- streamlit/static/static/css/index.Bmkmz40k.css +1 -0
- streamlit/static/static/css/index.DpJG_94W.css +1 -0
- streamlit/static/static/css/index.DzuxGC_t.css +1 -0
- streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
- streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
- streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
- streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
- streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
- streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
- streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
- streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
- streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
- streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
- streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
- streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
- streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
- streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
- streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
- streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
- streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
- streamlit/static/static/js/index.08vcOOvb.js +1 -0
- streamlit/static/static/js/index.0uqKfJUS.js +1 -0
- streamlit/static/static/js/index.B02M5u69.js +203 -0
- streamlit/static/static/js/index.B7mcZKMx.js +1 -0
- streamlit/static/static/js/index.BAQDHFA_.js +1 -0
- streamlit/static/static/js/index.BI60cMVr.js +2 -0
- streamlit/static/static/js/index.BLug2inK.js +1 -0
- streamlit/static/static/js/index.BM6TMY8g.js +2 -0
- streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
- streamlit/static/static/js/index.BZqa87a1.js +2 -0
- streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
- streamlit/static/static/js/index.BgVMiY_P.js +197 -0
- streamlit/static/static/js/index.BtuGy7By.js +6 -0
- streamlit/static/static/js/index.BuDuBmrs.js +1 -0
- streamlit/static/static/js/index.BvXU2oKV.js +1 -0
- streamlit/static/static/js/index.BxcwPacT.js +73 -0
- streamlit/static/static/js/index.CWX8KB81.js +1 -0
- streamlit/static/static/js/index.CXzZTo_q.js +1 -0
- streamlit/static/static/js/index.CcRWp_KL.js +1 -0
- streamlit/static/static/js/index.Cd-_xe55.js +3 -0
- streamlit/static/static/js/index.CdG2PXln.js +4537 -0
- streamlit/static/static/js/index.CjXvXmcP.js +1 -0
- streamlit/static/static/js/index.D1HZENZx.js +776 -0
- streamlit/static/static/js/index.D21Efo64.js +1617 -0
- streamlit/static/static/js/index.D9WgGVBx.js +7 -0
- streamlit/static/static/js/index.DEcsHtvb.js +12 -0
- streamlit/static/static/js/index.DFeMfr_K.js +1 -0
- streamlit/static/static/js/index.DHFBoItz.js +1 -0
- streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
- streamlit/static/static/js/index.DmuRkekN.js +3855 -0
- streamlit/static/static/js/index.Do6eY8sf.js +1 -0
- streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
- streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
- streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
- streamlit/static/static/js/index.H1U1IC_d.js +3 -0
- streamlit/static/static/js/index.g6p_4DPr.js +1 -0
- streamlit/static/static/js/index.g9x_GKss.js +1 -0
- streamlit/static/static/js/index.zo9jm08y.js +1 -0
- streamlit/static/static/js/input.DnaFglHq.js +2 -0
- streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
- streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
- streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
- streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
- streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
- streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
- streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
- streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
- streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
- streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
- streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
- streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
- streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
- streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
- streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
- streamlit/static/static/js/value.CgPGBV_l.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
- streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
- streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
- streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
- streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
- streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
- streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
- streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
- streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
- streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
- streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
- streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
- streamlit/string_util.py +203 -0
- streamlit/temporary_directory.py +56 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1050 -0
- streamlit/testing/v1/element_tree.py +2083 -0
- streamlit/testing/v1/local_script_runner.py +180 -0
- streamlit/testing/v1/util.py +53 -0
- streamlit/time_util.py +75 -0
- streamlit/type_util.py +460 -0
- streamlit/url_util.py +122 -0
- streamlit/user_info.py +519 -0
- streamlit/util.py +72 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2869 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +406 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +233 -0
- streamlit/watcher/path_watcher.py +185 -0
- streamlit/watcher/polling_path_watcher.py +124 -0
- streamlit/watcher/util.py +207 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +353 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +369 -0
- streamlit/web/server/__init__.py +26 -0
- streamlit/web/server/app_static_file_handler.py +93 -0
- streamlit/web/server/authlib_tornado_integration.py +60 -0
- streamlit/web/server/browser_websocket_handler.py +246 -0
- streamlit/web/server/component_request_handler.py +116 -0
- streamlit/web/server/media_file_handler.py +141 -0
- streamlit/web/server/oauth_authlib_routes.py +176 -0
- streamlit/web/server/oidc_mixin.py +108 -0
- streamlit/web/server/routes.py +295 -0
- streamlit/web/server/server.py +479 -0
- streamlit/web/server/server_util.py +161 -0
- streamlit/web/server/stats_request_handler.py +95 -0
- streamlit/web/server/upload_file_request_handler.py +137 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
streamlit/__init__.py
ADDED
@@ -0,0 +1,306 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# isort: skip_file
|
16
|
+
|
17
|
+
"""Streamlit.
|
18
|
+
|
19
|
+
How to use Streamlit in 3 seconds:
|
20
|
+
|
21
|
+
1. Write an app
|
22
|
+
>>> import streamlit as st
|
23
|
+
>>> st.write(anything_you_want)
|
24
|
+
|
25
|
+
2. Run your app
|
26
|
+
$ streamlit run my_script.py
|
27
|
+
|
28
|
+
3. Use your app
|
29
|
+
A new tab will open on your browser. That's your Streamlit app!
|
30
|
+
|
31
|
+
4. Modify your code, save it, and watch changes live on your browser.
|
32
|
+
|
33
|
+
Take a look at the other commands in this module to find out what else
|
34
|
+
Streamlit can do:
|
35
|
+
|
36
|
+
>>> dir(streamlit)
|
37
|
+
|
38
|
+
Or try running our "Hello World":
|
39
|
+
|
40
|
+
$ streamlit hello
|
41
|
+
|
42
|
+
For more detailed info, see https://docs.streamlit.io.
|
43
|
+
"""
|
44
|
+
|
45
|
+
# IMPORTANT: Prefix with an underscore anything that the user shouldn't see.
|
46
|
+
|
47
|
+
import os as _os
|
48
|
+
|
49
|
+
# Set Matplotlib backend to avoid a crash.
|
50
|
+
# The default Matplotlib backend crashes Python on OSX when run on a thread
|
51
|
+
# that's not the main thread, so here we set a safer backend as a fix.
|
52
|
+
# This fix is OS-independent. We didn't see a good reason to make this
|
53
|
+
# Mac-only. Consistency within Streamlit seemed more important.
|
54
|
+
# IMPORTANT: This needs to run on top of all imports before any other
|
55
|
+
# import of matplotlib could happen.
|
56
|
+
_os.environ["MPLBACKEND"] = "Agg"
|
57
|
+
|
58
|
+
|
59
|
+
# Must be at the top, to avoid circular dependency.
|
60
|
+
from streamlit import logger as _logger
|
61
|
+
from streamlit import config as _config
|
62
|
+
from streamlit.deprecation_util import deprecate_func_name as _deprecate_func_name
|
63
|
+
from streamlit.version import STREAMLIT_VERSION_STRING as _STREAMLIT_VERSION_STRING
|
64
|
+
|
65
|
+
# Give the package a version.
|
66
|
+
__version__ = _STREAMLIT_VERSION_STRING
|
67
|
+
|
68
|
+
# DeltaGenerator methods:
|
69
|
+
# We initialize them here so that it is clear where they are instantiated.
|
70
|
+
# Further, it helps us to break circular imports because the DeltaGenerator
|
71
|
+
# imports the different elements but some elements also require DeltaGenerator
|
72
|
+
# functions such as the dg_stack. Now, elements that require DeltaGenerator functions
|
73
|
+
# can import the singleton module.
|
74
|
+
from streamlit.delta_generator_singletons import (
|
75
|
+
DeltaGeneratorSingleton as _DeltaGeneratorSingleton,
|
76
|
+
)
|
77
|
+
from streamlit.delta_generator import DeltaGenerator as _DeltaGenerator
|
78
|
+
from streamlit.elements.lib.mutable_status_container import (
|
79
|
+
StatusContainer as _StatusContainer,
|
80
|
+
)
|
81
|
+
from streamlit.elements.lib.dialog import Dialog as _Dialog
|
82
|
+
|
83
|
+
# instantiate the DeltaGeneratorSingleton
|
84
|
+
_dg_singleton = _DeltaGeneratorSingleton(
|
85
|
+
delta_generator_cls=_DeltaGenerator,
|
86
|
+
status_container_cls=_StatusContainer,
|
87
|
+
dialog_container_cls=_Dialog,
|
88
|
+
)
|
89
|
+
_main = _dg_singleton._main_dg
|
90
|
+
sidebar = _dg_singleton._sidebar_dg
|
91
|
+
_event = _dg_singleton._event_dg
|
92
|
+
_bottom = _dg_singleton._bottom_dg
|
93
|
+
|
94
|
+
|
95
|
+
from streamlit.elements.dialog_decorator import (
|
96
|
+
dialog_decorator as _dialog_decorator,
|
97
|
+
experimental_dialog_decorator as _experimental_dialog_decorator,
|
98
|
+
)
|
99
|
+
from streamlit.runtime.caching import (
|
100
|
+
cache_resource as _cache_resource,
|
101
|
+
cache_data as _cache_data,
|
102
|
+
cache as _cache,
|
103
|
+
)
|
104
|
+
from streamlit.runtime.connection_factory import (
|
105
|
+
connection_factory as _connection,
|
106
|
+
)
|
107
|
+
from streamlit.runtime.fragment import (
|
108
|
+
experimental_fragment as _experimental_fragment,
|
109
|
+
fragment as _fragment,
|
110
|
+
)
|
111
|
+
from streamlit.runtime.metrics_util import gather_metrics as _gather_metrics
|
112
|
+
from streamlit.runtime.secrets import secrets_singleton as _secrets_singleton
|
113
|
+
from streamlit.runtime.context import ContextProxy as _ContextProxy
|
114
|
+
from streamlit.runtime.state import (
|
115
|
+
SessionStateProxy as _SessionStateProxy,
|
116
|
+
QueryParamsProxy as _QueryParamsProxy,
|
117
|
+
)
|
118
|
+
from streamlit.user_info import (
|
119
|
+
UserInfoProxy as _UserInfoProxy,
|
120
|
+
login as _login,
|
121
|
+
logout as _logout,
|
122
|
+
)
|
123
|
+
from streamlit.commands.experimental_query_params import (
|
124
|
+
get_query_params as _get_query_params,
|
125
|
+
set_query_params as _set_query_params,
|
126
|
+
)
|
127
|
+
|
128
|
+
import streamlit.column_config as _column_config
|
129
|
+
|
130
|
+
# Modules that the user should have access to. These are imported with the "as" syntax
|
131
|
+
# and the same name; note that renaming the import with "as" does not make it an
|
132
|
+
# explicit export. In this case, you should import it with an underscore to make clear
|
133
|
+
# that it is internal and then assign it to a variable with the new intended name.
|
134
|
+
# You can check the export behavior by running 'mypy --strict example_app.py', which
|
135
|
+
# disables implicit_reexport, where you use the respective command in the example_app.py
|
136
|
+
# Streamlit app.
|
137
|
+
|
138
|
+
from streamlit.commands.echo import echo as echo
|
139
|
+
from streamlit.commands.logo import logo as logo
|
140
|
+
from streamlit.commands.navigation import navigation as navigation
|
141
|
+
from streamlit.navigation.page import Page as Page
|
142
|
+
from streamlit.elements.spinner import spinner as spinner
|
143
|
+
|
144
|
+
from streamlit.commands.page_config import set_page_config as set_page_config
|
145
|
+
from streamlit.commands.execution_control import (
|
146
|
+
stop as stop,
|
147
|
+
rerun as rerun,
|
148
|
+
switch_page as switch_page,
|
149
|
+
)
|
150
|
+
|
151
|
+
|
152
|
+
def _update_logger() -> None:
|
153
|
+
_logger.set_log_level(_config.get_option("logger.level").upper())
|
154
|
+
_logger.update_formatter()
|
155
|
+
_logger.init_tornado_logs()
|
156
|
+
|
157
|
+
|
158
|
+
# Make this file only depend on config option in an asynchronous manner. This
|
159
|
+
# avoids a race condition when another file (such as a test file) tries to pass
|
160
|
+
# in an alternative config.
|
161
|
+
_config.on_config_parsed(_update_logger, True)
|
162
|
+
|
163
|
+
secrets = _secrets_singleton
|
164
|
+
|
165
|
+
altair_chart = _main.altair_chart
|
166
|
+
area_chart = _main.area_chart
|
167
|
+
audio = _main.audio
|
168
|
+
audio_input = _main.audio_input
|
169
|
+
balloons = _main.balloons
|
170
|
+
bar_chart = _main.bar_chart
|
171
|
+
bokeh_chart = _main.bokeh_chart
|
172
|
+
button = _main.button
|
173
|
+
caption = _main.caption
|
174
|
+
camera_input = _main.camera_input
|
175
|
+
chat_message = _main.chat_message
|
176
|
+
chat_input = _main.chat_input
|
177
|
+
checkbox = _main.checkbox
|
178
|
+
code = _main.code
|
179
|
+
columns = _main.columns
|
180
|
+
tabs = _main.tabs
|
181
|
+
container = _main.container
|
182
|
+
dataframe = _main.dataframe
|
183
|
+
data_editor = _main.data_editor
|
184
|
+
date_input = _main.date_input
|
185
|
+
divider = _main.divider
|
186
|
+
download_button = _main.download_button
|
187
|
+
expander = _main.expander
|
188
|
+
feedback = _main.feedback
|
189
|
+
pydeck_chart = _main.pydeck_chart
|
190
|
+
empty = _main.empty
|
191
|
+
error = _main.error
|
192
|
+
exception = _main.exception
|
193
|
+
file_uploader = _main.file_uploader
|
194
|
+
form = _main.form
|
195
|
+
form_submit_button = _main.form_submit_button
|
196
|
+
graphviz_chart = _main.graphviz_chart
|
197
|
+
header = _main.header
|
198
|
+
help = _main.help
|
199
|
+
html = _main.html
|
200
|
+
image = _main.image
|
201
|
+
info = _main.info
|
202
|
+
json = _main.json
|
203
|
+
latex = _main.latex
|
204
|
+
line_chart = _main.line_chart
|
205
|
+
link_button = _main.link_button
|
206
|
+
map = _main.map
|
207
|
+
markdown = _main.markdown
|
208
|
+
metric = _main.metric
|
209
|
+
multiselect = _main.multiselect
|
210
|
+
number_input = _main.number_input
|
211
|
+
page_link = _main.page_link
|
212
|
+
pills = _main.pills
|
213
|
+
plotly_chart = _main.plotly_chart
|
214
|
+
popover = _main.popover
|
215
|
+
progress = _main.progress
|
216
|
+
pyplot = _main.pyplot
|
217
|
+
radio = _main.radio
|
218
|
+
scatter_chart = _main.scatter_chart
|
219
|
+
selectbox = _main.selectbox
|
220
|
+
select_slider = _main.select_slider
|
221
|
+
segmented_control = _main.segmented_control
|
222
|
+
slider = _main.slider
|
223
|
+
snow = _main.snow
|
224
|
+
subheader = _main.subheader
|
225
|
+
success = _main.success
|
226
|
+
table = _main.table
|
227
|
+
text = _main.text
|
228
|
+
text_area = _main.text_area
|
229
|
+
text_input = _main.text_input
|
230
|
+
toggle = _main.toggle
|
231
|
+
time_input = _main.time_input
|
232
|
+
title = _main.title
|
233
|
+
vega_lite_chart = _main.vega_lite_chart
|
234
|
+
video = _main.video
|
235
|
+
warning = _main.warning
|
236
|
+
write = _main.write
|
237
|
+
write_stream = _main.write_stream
|
238
|
+
color_picker = _main.color_picker
|
239
|
+
status = _main.status
|
240
|
+
|
241
|
+
# Events - Note: these methods cannot be called directly on sidebar
|
242
|
+
# (ex: st.sidebar.toast)
|
243
|
+
toast = _event.toast
|
244
|
+
|
245
|
+
# Config
|
246
|
+
# We add the metrics tracking here, since importing
|
247
|
+
# gather_metrics in config causes a circular dependency
|
248
|
+
get_option = _gather_metrics("get_option", _config.get_option)
|
249
|
+
set_option = _gather_metrics("set_option", _config.set_user_option)
|
250
|
+
|
251
|
+
# Session State
|
252
|
+
session_state = _SessionStateProxy()
|
253
|
+
|
254
|
+
query_params = _QueryParamsProxy()
|
255
|
+
|
256
|
+
context = _ContextProxy()
|
257
|
+
|
258
|
+
# Caching
|
259
|
+
cache_data = _cache_data
|
260
|
+
cache_resource = _cache_resource
|
261
|
+
# `st.cache` is deprecated and should be removed soon
|
262
|
+
cache = _cache
|
263
|
+
|
264
|
+
# Namespaces
|
265
|
+
column_config = _column_config
|
266
|
+
|
267
|
+
# Connection
|
268
|
+
connection = _connection
|
269
|
+
|
270
|
+
# Fragment and dialog
|
271
|
+
dialog = _dialog_decorator
|
272
|
+
fragment = _fragment
|
273
|
+
|
274
|
+
|
275
|
+
# Auth
|
276
|
+
login = _login
|
277
|
+
logout = _logout
|
278
|
+
|
279
|
+
# Experimental APIs
|
280
|
+
experimental_audio_input = _main.experimental_audio_input
|
281
|
+
experimental_dialog = _experimental_dialog_decorator
|
282
|
+
experimental_fragment = _experimental_fragment
|
283
|
+
experimental_user = _UserInfoProxy()
|
284
|
+
|
285
|
+
_EXPERIMENTAL_QUERY_PARAMS_DEPRECATE_MSG = "Refer to our [docs page](https://docs.streamlit.io/develop/api-reference/caching-and-state/st.query_params) for more information."
|
286
|
+
|
287
|
+
experimental_get_query_params = _deprecate_func_name(
|
288
|
+
_get_query_params,
|
289
|
+
"experimental_get_query_params",
|
290
|
+
"2024-04-11",
|
291
|
+
_EXPERIMENTAL_QUERY_PARAMS_DEPRECATE_MSG,
|
292
|
+
name_override="query_params",
|
293
|
+
)
|
294
|
+
experimental_set_query_params = _deprecate_func_name(
|
295
|
+
_set_query_params,
|
296
|
+
"experimental_set_query_params",
|
297
|
+
"2024-04-11",
|
298
|
+
_EXPERIMENTAL_QUERY_PARAMS_DEPRECATE_MSG,
|
299
|
+
name_override="query_params",
|
300
|
+
)
|
301
|
+
|
302
|
+
|
303
|
+
# make it possible to call streamlit.components.v1.html etc. by importing it here
|
304
|
+
# import in the very end to avoid partially-initialized module import errors, because
|
305
|
+
# streamlit.components.v1 also uses some streamlit imports
|
306
|
+
import streamlit.components.v1 # noqa: F401
|
streamlit/__main__.py
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from streamlit.web.cli import main
|
16
|
+
|
17
|
+
if __name__ == "__main__":
|
18
|
+
# Set prog_name so that the Streamlit server sees the same command line
|
19
|
+
# string whether streamlit is called directly or via `python -m streamlit`.
|
20
|
+
main(prog_name="streamlit")
|
streamlit/auth_util.py
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from collections.abc import Mapping
|
18
|
+
from datetime import datetime, timedelta, timezone
|
19
|
+
from typing import TYPE_CHECKING, Any, TypedDict, cast
|
20
|
+
|
21
|
+
from streamlit import config
|
22
|
+
from streamlit.errors import StreamlitAuthError
|
23
|
+
from streamlit.runtime.secrets import AttrDict, secrets_singleton
|
24
|
+
|
25
|
+
if TYPE_CHECKING:
|
26
|
+
|
27
|
+
class ProviderTokenPayload(TypedDict):
|
28
|
+
provider: str
|
29
|
+
exp: int
|
30
|
+
|
31
|
+
|
32
|
+
class AuthCache:
|
33
|
+
"""Simple cache implementation for storing info required for Authlib."""
|
34
|
+
|
35
|
+
def __init__(self):
|
36
|
+
self.cache = {}
|
37
|
+
|
38
|
+
def get(self, key):
|
39
|
+
return self.cache.get(key)
|
40
|
+
|
41
|
+
# for set method, we are follow the same signature used in Authlib
|
42
|
+
# the expires_in is not used in our case
|
43
|
+
def set(self, key, value, expires_in):
|
44
|
+
self.cache[key] = value
|
45
|
+
|
46
|
+
def get_dict(self):
|
47
|
+
return self.cache
|
48
|
+
|
49
|
+
def delete(self, key):
|
50
|
+
self.cache.pop(key, None)
|
51
|
+
|
52
|
+
|
53
|
+
def is_authlib_installed() -> bool:
|
54
|
+
"""Check if Authlib is installed."""
|
55
|
+
try:
|
56
|
+
import authlib # type: ignore[import-untyped]
|
57
|
+
|
58
|
+
authlib_version = authlib.__version__
|
59
|
+
authlib_version_tuple = tuple(map(int, authlib_version.split(".")))
|
60
|
+
|
61
|
+
if authlib_version_tuple < (1, 3, 2):
|
62
|
+
return False
|
63
|
+
except (ImportError, ModuleNotFoundError):
|
64
|
+
return False
|
65
|
+
return True
|
66
|
+
|
67
|
+
|
68
|
+
def get_signing_secret() -> str:
|
69
|
+
"""Get the cookie signing secret from the configuration or secrets.toml."""
|
70
|
+
signing_secret: str = config.get_option("server.cookieSecret")
|
71
|
+
if secrets_singleton.load_if_toml_exists():
|
72
|
+
auth_section = secrets_singleton.get("auth")
|
73
|
+
if auth_section:
|
74
|
+
signing_secret = auth_section.get("cookie_secret", signing_secret)
|
75
|
+
return signing_secret
|
76
|
+
|
77
|
+
|
78
|
+
def get_secrets_auth_section() -> AttrDict:
|
79
|
+
auth_section = AttrDict({})
|
80
|
+
"""Get the 'auth' section of the secrets.toml."""
|
81
|
+
if secrets_singleton.load_if_toml_exists():
|
82
|
+
auth_section = cast(AttrDict, secrets_singleton.get("auth"))
|
83
|
+
|
84
|
+
return auth_section
|
85
|
+
|
86
|
+
|
87
|
+
def encode_provider_token(provider: str) -> str:
|
88
|
+
"""Returns a signed JWT token with the provider and expiration time."""
|
89
|
+
try:
|
90
|
+
from authlib.jose import jwt # type: ignore[import-untyped]
|
91
|
+
except ImportError:
|
92
|
+
raise StreamlitAuthError(
|
93
|
+
"""To use authentication features, you need to install Authlib>=1.3.2, e.g. via `pip install Authlib`."""
|
94
|
+
) from None
|
95
|
+
|
96
|
+
header = {"alg": "HS256"}
|
97
|
+
payload = {
|
98
|
+
"provider": provider,
|
99
|
+
"exp": datetime.now(timezone.utc) + timedelta(minutes=2),
|
100
|
+
}
|
101
|
+
provider_token: bytes = jwt.encode(header, payload, get_signing_secret())
|
102
|
+
# JWT token is a byte string, so we need to decode it to a URL compatible string
|
103
|
+
return provider_token.decode("latin-1")
|
104
|
+
|
105
|
+
|
106
|
+
def decode_provider_token(provider_token: str) -> ProviderTokenPayload:
|
107
|
+
"""Decode the JWT token and validate the claims."""
|
108
|
+
try:
|
109
|
+
from authlib.jose import JoseError, JWTClaims, jwt
|
110
|
+
except ImportError:
|
111
|
+
raise StreamlitAuthError(
|
112
|
+
"""To use authentication features, you need to install Authlib>=1.3.2, e.g. via `pip install Authlib`."""
|
113
|
+
) from None
|
114
|
+
|
115
|
+
# Our JWT token is short-lived (2 minutes), so we check here that it contains
|
116
|
+
# the 'exp' (and it is not expired), and 'provider' field exists.
|
117
|
+
claim_options = {"exp": {"essential": True}, "provider": {"essential": True}}
|
118
|
+
try:
|
119
|
+
payload: JWTClaims = jwt.decode(
|
120
|
+
provider_token, get_signing_secret(), claims_options=claim_options
|
121
|
+
)
|
122
|
+
payload.validate()
|
123
|
+
except JoseError as e:
|
124
|
+
raise StreamlitAuthError(f"Error decoding provider token: {e}") from None
|
125
|
+
|
126
|
+
return cast("ProviderTokenPayload", payload)
|
127
|
+
|
128
|
+
|
129
|
+
def generate_default_provider_section(auth_section) -> dict[str, Any]:
|
130
|
+
"""Generate a default provider section for the 'auth' section of secrets.toml."""
|
131
|
+
default_provider_section = {}
|
132
|
+
if auth_section.get("client_id"):
|
133
|
+
default_provider_section["client_id"] = auth_section.get("client_id")
|
134
|
+
if auth_section.get("client_secret"):
|
135
|
+
default_provider_section["client_secret"] = auth_section.get("client_secret")
|
136
|
+
if auth_section.get("server_metadata_url"):
|
137
|
+
default_provider_section["server_metadata_url"] = auth_section.get(
|
138
|
+
"server_metadata_url"
|
139
|
+
)
|
140
|
+
if auth_section.get("client_kwargs"):
|
141
|
+
default_provider_section["client_kwargs"] = auth_section.get(
|
142
|
+
"client_kwargs"
|
143
|
+
).to_dict()
|
144
|
+
return default_provider_section
|
145
|
+
|
146
|
+
|
147
|
+
def validate_auth_credentials(provider: str) -> None:
|
148
|
+
"""Validate the general auth credentials and auth credentials for the given
|
149
|
+
provider."""
|
150
|
+
if not secrets_singleton.load_if_toml_exists():
|
151
|
+
raise StreamlitAuthError(
|
152
|
+
"""To use authentication features you need to configure credentials for at
|
153
|
+
least one authentication provider in `.streamlit/secrets.toml`."""
|
154
|
+
)
|
155
|
+
|
156
|
+
auth_section = secrets_singleton.get("auth")
|
157
|
+
if auth_section is None:
|
158
|
+
raise StreamlitAuthError(
|
159
|
+
"""To use authentication features you need to configure credentials for at
|
160
|
+
least one authentication provider in `.streamlit/secrets.toml`."""
|
161
|
+
)
|
162
|
+
if "redirect_uri" not in auth_section:
|
163
|
+
raise StreamlitAuthError(
|
164
|
+
"""Authentication credentials in `.streamlit/secrets.toml` are missing the
|
165
|
+
"redirect_uri" key. Please check your configuration."""
|
166
|
+
)
|
167
|
+
if "cookie_secret" not in auth_section:
|
168
|
+
raise StreamlitAuthError(
|
169
|
+
"""Authentication credentials in `.streamlit/secrets.toml` are missing the
|
170
|
+
"cookie_secret" key. Please check your configuration."""
|
171
|
+
)
|
172
|
+
|
173
|
+
provider_section = auth_section.get(provider)
|
174
|
+
|
175
|
+
# TODO(kajarenc): Revisit this check later when investigating the ability
|
176
|
+
# TODO(kajarenc): to add "_" to the provider name.
|
177
|
+
if "_" in provider:
|
178
|
+
raise StreamlitAuthError(
|
179
|
+
f'Auth provider name "{provider}" contains an underscore. '
|
180
|
+
f"Please use a provider name without underscores."
|
181
|
+
)
|
182
|
+
|
183
|
+
if provider_section is None and provider == "default":
|
184
|
+
provider_section = generate_default_provider_section(auth_section)
|
185
|
+
|
186
|
+
if provider_section is None:
|
187
|
+
if provider == "default":
|
188
|
+
raise StreamlitAuthError(
|
189
|
+
"""Authentication credentials in `.streamlit/secrets.toml` are missing for
|
190
|
+
the default authentication provider. Please check your configuration."""
|
191
|
+
)
|
192
|
+
raise StreamlitAuthError(
|
193
|
+
f"Authentication credentials in `.streamlit/secrets.toml` are missing for "
|
194
|
+
f'the authentication provider "{provider}". Please check your '
|
195
|
+
f"configuration."
|
196
|
+
)
|
197
|
+
|
198
|
+
if not isinstance(provider_section, Mapping):
|
199
|
+
raise StreamlitAuthError(
|
200
|
+
f"Authentication credentials in `.streamlit/secrets.toml` for the "
|
201
|
+
f'authentication provider "{provider}" must be valid TOML. Please check '
|
202
|
+
f"your configuration."
|
203
|
+
)
|
204
|
+
|
205
|
+
required_keys = ["client_id", "client_secret", "server_metadata_url"]
|
206
|
+
missing_keys = [key for key in required_keys if key not in provider_section]
|
207
|
+
if missing_keys:
|
208
|
+
if provider == "default":
|
209
|
+
raise StreamlitAuthError(
|
210
|
+
"Authentication credentials in `.streamlit/secrets.toml` for the "
|
211
|
+
f"default authentication provider are missing the following keys: "
|
212
|
+
f"{missing_keys}. Please check your configuration."
|
213
|
+
)
|
214
|
+
raise StreamlitAuthError(
|
215
|
+
"Authentication credentials in `.streamlit/secrets.toml` for the "
|
216
|
+
f'authentication provider "{provider}" are missing the following keys: '
|
217
|
+
f"{missing_keys}. Please check your configuration."
|
218
|
+
)
|
streamlit/cli_util.py
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
"""Utilities related to the CLI."""
|
16
|
+
|
17
|
+
from __future__ import annotations
|
18
|
+
|
19
|
+
import os
|
20
|
+
import subprocess
|
21
|
+
|
22
|
+
from streamlit import env_util, errors
|
23
|
+
|
24
|
+
|
25
|
+
def print_to_cli(message: str, **kwargs) -> None:
|
26
|
+
"""Print a message to the terminal using click if available, else print
|
27
|
+
using the built-in print function.
|
28
|
+
|
29
|
+
You can provide any keyword arguments that click.secho supports.
|
30
|
+
"""
|
31
|
+
try:
|
32
|
+
import click
|
33
|
+
|
34
|
+
click.secho(message, **kwargs)
|
35
|
+
except ImportError:
|
36
|
+
print(message, flush=True) # noqa: T201
|
37
|
+
|
38
|
+
|
39
|
+
def style_for_cli(message: str, **kwargs) -> str:
|
40
|
+
"""Style a message using click if available, else return the message
|
41
|
+
unchanged.
|
42
|
+
|
43
|
+
You can provide any keyword arguments that click.style supports.
|
44
|
+
"""
|
45
|
+
|
46
|
+
try:
|
47
|
+
import click
|
48
|
+
|
49
|
+
return click.style(message, **kwargs)
|
50
|
+
except ImportError:
|
51
|
+
return message
|
52
|
+
|
53
|
+
|
54
|
+
def _open_browser_with_webbrowser(url: str) -> None:
|
55
|
+
import webbrowser
|
56
|
+
|
57
|
+
webbrowser.open(url)
|
58
|
+
|
59
|
+
|
60
|
+
def _open_browser_with_command(command: str, url: str) -> None:
|
61
|
+
cmd_line = [command, url]
|
62
|
+
with open(os.devnull, "w") as devnull:
|
63
|
+
subprocess.Popen(cmd_line, stdout=devnull, stderr=subprocess.STDOUT)
|
64
|
+
|
65
|
+
|
66
|
+
def open_browser(url: str) -> None:
|
67
|
+
"""Open a web browser pointing to a given URL.
|
68
|
+
|
69
|
+
We use this function instead of Python's `webbrowser` module because this
|
70
|
+
way we can capture stdout/stderr to avoid polluting the terminal with the
|
71
|
+
browser's messages. For example, Chrome always prints things like "Created
|
72
|
+
new window in existing browser session", and those get on the user's way.
|
73
|
+
|
74
|
+
url : str
|
75
|
+
The URL. Must include the protocol.
|
76
|
+
|
77
|
+
"""
|
78
|
+
# Treat Windows separately because:
|
79
|
+
# 1. /dev/null doesn't exist.
|
80
|
+
# 2. subprocess.Popen(['start', url]) doesn't actually pop up the
|
81
|
+
# browser even though 'start url' works from the command prompt.
|
82
|
+
# Fun!
|
83
|
+
# Also, use webbrowser if we are on Linux and xdg-open is not installed.
|
84
|
+
#
|
85
|
+
# We don't use the webbrowser module on Linux and Mac because some browsers
|
86
|
+
# (ahem... Chrome) always print "Opening in existing browser session" to
|
87
|
+
# the terminal, which is spammy and annoying. So instead we start the
|
88
|
+
# browser ourselves and send all its output to /dev/null.
|
89
|
+
|
90
|
+
if env_util.IS_WINDOWS:
|
91
|
+
_open_browser_with_webbrowser(url)
|
92
|
+
return
|
93
|
+
if env_util.IS_LINUX_OR_BSD:
|
94
|
+
if env_util.is_executable_in_path("xdg-open"):
|
95
|
+
_open_browser_with_command("xdg-open", url)
|
96
|
+
return
|
97
|
+
_open_browser_with_webbrowser(url)
|
98
|
+
return
|
99
|
+
if env_util.IS_DARWIN:
|
100
|
+
_open_browser_with_command("open", url)
|
101
|
+
return
|
102
|
+
|
103
|
+
import platform
|
104
|
+
|
105
|
+
raise errors.Error(f'Cannot open browser in platform "{platform.system()}"')
|