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
@@ -0,0 +1,1050 @@
|
|
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
|
+
from __future__ import annotations
|
15
|
+
|
16
|
+
import inspect
|
17
|
+
import tempfile
|
18
|
+
import textwrap
|
19
|
+
import traceback
|
20
|
+
from pathlib import Path
|
21
|
+
from typing import TYPE_CHECKING, Any, Callable
|
22
|
+
from unittest.mock import MagicMock
|
23
|
+
from urllib import parse
|
24
|
+
|
25
|
+
from streamlit.runtime import Runtime
|
26
|
+
from streamlit.runtime.caching.storage.dummy_cache_storage import (
|
27
|
+
MemoryCacheStorageManager,
|
28
|
+
)
|
29
|
+
from streamlit.runtime.media_file_manager import MediaFileManager
|
30
|
+
from streamlit.runtime.memory_media_file_storage import MemoryMediaFileStorage
|
31
|
+
from streamlit.runtime.pages_manager import PagesManager
|
32
|
+
from streamlit.runtime.scriptrunner.script_cache import ScriptCache
|
33
|
+
from streamlit.runtime.secrets import Secrets
|
34
|
+
from streamlit.runtime.state.common import TESTING_KEY
|
35
|
+
from streamlit.runtime.state.safe_session_state import SafeSessionState
|
36
|
+
from streamlit.runtime.state.session_state import SessionState
|
37
|
+
from streamlit.source_util import page_icon_and_name
|
38
|
+
from streamlit.testing.v1.element_tree import (
|
39
|
+
Block,
|
40
|
+
Button,
|
41
|
+
ButtonGroup,
|
42
|
+
Caption,
|
43
|
+
ChatInput,
|
44
|
+
ChatMessage,
|
45
|
+
Checkbox,
|
46
|
+
Code,
|
47
|
+
ColorPicker,
|
48
|
+
Column,
|
49
|
+
Dataframe,
|
50
|
+
DateInput,
|
51
|
+
Divider,
|
52
|
+
ElementList,
|
53
|
+
ElementTree,
|
54
|
+
Error,
|
55
|
+
Exception,
|
56
|
+
Expander,
|
57
|
+
Header,
|
58
|
+
Info,
|
59
|
+
Json,
|
60
|
+
Latex,
|
61
|
+
Markdown,
|
62
|
+
Metric,
|
63
|
+
Multiselect,
|
64
|
+
Node,
|
65
|
+
NumberInput,
|
66
|
+
Radio,
|
67
|
+
Selectbox,
|
68
|
+
SelectSlider,
|
69
|
+
Slider,
|
70
|
+
Status,
|
71
|
+
Subheader,
|
72
|
+
Success,
|
73
|
+
Tab,
|
74
|
+
Table,
|
75
|
+
Text,
|
76
|
+
TextArea,
|
77
|
+
TextInput,
|
78
|
+
TimeInput,
|
79
|
+
Title,
|
80
|
+
Toast,
|
81
|
+
Toggle,
|
82
|
+
Warning,
|
83
|
+
WidgetList,
|
84
|
+
repr_,
|
85
|
+
)
|
86
|
+
from streamlit.testing.v1.local_script_runner import LocalScriptRunner
|
87
|
+
from streamlit.testing.v1.util import patch_config_options
|
88
|
+
from streamlit.util import calc_md5
|
89
|
+
|
90
|
+
if TYPE_CHECKING:
|
91
|
+
from collections.abc import Sequence
|
92
|
+
|
93
|
+
from streamlit.proto.WidgetStates_pb2 import WidgetStates
|
94
|
+
|
95
|
+
TMP_DIR = tempfile.TemporaryDirectory()
|
96
|
+
|
97
|
+
|
98
|
+
class AppTest:
|
99
|
+
"""
|
100
|
+
A simulated Streamlit app to check the correctness of displayed\
|
101
|
+
elements and outputs.
|
102
|
+
|
103
|
+
An instance of ``AppTest`` simulates a running Streamlit app. This class
|
104
|
+
provides methods to set up, manipulate, and inspect the app contents via
|
105
|
+
API instead of a browser UI. It can be used to write automated tests of an
|
106
|
+
app in various scenarios. These can then be run using a tool like pytest.
|
107
|
+
|
108
|
+
``AppTest`` can be initialized by one of three class methods:
|
109
|
+
|
110
|
+
* |st.testing.v1.AppTest.from_file|_ (recommended)
|
111
|
+
* |st.testing.v1.AppTest.from_string|_
|
112
|
+
* |st.testing.v1.AppTest.from_function|_
|
113
|
+
|
114
|
+
Once initialized, Session State and widget values can be updated and the
|
115
|
+
script can be run. Unlike an actual live-running Streamlit app, you need to
|
116
|
+
call ``AppTest.run()`` explicitly to re-run the app after changing a widget
|
117
|
+
value. Switching pages also requires an explicit, follow-up call to
|
118
|
+
``AppTest.run()``.
|
119
|
+
|
120
|
+
``AppTest`` enables developers to build tests on their app as-is, in the
|
121
|
+
familiar python test format, without major refactoring or abstracting out
|
122
|
+
logic to be tested separately from the UI. Tests can run quickly with very
|
123
|
+
low overhead. A typical pattern is to build a suite of tests for an app
|
124
|
+
that ensure consistent functionality as the app evolves, and run the tests
|
125
|
+
locally and/or in a CI environment like Github Actions.
|
126
|
+
|
127
|
+
.. note::
|
128
|
+
``AppTest`` only supports testing a single page of an app per
|
129
|
+
instance. For multipage apps, each page will need to be tested
|
130
|
+
separately. ``AppTest`` is not yet compatible with multipage apps
|
131
|
+
using ``st.navigation`` and ``st.Page``.
|
132
|
+
|
133
|
+
.. |st.testing.v1.AppTest.from_file| replace:: ``st.testing.v1.AppTest.from_file``
|
134
|
+
.. _st.testing.v1.AppTest.from_file: #apptestfrom_file
|
135
|
+
.. |st.testing.v1.AppTest.from_string| replace:: ``st.testing.v1.AppTest.from_string``
|
136
|
+
.. _st.testing.v1.AppTest.from_string: #apptestfrom_string
|
137
|
+
.. |st.testing.v1.AppTest.from_function| replace:: ``st.testing.v1.AppTest.from_function``
|
138
|
+
.. _st.testing.v1.AppTest.from_function: #apptestfrom_function
|
139
|
+
|
140
|
+
Attributes
|
141
|
+
----------
|
142
|
+
secrets: dict[str, Any]
|
143
|
+
Dictionary of secrets to be used the simulated app. Use dict-like
|
144
|
+
syntax to set secret values for the simulated app.
|
145
|
+
|
146
|
+
session_state: SafeSessionState
|
147
|
+
Session State for the simulated app. SafeSessionState object supports
|
148
|
+
read and write operations as usual for Streamlit apps.
|
149
|
+
|
150
|
+
query_params: dict[str, Any]
|
151
|
+
Dictionary of query parameters to be used by the simluated app. Use
|
152
|
+
dict-like syntax to set ``query_params`` values for the simulated app.
|
153
|
+
"""
|
154
|
+
|
155
|
+
def __init__(
|
156
|
+
self,
|
157
|
+
script_path: str | Path,
|
158
|
+
*,
|
159
|
+
default_timeout: float,
|
160
|
+
args=None,
|
161
|
+
kwargs=None,
|
162
|
+
):
|
163
|
+
self._script_path = str(script_path)
|
164
|
+
self.default_timeout = default_timeout
|
165
|
+
session_state = SessionState()
|
166
|
+
session_state[TESTING_KEY] = {}
|
167
|
+
self.session_state = SafeSessionState(session_state, lambda: None)
|
168
|
+
self.query_params: dict[str, Any] = {}
|
169
|
+
self.secrets: dict[str, Any] = {}
|
170
|
+
self.args = args
|
171
|
+
self.kwargs = kwargs
|
172
|
+
self._page_hash = ""
|
173
|
+
|
174
|
+
tree = ElementTree()
|
175
|
+
tree._runner = self
|
176
|
+
self._tree = tree
|
177
|
+
|
178
|
+
@classmethod
|
179
|
+
def from_string(cls, script: str, *, default_timeout: float = 3) -> AppTest:
|
180
|
+
"""
|
181
|
+
Create an instance of ``AppTest`` to simulate an app page defined\
|
182
|
+
within a string.
|
183
|
+
|
184
|
+
This is useful for testing short scripts that fit comfortably as an
|
185
|
+
inline string in the test itself, without having to create a separate
|
186
|
+
file for it. The script must be executable on its own and so must
|
187
|
+
contain all necessary imports.
|
188
|
+
|
189
|
+
Parameters
|
190
|
+
----------
|
191
|
+
script: str
|
192
|
+
The string contents of the script to be run.
|
193
|
+
|
194
|
+
default_timeout: float
|
195
|
+
Default time in seconds before a script run is timed out. Can be
|
196
|
+
overridden for individual ``.run()`` calls.
|
197
|
+
|
198
|
+
Returns
|
199
|
+
-------
|
200
|
+
AppTest
|
201
|
+
A simulated Streamlit app for testing. The simulated app can be
|
202
|
+
executed via ``.run()``.
|
203
|
+
|
204
|
+
"""
|
205
|
+
return cls._from_string(script, default_timeout=default_timeout)
|
206
|
+
|
207
|
+
@classmethod
|
208
|
+
def _from_string(
|
209
|
+
cls, script: str, *, default_timeout: float = 3, args=None, kwargs=None
|
210
|
+
) -> AppTest:
|
211
|
+
script_name = calc_md5(bytes(script, "utf-8"))
|
212
|
+
|
213
|
+
path = Path(TMP_DIR.name, script_name)
|
214
|
+
aligned_script = textwrap.dedent(script)
|
215
|
+
path.write_text(aligned_script)
|
216
|
+
return AppTest(
|
217
|
+
str(path), default_timeout=default_timeout, args=args, kwargs=kwargs
|
218
|
+
)
|
219
|
+
|
220
|
+
@classmethod
|
221
|
+
def from_function(
|
222
|
+
cls,
|
223
|
+
script: Callable[..., Any],
|
224
|
+
*,
|
225
|
+
default_timeout: float = 3,
|
226
|
+
args=None,
|
227
|
+
kwargs=None,
|
228
|
+
) -> AppTest:
|
229
|
+
"""
|
230
|
+
Create an instance of ``AppTest`` to simulate an app page defined\
|
231
|
+
within a function.
|
232
|
+
|
233
|
+
This is similar to ``AppTest.from_string()``, but more convenient to
|
234
|
+
write with IDE assistance. The script must be executable on its own and
|
235
|
+
so must contain all necessary imports.
|
236
|
+
|
237
|
+
Parameters
|
238
|
+
----------
|
239
|
+
script: Callable
|
240
|
+
A function whose body will be used as a script. Must be runnable
|
241
|
+
in isolation, so it must include any necessary imports.
|
242
|
+
|
243
|
+
default_timeout: float
|
244
|
+
Default time in seconds before a script run is timed out. Can be
|
245
|
+
overridden for individual ``.run()`` calls.
|
246
|
+
|
247
|
+
args: tuple
|
248
|
+
An optional tuple of args to pass to the script function.
|
249
|
+
|
250
|
+
kwargs: dict
|
251
|
+
An optional dict of kwargs to pass to the script function.
|
252
|
+
|
253
|
+
Returns
|
254
|
+
-------
|
255
|
+
AppTest
|
256
|
+
A simulated Streamlit app for testing. The simulated app can be
|
257
|
+
executed via ``.run()``.
|
258
|
+
|
259
|
+
"""
|
260
|
+
source_lines, _ = inspect.getsourcelines(script)
|
261
|
+
source = textwrap.dedent("".join(source_lines))
|
262
|
+
module = source + f"\n{script.__name__}(*__args, **__kwargs)"
|
263
|
+
return cls._from_string(
|
264
|
+
module, default_timeout=default_timeout, args=args, kwargs=kwargs
|
265
|
+
)
|
266
|
+
|
267
|
+
@classmethod
|
268
|
+
def from_file(
|
269
|
+
cls, script_path: str | Path, *, default_timeout: float = 3
|
270
|
+
) -> AppTest:
|
271
|
+
"""
|
272
|
+
Create an instance of ``AppTest`` to simulate an app page defined\
|
273
|
+
within a file.
|
274
|
+
|
275
|
+
This option is most convenient for CI workflows and testing of
|
276
|
+
published apps. The script must be executable on its own and so must
|
277
|
+
contain all necessary imports.
|
278
|
+
|
279
|
+
Parameters
|
280
|
+
----------
|
281
|
+
script_path: str | Path
|
282
|
+
Path to a script file. The path should be absolute or relative to
|
283
|
+
the file calling ``.from_file``.
|
284
|
+
|
285
|
+
default_timeout: float
|
286
|
+
Default time in seconds before a script run is timed out. Can be
|
287
|
+
overridden for individual ``.run()`` calls.
|
288
|
+
|
289
|
+
Returns
|
290
|
+
-------
|
291
|
+
AppTest
|
292
|
+
A simulated Streamlit app for testing. The simulated app can be
|
293
|
+
executed via ``.run()``.
|
294
|
+
"""
|
295
|
+
script_path = Path(script_path)
|
296
|
+
if script_path.is_file():
|
297
|
+
path = script_path
|
298
|
+
else:
|
299
|
+
# TODO: Make this not super fragile
|
300
|
+
# Attempt to find the test file calling this method, so the
|
301
|
+
# path can be relative to there.
|
302
|
+
stack = traceback.StackSummary.extract(traceback.walk_stack(None))
|
303
|
+
filepath = Path(stack[1].filename)
|
304
|
+
path = filepath.parent / script_path
|
305
|
+
return AppTest(path, default_timeout=default_timeout)
|
306
|
+
|
307
|
+
def _run(
|
308
|
+
self,
|
309
|
+
widget_state: WidgetStates | None = None,
|
310
|
+
timeout: float | None = None,
|
311
|
+
) -> AppTest:
|
312
|
+
"""Run the script, and parse the output messages for querying
|
313
|
+
and interaction.
|
314
|
+
|
315
|
+
Timeout is in seconds, or None to use the default timeout of the runner.
|
316
|
+
"""
|
317
|
+
# Have to import the streamlit module itself so replacing st.secrets
|
318
|
+
# is visible to other modules.
|
319
|
+
import streamlit as st
|
320
|
+
|
321
|
+
if timeout is None:
|
322
|
+
timeout = self.default_timeout
|
323
|
+
|
324
|
+
# setup
|
325
|
+
mock_runtime = MagicMock(spec=Runtime)
|
326
|
+
mock_runtime.media_file_mgr = MediaFileManager(
|
327
|
+
MemoryMediaFileStorage("/mock/media")
|
328
|
+
)
|
329
|
+
mock_runtime.cache_storage_manager = MemoryCacheStorageManager()
|
330
|
+
Runtime._instance = mock_runtime
|
331
|
+
script_cache = ScriptCache()
|
332
|
+
pages_manager = PagesManager(
|
333
|
+
self._script_path, script_cache, setup_watcher=False
|
334
|
+
)
|
335
|
+
|
336
|
+
saved_secrets: Secrets = st.secrets
|
337
|
+
# Only modify global secrets stuff if we have been given secrets
|
338
|
+
if self.secrets:
|
339
|
+
new_secrets = Secrets()
|
340
|
+
new_secrets._secrets = self.secrets
|
341
|
+
st.secrets = new_secrets
|
342
|
+
|
343
|
+
script_runner = LocalScriptRunner(
|
344
|
+
self._script_path,
|
345
|
+
self.session_state,
|
346
|
+
pages_manager,
|
347
|
+
args=self.args,
|
348
|
+
kwargs=self.kwargs,
|
349
|
+
)
|
350
|
+
with patch_config_options({"global.appTest": True}):
|
351
|
+
self._tree = script_runner.run(
|
352
|
+
widget_state, self.query_params, timeout, self._page_hash
|
353
|
+
)
|
354
|
+
self._tree._runner = self
|
355
|
+
# Last event is SHUTDOWN, so the corresponding data includes query string
|
356
|
+
query_string = script_runner.event_data[-1]["client_state"].query_string
|
357
|
+
self.query_params = parse.parse_qs(query_string)
|
358
|
+
|
359
|
+
if self.secrets:
|
360
|
+
if st.secrets._secrets is not None:
|
361
|
+
self.secrets = dict(st.secrets._secrets)
|
362
|
+
st.secrets = saved_secrets
|
363
|
+
Runtime._instance = None
|
364
|
+
|
365
|
+
return self
|
366
|
+
|
367
|
+
def run(self, *, timeout: float | None = None) -> AppTest:
|
368
|
+
"""Run the script from the current state.
|
369
|
+
|
370
|
+
This is equivalent to manually rerunning the app or the rerun that
|
371
|
+
occurs upon user interaction. ``AppTest.run()`` must be manually called
|
372
|
+
after updating a widget value or switching pages as script reruns do
|
373
|
+
not occur automatically as they do for live-running Streamlit apps.
|
374
|
+
|
375
|
+
Parameters
|
376
|
+
----------
|
377
|
+
timeout : float or None
|
378
|
+
The maximum number of seconds to run the script. If ``timeout`` is
|
379
|
+
``None`` (default), Streamlit uses the default timeout set for the
|
380
|
+
instance of ``AppTest``.
|
381
|
+
|
382
|
+
Returns
|
383
|
+
-------
|
384
|
+
AppTest
|
385
|
+
self
|
386
|
+
|
387
|
+
"""
|
388
|
+
return self._tree.run(timeout=timeout)
|
389
|
+
|
390
|
+
def switch_page(self, page_path: str) -> AppTest:
|
391
|
+
"""Switch to another page of the app.
|
392
|
+
|
393
|
+
This method does not automatically rerun the app. Use a follow-up call
|
394
|
+
to ``AppTest.run()`` to obtain the elements on the selected page.
|
395
|
+
|
396
|
+
Parameters
|
397
|
+
----------
|
398
|
+
page_path: str
|
399
|
+
Path of the page to switch to. The path must be relative to the
|
400
|
+
main script's location (e.g. ``"pages/my_page.py"``).
|
401
|
+
|
402
|
+
Returns
|
403
|
+
-------
|
404
|
+
AppTest
|
405
|
+
self
|
406
|
+
|
407
|
+
"""
|
408
|
+
main_dir = Path(self._script_path).parent
|
409
|
+
full_page_path = main_dir / page_path
|
410
|
+
if not full_page_path.is_file():
|
411
|
+
raise ValueError(
|
412
|
+
f"Unable to find script at {page_path}, make sure the page given is relative to the main script."
|
413
|
+
)
|
414
|
+
page_path_str = str(full_page_path.resolve())
|
415
|
+
_, page_name = page_icon_and_name(Path(page_path_str))
|
416
|
+
self._page_hash = calc_md5(page_name)
|
417
|
+
return self
|
418
|
+
|
419
|
+
@property
|
420
|
+
def main(self) -> Block:
|
421
|
+
"""Sequence of elements within the main body of the app.
|
422
|
+
|
423
|
+
Returns
|
424
|
+
-------
|
425
|
+
Block
|
426
|
+
A container of elements. Block can be queried for elements in the
|
427
|
+
same manner as ``AppTest``. For example, ``Block.checkbox`` will
|
428
|
+
return all ``st.checkbox`` within the associated container.
|
429
|
+
"""
|
430
|
+
return self._tree.main
|
431
|
+
|
432
|
+
@property
|
433
|
+
def sidebar(self) -> Block:
|
434
|
+
"""Sequence of all elements within ``st.sidebar``.
|
435
|
+
|
436
|
+
Returns
|
437
|
+
-------
|
438
|
+
Block
|
439
|
+
A container of elements. Block can be queried for elements in the
|
440
|
+
same manner as ``AppTest``. For example, ``Block.checkbox`` will
|
441
|
+
return all ``st.checkbox`` within the associated container.
|
442
|
+
"""
|
443
|
+
return self._tree.sidebar
|
444
|
+
|
445
|
+
@property
|
446
|
+
def button(self) -> WidgetList[Button]:
|
447
|
+
"""Sequence of all ``st.button`` and ``st.form_submit_button`` widgets.
|
448
|
+
|
449
|
+
Returns
|
450
|
+
-------
|
451
|
+
WidgetList of Button
|
452
|
+
Sequence of all ``st.button`` and ``st.form_submit_button``
|
453
|
+
widgets. Individual widgets can be accessed from a WidgetList by
|
454
|
+
index (order on the page) or key. For example, ``at.button[0]`` for
|
455
|
+
the first widget or ``at.button(key="my_key")`` for a widget with a
|
456
|
+
given key.
|
457
|
+
"""
|
458
|
+
return self._tree.button
|
459
|
+
|
460
|
+
@property
|
461
|
+
def button_group(self) -> WidgetList[ButtonGroup[Any]]:
|
462
|
+
"""Sequence of all ``st.feedback`` widgets.
|
463
|
+
|
464
|
+
Returns
|
465
|
+
-------
|
466
|
+
WidgetList of ButtonGroup
|
467
|
+
Sequence of all ``st.feedback`` widgets. Individual widgets can be
|
468
|
+
accessed from a WidgetList by index (order on the page) or key. For
|
469
|
+
example, ``at.button_group[0]`` for the first widget or
|
470
|
+
``at.button_group(key="my_key")`` for a widget with a given key.
|
471
|
+
"""
|
472
|
+
return self._tree.button_group
|
473
|
+
|
474
|
+
@property
|
475
|
+
def caption(self) -> ElementList[Caption]:
|
476
|
+
"""Sequence of all ``st.caption`` elements.
|
477
|
+
|
478
|
+
Returns
|
479
|
+
-------
|
480
|
+
ElementList of Caption
|
481
|
+
Sequence of all ``st.caption`` elements. Individual elements can be
|
482
|
+
accessed from an ElementList by index (order on the page). For
|
483
|
+
example, ``at.caption[0]`` for the first element. Caption is an
|
484
|
+
extension of the Element class.
|
485
|
+
"""
|
486
|
+
return self._tree.caption
|
487
|
+
|
488
|
+
@property
|
489
|
+
def chat_input(self) -> WidgetList[ChatInput]:
|
490
|
+
"""Sequence of all ``st.chat_input`` widgets.
|
491
|
+
|
492
|
+
Returns
|
493
|
+
-------
|
494
|
+
WidgetList of ChatInput
|
495
|
+
Sequence of all ``st.chat_input`` widgets. Individual widgets can
|
496
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
497
|
+
For example, ``at.chat_input[0]`` for the first widget or
|
498
|
+
``at.chat_input(key="my_key")`` for a widget with a given key.
|
499
|
+
"""
|
500
|
+
return self._tree.chat_input
|
501
|
+
|
502
|
+
@property
|
503
|
+
def chat_message(self) -> Sequence[ChatMessage]:
|
504
|
+
"""Sequence of all ``st.chat_message`` elements.
|
505
|
+
|
506
|
+
Returns
|
507
|
+
-------
|
508
|
+
Sequence of ChatMessage
|
509
|
+
Sequence of all ``st.chat_message`` elements. Individual elements can be
|
510
|
+
accessed from an ElementList by index (order on the page). For
|
511
|
+
example, ``at.chat_message[0]`` for the first element. ChatMessage
|
512
|
+
is an extension of the Block class.
|
513
|
+
"""
|
514
|
+
return self._tree.chat_message
|
515
|
+
|
516
|
+
@property
|
517
|
+
def checkbox(self) -> WidgetList[Checkbox]:
|
518
|
+
"""Sequence of all ``st.checkbox`` widgets.
|
519
|
+
|
520
|
+
Returns
|
521
|
+
-------
|
522
|
+
WidgetList of Checkbox
|
523
|
+
Sequence of all ``st.checkbox`` widgets. Individual widgets can
|
524
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
525
|
+
For example, ``at.checkbox[0]`` for the first widget or
|
526
|
+
``at.checkbox(key="my_key")`` for a widget with a given key.
|
527
|
+
"""
|
528
|
+
return self._tree.checkbox
|
529
|
+
|
530
|
+
@property
|
531
|
+
def code(self) -> ElementList[Code]:
|
532
|
+
"""Sequence of all ``st.code`` elements.
|
533
|
+
|
534
|
+
Returns
|
535
|
+
-------
|
536
|
+
ElementList of Code
|
537
|
+
Sequence of all ``st.code`` elements. Individual elements can be
|
538
|
+
accessed from an ElementList by index (order on the page). For
|
539
|
+
example, ``at.code[0]`` for the first element. Code is an
|
540
|
+
extension of the Element class.
|
541
|
+
"""
|
542
|
+
return self._tree.code
|
543
|
+
|
544
|
+
@property
|
545
|
+
def color_picker(self) -> WidgetList[ColorPicker]:
|
546
|
+
"""Sequence of all ``st.color_picker`` widgets.
|
547
|
+
|
548
|
+
Returns
|
549
|
+
-------
|
550
|
+
WidgetList of ColorPicker
|
551
|
+
Sequence of all ``st.color_picker`` widgets. Individual widgets can
|
552
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
553
|
+
For example, ``at.color_picker[0]`` for the first widget or
|
554
|
+
``at.color_picker(key="my_key")`` for a widget with a given key.
|
555
|
+
"""
|
556
|
+
return self._tree.color_picker
|
557
|
+
|
558
|
+
@property
|
559
|
+
def columns(self) -> Sequence[Column]:
|
560
|
+
"""Sequence of all columns within ``st.columns`` elements.
|
561
|
+
|
562
|
+
Each column within a single ``st.columns`` will be returned as a
|
563
|
+
separate Column in the Sequence.
|
564
|
+
|
565
|
+
Returns
|
566
|
+
-------
|
567
|
+
Sequence of Column
|
568
|
+
Sequence of all columns within ``st.columns`` elements. Individual
|
569
|
+
columns can be accessed from an ElementList by index (order on the
|
570
|
+
page). For example, ``at.columns[0]`` for the first column. Column
|
571
|
+
is an extension of the Block class.
|
572
|
+
"""
|
573
|
+
return self._tree.columns
|
574
|
+
|
575
|
+
@property
|
576
|
+
def dataframe(self) -> ElementList[Dataframe]:
|
577
|
+
"""Sequence of all ``st.dataframe`` elements.
|
578
|
+
|
579
|
+
Returns
|
580
|
+
-------
|
581
|
+
ElementList of Dataframe
|
582
|
+
Sequence of all ``st.dataframe`` elements. Individual elements can be
|
583
|
+
accessed from an ElementList by index (order on the page). For
|
584
|
+
example, ``at.dataframe[0]`` for the first element. Dataframe is an
|
585
|
+
extension of the Element class.
|
586
|
+
"""
|
587
|
+
return self._tree.dataframe
|
588
|
+
|
589
|
+
@property
|
590
|
+
def date_input(self) -> WidgetList[DateInput]:
|
591
|
+
"""Sequence of all ``st.date_input`` widgets.
|
592
|
+
|
593
|
+
Returns
|
594
|
+
-------
|
595
|
+
WidgetList of DateInput
|
596
|
+
Sequence of all ``st.date_input`` widgets. Individual widgets can
|
597
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
598
|
+
For example, ``at.date_input[0]`` for the first widget or
|
599
|
+
``at.date_input(key="my_key")`` for a widget with a given key.
|
600
|
+
"""
|
601
|
+
return self._tree.date_input
|
602
|
+
|
603
|
+
@property
|
604
|
+
def divider(self) -> ElementList[Divider]:
|
605
|
+
"""Sequence of all ``st.divider`` elements.
|
606
|
+
|
607
|
+
Returns
|
608
|
+
-------
|
609
|
+
ElementList of Divider
|
610
|
+
Sequence of all ``st.divider`` elements. Individual elements can be
|
611
|
+
accessed from an ElementList by index (order on the page). For
|
612
|
+
example, ``at.divider[0]`` for the first element. Divider is an
|
613
|
+
extension of the Element class.
|
614
|
+
"""
|
615
|
+
return self._tree.divider
|
616
|
+
|
617
|
+
@property
|
618
|
+
def error(self) -> ElementList[Error]:
|
619
|
+
"""Sequence of all ``st.error`` elements.
|
620
|
+
|
621
|
+
Returns
|
622
|
+
-------
|
623
|
+
ElementList of Error
|
624
|
+
Sequence of all ``st.error`` elements. Individual elements can be
|
625
|
+
accessed from an ElementList by index (order on the page). For
|
626
|
+
example, ``at.error[0]`` for the first element. Error is an
|
627
|
+
extension of the Element class.
|
628
|
+
"""
|
629
|
+
return self._tree.error
|
630
|
+
|
631
|
+
@property
|
632
|
+
def exception(self) -> ElementList[Exception]:
|
633
|
+
"""Sequence of all ``st.exception`` elements.
|
634
|
+
|
635
|
+
Returns
|
636
|
+
-------
|
637
|
+
ElementList of Exception
|
638
|
+
Sequence of all ``st.exception`` elements. Individual elements can be
|
639
|
+
accessed from an ElementList by index (order on the page). For
|
640
|
+
example, ``at.exception[0]`` for the first element. Exception is an
|
641
|
+
extension of the Element class.
|
642
|
+
"""
|
643
|
+
return self._tree.exception
|
644
|
+
|
645
|
+
@property
|
646
|
+
def expander(self) -> Sequence[Expander]:
|
647
|
+
"""Sequence of all ``st.expander`` elements.
|
648
|
+
|
649
|
+
Returns
|
650
|
+
-------
|
651
|
+
Sequence of Expandable
|
652
|
+
Sequence of all ``st.expander`` elements. Individual elements can be
|
653
|
+
accessed from a Sequence by index (order on the page). For
|
654
|
+
example, ``at.expander[0]`` for the first element. Expandable is an
|
655
|
+
extension of the Block class.
|
656
|
+
"""
|
657
|
+
return self._tree.expander
|
658
|
+
|
659
|
+
@property
|
660
|
+
def header(self) -> ElementList[Header]:
|
661
|
+
"""Sequence of all ``st.header`` elements.
|
662
|
+
|
663
|
+
Returns
|
664
|
+
-------
|
665
|
+
ElementList of Header
|
666
|
+
Sequence of all ``st.header`` elements. Individual elements can be
|
667
|
+
accessed from an ElementList by index (order on the page). For
|
668
|
+
example, ``at.header[0]`` for the first element. Header is an
|
669
|
+
extension of the Element class.
|
670
|
+
"""
|
671
|
+
return self._tree.header
|
672
|
+
|
673
|
+
@property
|
674
|
+
def info(self) -> ElementList[Info]:
|
675
|
+
"""Sequence of all ``st.info`` elements.
|
676
|
+
|
677
|
+
Returns
|
678
|
+
-------
|
679
|
+
ElementList of Info
|
680
|
+
Sequence of all ``st.info`` elements. Individual elements can be
|
681
|
+
accessed from an ElementList by index (order on the page). For
|
682
|
+
example, ``at.info[0]`` for the first element. Info is an
|
683
|
+
extension of the Element class.
|
684
|
+
"""
|
685
|
+
return self._tree.info
|
686
|
+
|
687
|
+
@property
|
688
|
+
def json(self) -> ElementList[Json]:
|
689
|
+
"""Sequence of all ``st.json`` elements.
|
690
|
+
|
691
|
+
Returns
|
692
|
+
-------
|
693
|
+
ElementList of Json
|
694
|
+
Sequence of all ``st.json`` elements. Individual elements can be
|
695
|
+
accessed from an ElementList by index (order on the page). For
|
696
|
+
example, ``at.json[0]`` for the first element. Json is an
|
697
|
+
extension of the Element class.
|
698
|
+
"""
|
699
|
+
return self._tree.json
|
700
|
+
|
701
|
+
@property
|
702
|
+
def latex(self) -> ElementList[Latex]:
|
703
|
+
"""Sequence of all ``st.latex`` elements.
|
704
|
+
|
705
|
+
Returns
|
706
|
+
-------
|
707
|
+
ElementList of Latex
|
708
|
+
Sequence of all ``st.latex`` elements. Individual elements can be
|
709
|
+
accessed from an ElementList by index (order on the page). For
|
710
|
+
example, ``at.latex[0]`` for the first element. Latex is an
|
711
|
+
extension of the Element class.
|
712
|
+
"""
|
713
|
+
return self._tree.latex
|
714
|
+
|
715
|
+
@property
|
716
|
+
def markdown(self) -> ElementList[Markdown]:
|
717
|
+
"""Sequence of all ``st.markdown`` elements.
|
718
|
+
|
719
|
+
Returns
|
720
|
+
-------
|
721
|
+
ElementList of Markdown
|
722
|
+
Sequence of all ``st.markdown`` elements. Individual elements can be
|
723
|
+
accessed from an ElementList by index (order on the page). For
|
724
|
+
example, ``at.markdown[0]`` for the first element. Markdown is an
|
725
|
+
extension of the Element class.
|
726
|
+
"""
|
727
|
+
return self._tree.markdown
|
728
|
+
|
729
|
+
@property
|
730
|
+
def metric(self) -> ElementList[Metric]:
|
731
|
+
"""Sequence of all ``st.metric`` elements.
|
732
|
+
|
733
|
+
Returns
|
734
|
+
-------
|
735
|
+
ElementList of Metric
|
736
|
+
Sequence of all ``st.metric`` elements. Individual elements can be
|
737
|
+
accessed from an ElementList by index (order on the page). For
|
738
|
+
example, ``at.metric[0]`` for the first element. Metric is an
|
739
|
+
extension of the Element class.
|
740
|
+
"""
|
741
|
+
return self._tree.metric
|
742
|
+
|
743
|
+
@property
|
744
|
+
def multiselect(self) -> WidgetList[Multiselect[Any]]:
|
745
|
+
"""Sequence of all ``st.multiselect`` widgets.
|
746
|
+
|
747
|
+
Returns
|
748
|
+
-------
|
749
|
+
WidgetList of Multiselect
|
750
|
+
Sequence of all ``st.multiselect`` widgets. Individual widgets can
|
751
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
752
|
+
For example, ``at.multiselect[0]`` for the first widget or
|
753
|
+
``at.multiselect(key="my_key")`` for a widget with a given key.
|
754
|
+
"""
|
755
|
+
return self._tree.multiselect
|
756
|
+
|
757
|
+
@property
|
758
|
+
def number_input(self) -> WidgetList[NumberInput]:
|
759
|
+
"""Sequence of all ``st.number_input`` widgets.
|
760
|
+
|
761
|
+
Returns
|
762
|
+
-------
|
763
|
+
WidgetList of NumberInput
|
764
|
+
Sequence of all ``st.number_input`` widgets. Individual widgets can
|
765
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
766
|
+
For example, ``at.number_input[0]`` for the first widget or
|
767
|
+
``at.number_input(key="my_key")`` for a widget with a given key.
|
768
|
+
"""
|
769
|
+
return self._tree.number_input
|
770
|
+
|
771
|
+
@property
|
772
|
+
def radio(self) -> WidgetList[Radio[Any]]:
|
773
|
+
"""Sequence of all ``st.radio`` widgets.
|
774
|
+
|
775
|
+
Returns
|
776
|
+
-------
|
777
|
+
WidgetList of Radio
|
778
|
+
Sequence of all ``st.radio`` widgets. Individual widgets can
|
779
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
780
|
+
For example, ``at.radio[0]`` for the first widget or
|
781
|
+
``at.radio(key="my_key")`` for a widget with a given key.
|
782
|
+
"""
|
783
|
+
return self._tree.radio
|
784
|
+
|
785
|
+
@property
|
786
|
+
def select_slider(self) -> WidgetList[SelectSlider[Any]]:
|
787
|
+
"""Sequence of all ``st.select_slider`` widgets.
|
788
|
+
|
789
|
+
Returns
|
790
|
+
-------
|
791
|
+
WidgetList of SelectSlider
|
792
|
+
Sequence of all ``st.select_slider`` widgets. Individual widgets can
|
793
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
794
|
+
For example, ``at.select_slider[0]`` for the first widget or
|
795
|
+
``at.select_slider(key="my_key")`` for a widget with a given key.
|
796
|
+
"""
|
797
|
+
return self._tree.select_slider
|
798
|
+
|
799
|
+
@property
|
800
|
+
def selectbox(self) -> WidgetList[Selectbox[Any]]:
|
801
|
+
"""Sequence of all ``st.selectbox`` widgets.
|
802
|
+
|
803
|
+
Returns
|
804
|
+
-------
|
805
|
+
WidgetList of Selectbox
|
806
|
+
Sequence of all ``st.selectbox`` widgets. Individual widgets can
|
807
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
808
|
+
For example, ``at.selectbox[0]`` for the first widget or
|
809
|
+
``at.selectbox(key="my_key")`` for a widget with a given key.
|
810
|
+
"""
|
811
|
+
return self._tree.selectbox
|
812
|
+
|
813
|
+
@property
|
814
|
+
def slider(self) -> WidgetList[Slider[Any]]:
|
815
|
+
"""Sequence of all ``st.slider`` widgets.
|
816
|
+
|
817
|
+
Returns
|
818
|
+
-------
|
819
|
+
WidgetList of Slider
|
820
|
+
Sequence of all ``st.slider`` widgets. Individual widgets can
|
821
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
822
|
+
For example, ``at.slider[0]`` for the first widget or
|
823
|
+
``at.slider(key="my_key")`` for a widget with a given key.
|
824
|
+
"""
|
825
|
+
return self._tree.slider
|
826
|
+
|
827
|
+
@property
|
828
|
+
def subheader(self) -> ElementList[Subheader]:
|
829
|
+
"""Sequence of all ``st.subheader`` elements.
|
830
|
+
|
831
|
+
Returns
|
832
|
+
-------
|
833
|
+
ElementList of Subheader
|
834
|
+
Sequence of all ``st.subheader`` elements. Individual elements can be
|
835
|
+
accessed from an ElementList by index (order on the page). For
|
836
|
+
example, ``at.subheader[0]`` for the first element. Subheader is an
|
837
|
+
extension of the Element class.
|
838
|
+
"""
|
839
|
+
return self._tree.subheader
|
840
|
+
|
841
|
+
@property
|
842
|
+
def success(self) -> ElementList[Success]:
|
843
|
+
"""Sequence of all ``st.success`` elements.
|
844
|
+
|
845
|
+
Returns
|
846
|
+
-------
|
847
|
+
ElementList of Success
|
848
|
+
Sequence of all ``st.success`` elements. Individual elements can be
|
849
|
+
accessed from an ElementList by index (order on the page). For
|
850
|
+
example, ``at.success[0]`` for the first element. Success is an
|
851
|
+
extension of the Element class.
|
852
|
+
"""
|
853
|
+
return self._tree.success
|
854
|
+
|
855
|
+
@property
|
856
|
+
def status(self) -> Sequence[Status]:
|
857
|
+
"""Sequence of all ``st.status`` elements.
|
858
|
+
|
859
|
+
Returns
|
860
|
+
-------
|
861
|
+
Sequence of Status
|
862
|
+
Sequence of all ``st.status`` elements. Individual elements can be
|
863
|
+
accessed from a Sequence by index (order on the page). For
|
864
|
+
example, ``at.status[0]`` for the first element. Status is an
|
865
|
+
extension of the Block class.
|
866
|
+
"""
|
867
|
+
return self._tree.status
|
868
|
+
|
869
|
+
@property
|
870
|
+
def table(self) -> ElementList[Table]:
|
871
|
+
"""Sequence of all ``st.table`` elements.
|
872
|
+
|
873
|
+
Returns
|
874
|
+
-------
|
875
|
+
ElementList of Table
|
876
|
+
Sequence of all ``st.table`` elements. Individual elements can be
|
877
|
+
accessed from an ElementList by index (order on the page). For
|
878
|
+
example, ``at.table[0]`` for the first element. Table is an
|
879
|
+
extension of the Element class.
|
880
|
+
"""
|
881
|
+
return self._tree.table
|
882
|
+
|
883
|
+
@property
|
884
|
+
def tabs(self) -> Sequence[Tab]:
|
885
|
+
"""Sequence of all tabs within ``st.tabs`` elements.
|
886
|
+
|
887
|
+
Each tab within a single ``st.tabs`` will be returned as a separate Tab
|
888
|
+
in the Sequence. Additionally, the tab labels are forwarded to each
|
889
|
+
Tab element as a property. For example, ``st.tabs("A","B")`` will
|
890
|
+
yield two Tab objects, with ``Tab.label`` returning "A" and "B",
|
891
|
+
respectively.
|
892
|
+
|
893
|
+
Returns
|
894
|
+
-------
|
895
|
+
Sequence of Tab
|
896
|
+
Sequence of all tabs within ``st.tabs`` elements. Individual
|
897
|
+
tabs can be accessed from an ElementList by index (order on the
|
898
|
+
page). For example, ``at.tabs[0]`` for the first tab. Tab is an
|
899
|
+
extension of the Block class.
|
900
|
+
"""
|
901
|
+
return self._tree.tabs
|
902
|
+
|
903
|
+
@property
|
904
|
+
def text(self) -> ElementList[Text]:
|
905
|
+
"""Sequence of all ``st.text`` elements.
|
906
|
+
|
907
|
+
Returns
|
908
|
+
-------
|
909
|
+
ElementList of Text
|
910
|
+
Sequence of all ``st.text`` elements. Individual elements can be
|
911
|
+
accessed from an ElementList by index (order on the page). For
|
912
|
+
example, ``at.text[0]`` for the first element. Text is an
|
913
|
+
extension of the Element class.
|
914
|
+
"""
|
915
|
+
return self._tree.text
|
916
|
+
|
917
|
+
@property
|
918
|
+
def text_area(self) -> WidgetList[TextArea]:
|
919
|
+
"""Sequence of all ``st.text_area`` widgets.
|
920
|
+
|
921
|
+
Returns
|
922
|
+
-------
|
923
|
+
WidgetList of TextArea
|
924
|
+
Sequence of all ``st.text_area`` widgets. Individual widgets can
|
925
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
926
|
+
For example, ``at.text_area[0]`` for the first widget or
|
927
|
+
``at.text_area(key="my_key")`` for a widget with a given key.
|
928
|
+
"""
|
929
|
+
return self._tree.text_area
|
930
|
+
|
931
|
+
@property
|
932
|
+
def text_input(self) -> WidgetList[TextInput]:
|
933
|
+
"""Sequence of all ``st.text_input`` widgets.
|
934
|
+
|
935
|
+
Returns
|
936
|
+
-------
|
937
|
+
WidgetList of TextInput
|
938
|
+
Sequence of all ``st.text_input`` widgets. Individual widgets can
|
939
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
940
|
+
For example, ``at.text_input[0]`` for the first widget or
|
941
|
+
``at.text_input(key="my_key")`` for a widget with a given key.
|
942
|
+
"""
|
943
|
+
return self._tree.text_input
|
944
|
+
|
945
|
+
@property
|
946
|
+
def time_input(self) -> WidgetList[TimeInput]:
|
947
|
+
"""Sequence of all ``st.time_input`` widgets.
|
948
|
+
|
949
|
+
Returns
|
950
|
+
-------
|
951
|
+
WidgetList of TimeInput
|
952
|
+
Sequence of all ``st.time_input`` widgets. Individual widgets can
|
953
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
954
|
+
For example, ``at.time_input[0]`` for the first widget or
|
955
|
+
``at.time_input(key="my_key")`` for a widget with a given key.
|
956
|
+
"""
|
957
|
+
return self._tree.time_input
|
958
|
+
|
959
|
+
@property
|
960
|
+
def title(self) -> ElementList[Title]:
|
961
|
+
"""Sequence of all ``st.title`` elements.
|
962
|
+
|
963
|
+
Returns
|
964
|
+
-------
|
965
|
+
ElementList of Title
|
966
|
+
Sequence of all ``st.title`` elements. Individual elements can be
|
967
|
+
accessed from an ElementList by index (order on the page). For
|
968
|
+
example, ``at.title[0]`` for the first element. Title is an
|
969
|
+
extension of the Element class.
|
970
|
+
"""
|
971
|
+
return self._tree.title
|
972
|
+
|
973
|
+
@property
|
974
|
+
def toast(self) -> ElementList[Toast]:
|
975
|
+
"""Sequence of all ``st.toast`` elements.
|
976
|
+
|
977
|
+
Returns
|
978
|
+
-------
|
979
|
+
ElementList of Toast
|
980
|
+
Sequence of all ``st.toast`` elements. Individual elements can be
|
981
|
+
accessed from an ElementList by index (order on the page). For
|
982
|
+
example, ``at.toast[0]`` for the first element. Toast is an
|
983
|
+
extension of the Element class.
|
984
|
+
"""
|
985
|
+
return self._tree.toast
|
986
|
+
|
987
|
+
@property
|
988
|
+
def toggle(self) -> WidgetList[Toggle]:
|
989
|
+
"""Sequence of all ``st.toggle`` widgets.
|
990
|
+
|
991
|
+
Returns
|
992
|
+
-------
|
993
|
+
WidgetList of Toggle
|
994
|
+
Sequence of all ``st.toggle`` widgets. Individual widgets can
|
995
|
+
be accessed from a WidgetList by index (order on the page) or key.
|
996
|
+
For example, ``at.toggle[0]`` for the first widget or
|
997
|
+
``at.toggle(key="my_key")`` for a widget with a given key.
|
998
|
+
"""
|
999
|
+
return self._tree.toggle
|
1000
|
+
|
1001
|
+
@property
|
1002
|
+
def warning(self) -> ElementList[Warning]:
|
1003
|
+
"""Sequence of all ``st.warning`` elements.
|
1004
|
+
|
1005
|
+
Returns
|
1006
|
+
-------
|
1007
|
+
ElementList of Warning
|
1008
|
+
Sequence of all ``st.warning`` elements. Individual elements can be
|
1009
|
+
accessed from an ElementList by index (order on the page). For
|
1010
|
+
example, ``at.warning[0]`` for the first element. Warning is an
|
1011
|
+
extension of the Element class.
|
1012
|
+
"""
|
1013
|
+
return self._tree.warning
|
1014
|
+
|
1015
|
+
def __len__(self) -> int:
|
1016
|
+
return len(self._tree)
|
1017
|
+
|
1018
|
+
def __iter__(self):
|
1019
|
+
yield from self._tree
|
1020
|
+
|
1021
|
+
def __getitem__(self, idx: int) -> Node:
|
1022
|
+
return self._tree[idx]
|
1023
|
+
|
1024
|
+
def get(self, element_type: str) -> Sequence[Node]:
|
1025
|
+
"""Get elements or widgets of the specified type.
|
1026
|
+
|
1027
|
+
This method returns the collection of all elements or widgets of
|
1028
|
+
the specified type on the current page. Retrieve a specific element by
|
1029
|
+
using its index (order on page) or key lookup.
|
1030
|
+
|
1031
|
+
Parameters
|
1032
|
+
----------
|
1033
|
+
element_type: str
|
1034
|
+
An element attribute of ``AppTest``. For example, "button",
|
1035
|
+
"caption", or "chat_input".
|
1036
|
+
|
1037
|
+
Returns
|
1038
|
+
-------
|
1039
|
+
Sequence of Elements
|
1040
|
+
Sequence of elements of the given type. Individual elements can
|
1041
|
+
be accessed from a Sequence by index (order on the page). When
|
1042
|
+
getting and ``element_type`` that is a widget, individual widgets
|
1043
|
+
can be accessed by key. For example, ``at.get("text")[0]`` for the
|
1044
|
+
first ``st.text`` element or ``at.get("slider")(key="my_key")`` for
|
1045
|
+
the ``st.slider`` widget with a given key.
|
1046
|
+
"""
|
1047
|
+
return self._tree.get(element_type)
|
1048
|
+
|
1049
|
+
def __repr__(self) -> str:
|
1050
|
+
return repr_(self)
|