streamlit 1.53.0__py3-none-any.whl → 1.54.0__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 +1 -31
- streamlit/auth_util.py +91 -2
- streamlit/cli_util.py +3 -2
- streamlit/commands/echo.py +2 -2
- streamlit/commands/execution_control.py +1 -1
- streamlit/commands/logo.py +76 -24
- streamlit/commands/navigation.py +1 -1
- streamlit/components/types/base_custom_component.py +0 -2
- streamlit/components/v1/custom_component.py +0 -2
- streamlit/components/v2/bidi_component/main.py +2 -2
- streamlit/components/v2/component_path_utils.py +17 -29
- streamlit/components/v2/manifest_scanner.py +8 -3
- streamlit/components/v2/presentation.py +1 -1
- streamlit/config.py +57 -13
- streamlit/config_util.py +5 -5
- streamlit/connections/snowflake_connection.py +6 -3
- streamlit/dataframe_util.py +10 -10
- streamlit/deprecation_util.py +19 -1
- streamlit/elements/arrow.py +18 -8
- streamlit/elements/deck_gl_json_chart.py +6 -2
- streamlit/elements/exception.py +4 -2
- streamlit/elements/form.py +1 -1
- streamlit/elements/layouts.py +1 -1
- streamlit/elements/lib/built_in_chart_utils.py +36 -13
- streamlit/elements/lib/color_util.py +21 -2
- streamlit/elements/lib/column_config_utils.py +9 -7
- streamlit/elements/lib/dialog.py +1 -1
- streamlit/elements/lib/image_utils.py +5 -5
- streamlit/elements/lib/layout_utils.py +1 -1
- streamlit/elements/lib/options_selector_utils.py +112 -18
- streamlit/elements/lib/policies.py +1 -1
- streamlit/elements/lib/streamlit_plotly_theme.py +9 -11
- streamlit/elements/lib/utils.py +1 -1
- streamlit/elements/map.py +6 -6
- streamlit/elements/plotly_chart.py +2 -2
- streamlit/elements/toast.py +1 -1
- streamlit/elements/vega_charts.py +30 -7
- streamlit/elements/widgets/button.py +3 -3
- streamlit/elements/widgets/button_group.py +3 -3
- streamlit/elements/widgets/chat.py +1 -1
- streamlit/elements/widgets/data_editor.py +6 -6
- streamlit/elements/widgets/multiselect.py +32 -8
- streamlit/elements/widgets/number_input.py +1 -1
- streamlit/elements/widgets/radio.py +91 -31
- streamlit/elements/widgets/select_slider.py +123 -37
- streamlit/elements/widgets/selectbox.py +38 -16
- streamlit/elements/widgets/slider.py +5 -5
- streamlit/elements/widgets/time_widgets.py +150 -18
- streamlit/elements/write.py +2 -3
- streamlit/env_util.py +1 -1
- streamlit/errors.py +2 -14
- streamlit/external/langchain/streamlit_callback_handler.py +1 -1
- streamlit/hello/dataframe_demo.py +1 -1
- streamlit/hello/plotting_demo.py +19 -12
- streamlit/path_security.py +98 -0
- streamlit/proto/Alert_pb2.py +2 -3
- streamlit/proto/AppPage_pb2.py +2 -3
- streamlit/proto/ArrowData_pb2.py +2 -3
- streamlit/proto/ArrowNamedDataSet_pb2.py +2 -3
- streamlit/proto/ArrowVegaLiteChart_pb2.py +2 -3
- streamlit/proto/Arrow_pb2.py +2 -3
- streamlit/proto/AudioInput_pb2.py +2 -3
- streamlit/proto/Audio_pb2.py +2 -3
- streamlit/proto/AuthRedirect_pb2.py +2 -3
- streamlit/proto/AutoRerun_pb2.py +2 -3
- streamlit/proto/BackMsg_pb2.py +2 -3
- streamlit/proto/Balloons_pb2.py +2 -3
- streamlit/proto/BidiComponent_pb2.py +2 -3
- streamlit/proto/Block_pb2.py +2 -3
- streamlit/proto/BokehChart_pb2.py +2 -3
- streamlit/proto/ButtonGroup_pb2.py +2 -3
- streamlit/proto/ButtonLikeIconPosition_pb2.py +2 -3
- streamlit/proto/Button_pb2.py +2 -3
- streamlit/proto/CameraInput_pb2.py +2 -3
- streamlit/proto/ChatInput_pb2.py +2 -3
- streamlit/proto/Checkbox_pb2.py +2 -3
- streamlit/proto/ClientState_pb2.py +2 -3
- streamlit/proto/Code_pb2.py +2 -3
- streamlit/proto/ColorPicker_pb2.py +2 -3
- streamlit/proto/Common_pb2.py +2 -3
- streamlit/proto/Components_pb2.py +2 -3
- streamlit/proto/DataFrame_pb2.py +2 -3
- streamlit/proto/DateInput_pb2.py +2 -3
- streamlit/proto/DateTimeInput_pb2.py +2 -3
- streamlit/proto/DeckGlJsonChart_pb2.py +2 -3
- streamlit/proto/Delta_pb2.py +2 -3
- streamlit/proto/DocString_pb2.py +2 -3
- streamlit/proto/DownloadButton_pb2.py +2 -3
- streamlit/proto/Element_pb2.py +2 -3
- streamlit/proto/Empty_pb2.py +2 -3
- streamlit/proto/Exception_pb2.py +2 -3
- streamlit/proto/Favicon_pb2.py +2 -3
- streamlit/proto/FileUploader_pb2.py +2 -3
- streamlit/proto/ForwardMsg_pb2.py +2 -3
- streamlit/proto/GapSize_pb2.py +2 -3
- streamlit/proto/GitInfo_pb2.py +2 -3
- streamlit/proto/GraphVizChart_pb2.py +2 -3
- streamlit/proto/Heading_pb2.py +2 -3
- streamlit/proto/HeightConfig_pb2.py +2 -3
- streamlit/proto/Html_pb2.py +2 -3
- streamlit/proto/IFrame_pb2.py +2 -3
- streamlit/proto/Image_pb2.py +2 -3
- streamlit/proto/Json_pb2.py +2 -3
- streamlit/proto/LabelVisibilityMessage_pb2.py +2 -3
- streamlit/proto/LinkButton_pb2.py +2 -3
- streamlit/proto/Logo_pb2.py +6 -5
- streamlit/proto/Logo_pb2.pyi +25 -1
- streamlit/proto/Markdown_pb2.py +2 -3
- streamlit/proto/Metric_pb2.py +2 -3
- streamlit/proto/MetricsEvent_pb2.py +2 -3
- streamlit/proto/MultiSelect_pb2.py +2 -3
- streamlit/proto/NamedDataSet_pb2.py +2 -3
- streamlit/proto/Navigation_pb2.py +2 -3
- streamlit/proto/NewSession_pb2.py +25 -24
- streamlit/proto/NewSession_pb2.pyi +28 -2
- streamlit/proto/NumberInput_pb2.py +2 -3
- streamlit/proto/PageConfig_pb2.py +2 -3
- streamlit/proto/PageInfo_pb2.py +2 -3
- streamlit/proto/PageLink_pb2.py +2 -3
- streamlit/proto/PageNotFound_pb2.py +2 -3
- streamlit/proto/PageProfile_pb2.py +2 -3
- streamlit/proto/PagesChanged_pb2.py +2 -3
- streamlit/proto/ParentMessage_pb2.py +2 -3
- streamlit/proto/PlotlyChart_pb2.py +2 -3
- streamlit/proto/Progress_pb2.py +2 -3
- streamlit/proto/Radio_pb2.py +5 -4
- streamlit/proto/Radio_pb2.pyi +20 -3
- streamlit/proto/RootContainer_pb2.py +2 -3
- streamlit/proto/Selectbox_pb2.py +2 -3
- streamlit/proto/SessionEvent_pb2.py +2 -3
- streamlit/proto/SessionStatus_pb2.py +2 -3
- streamlit/proto/Skeleton_pb2.py +2 -3
- streamlit/proto/Slider_pb2.py +7 -8
- streamlit/proto/Slider_pb2.pyi +9 -1
- streamlit/proto/Snow_pb2.py +2 -3
- streamlit/proto/Space_pb2.py +2 -3
- streamlit/proto/Spinner_pb2.py +2 -3
- streamlit/proto/TextAlignmentConfig_pb2.py +2 -3
- streamlit/proto/TextArea_pb2.py +2 -3
- streamlit/proto/TextInput_pb2.py +2 -3
- streamlit/proto/Text_pb2.py +2 -3
- streamlit/proto/TimeInput_pb2.py +2 -3
- streamlit/proto/Toast_pb2.py +2 -3
- streamlit/proto/Transient_pb2.py +2 -3
- streamlit/proto/VegaLiteChart_pb2.py +2 -3
- streamlit/proto/Video_pb2.py +2 -3
- streamlit/proto/WidgetStates_pb2.py +2 -3
- streamlit/proto/WidthConfig_pb2.py +2 -3
- streamlit/proto/openmetrics_data_model_pb2.py +2 -3
- streamlit/runtime/app_session.py +106 -60
- streamlit/runtime/caching/cache_data_api.py +3 -3
- streamlit/runtime/caching/cache_errors.py +0 -2
- streamlit/runtime/caching/cache_resource_api.py +1 -1
- streamlit/runtime/caching/cache_utils.py +2 -2
- streamlit/runtime/caching/hashing.py +1 -3
- streamlit/runtime/caching/storage/cache_storage_protocol.py +0 -3
- streamlit/runtime/connection_factory.py +1 -1
- streamlit/runtime/credentials.py +2 -2
- streamlit/runtime/metrics_util.py +3 -3
- streamlit/runtime/runtime.py +6 -6
- streamlit/runtime/scriptrunner/script_runner.py +17 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +0 -4
- streamlit/runtime/scriptrunner_utils/script_run_context.py +13 -31
- streamlit/runtime/secrets.py +3 -4
- streamlit/runtime/state/__init__.py +7 -1
- streamlit/runtime/state/common.py +13 -0
- streamlit/runtime/state/query_params.py +493 -24
- streamlit/runtime/state/session_state.py +179 -4
- streamlit/runtime/state/widgets.py +26 -1
- streamlit/runtime/stats.py +1 -10
- streamlit/static/index.html +1 -1
- streamlit/static/manifest.json +304 -304
- streamlit/static/static/js/{ErrorOutline.esm.Cxoit62D.js → ErrorOutline.esm.BWk6F-Tz.js} +1 -1
- streamlit/static/static/js/{FileDownload.esm.Cym2KVOR.js → FileDownload.esm.AllYUuOW.js} +1 -1
- streamlit/static/static/js/{FileHelper.C47VLeXF.js → FileHelper.BvVTNdmy.js} +1 -1
- streamlit/static/static/js/{FormClearHelper.CUrwwEeX.js → FormClearHelper.C__r5Llk.js} +1 -1
- streamlit/static/static/js/{InputInstructions.DyVOE42q.js → InputInstructions.DOtkdOMV.js} +1 -1
- streamlit/static/static/js/Particles.DCsqQZlE.js +1 -0
- streamlit/static/static/js/{ProgressBar.qKdiDYyx.js → ProgressBar.DLCRvt4m.js} +2 -2
- streamlit/static/static/js/{StreamlitSyntaxHighlighter.DUPp9dS3.js → StreamlitSyntaxHighlighter.CYFWoZHb.js} +1 -1
- streamlit/static/static/js/{TableChart.esm.C_g2CvCE.js → TableChart.esm.D6ydHcIm.js} +1 -1
- streamlit/static/static/js/Toolbar.BHDNzWBx.js +1 -0
- streamlit/static/static/js/{WidgetLabelHelpIconInline.Dy4yV6I2.js → WidgetLabelHelpIconInline.DEXBrVlc.js} +1 -1
- streamlit/static/static/js/{base-input.DQAb60v0.js → base-input.TSQjctlq.js} +4 -4
- streamlit/static/static/js/{checkbox.C0HE0ojW.js → checkbox.BKgfzJZV.js} +1 -1
- streamlit/static/static/js/{createDownloadLinkElement.DBMfH8_e.js → createDownloadLinkElement.CG7nr2a4.js} +1 -1
- streamlit/static/static/js/{data-grid-overlay-editor.CSZWem5Q.js → data-grid-overlay-editor.ChXO__lP.js} +1 -1
- streamlit/static/static/js/{downloader.Bp8c7mYD.js → downloader.DJ3R_zWA.js} +1 -1
- streamlit/static/static/js/embed.u3PPfLkw.js +193 -0
- streamlit/static/static/js/{es6.j7akTCaI.js → es6.C5Mfy8nd.js} +2 -2
- streamlit/static/static/js/{formatNumber.CfuUiEpF.js → formatNumber.CMRgW9EJ.js} +1 -1
- streamlit/static/static/js/{iconPosition.BVSTKfGd.js → iconPosition.B4EEXI3E.js} +1 -1
- streamlit/static/static/js/{iframeResizer.contentWindow.BZ3lugzo.js → iframeResizer.contentWindow.WSvOiTW0.js} +1 -1
- streamlit/static/static/js/index.-FOBV3nz.js +1 -0
- streamlit/static/static/js/{index.D0tXFTaW.js → index.-NF8OSF5.js} +1 -1
- streamlit/static/static/js/{index.Dk0CU4R6.js → index.4cBg8kn5.js} +1 -1
- streamlit/static/static/js/{index.DtZTtufl.js → index.B0pzzCsH.js} +1 -1
- streamlit/static/static/js/{index.DSaE74nc.js → index.BID6ND5j.js} +2 -2
- streamlit/static/static/js/index.BMp5bGjh.js +1 -0
- streamlit/static/static/js/{index.CAMxgVFm.js → index.BQcmlvas.js} +1 -1
- streamlit/static/static/js/{index.C0F0G-wg.js → index.BRcmclgI.js} +1 -1
- streamlit/static/static/js/index.BaUZR4IG.js +1 -0
- streamlit/static/static/js/{index.Cow0Hs9V.js → index.BbMJj4PN.js} +1 -1
- streamlit/static/static/js/{index.iboGgrkh.js → index.BdCTJtq3.js} +2 -2
- streamlit/static/static/js/index.BdETLMuI.js +1 -0
- streamlit/static/static/js/index.BnKMWhs1.js +1 -0
- streamlit/static/static/js/index.Br1kXwQW.js +2 -0
- streamlit/static/static/js/{index.B2fTHpId.js → index.Bt2olRE4.js} +1 -1
- streamlit/static/static/js/{index.DBIRzFM7.js → index.Bxwsv5T8.js} +1 -1
- streamlit/static/static/js/index.C4KskYz6.js +1 -0
- streamlit/static/static/js/{index.BgCYNmov.js → index.C6bmbXk0.js} +1 -1
- streamlit/static/static/js/{index.7S_sCSRx.js → index.CEfKfbta.js} +1 -1
- streamlit/static/static/js/index.CIuaA8q0.js +2 -0
- streamlit/static/static/js/{index.CWAvu1Qu.js → index.CV1sObFX.js} +1 -1
- streamlit/static/static/js/{index.C9QftD-S.js → index.CbR6dgaV.js} +1 -1
- streamlit/static/static/js/index.Cq6szKqJ.js +1 -0
- streamlit/static/static/js/index.CyouXqCz.js +1 -0
- streamlit/static/static/js/{index.BMFt07G_.js → index.D1NUgMFI.js} +1 -1
- streamlit/static/static/js/{index.Tq2okoAU.js → index.D7SWG4Om.js} +1 -1
- streamlit/static/static/js/{index.DgJeIFb5.js → index.DAYPEwLI.js} +1 -1
- streamlit/static/static/js/index.DKS75Vfg.js +11 -0
- streamlit/static/static/js/{index.FfR9SXQv.js → index.DOXrMIxB.js} +1 -1
- streamlit/static/static/js/{index.BiVJWMS-.js → index.DOzYX8yS.js} +3 -3
- streamlit/static/static/js/{index.nEa8y_He.js → index.DRFMYcC4.js} +4 -4
- streamlit/static/static/js/{index.dgs1TGpP.js → index.Divl5FCY.js} +1 -1
- streamlit/static/static/js/{index.95DldRtG.js → index.DjAJ_CUa.js} +1 -1
- streamlit/static/static/js/{index.Z0mB4zBp.js → index.Dncue2pm.js} +33 -33
- streamlit/static/static/js/{index.DFT9nVK6.js → index.Drusyo5m.js} +48 -48
- streamlit/static/static/js/{index.1PD6f3vh.js → index.DuUyDGnP.js} +1 -1
- streamlit/static/static/js/{index.DpU0Bc2F.js → index.DvgT2rB2.js} +223 -223
- streamlit/static/static/js/{index.Bukztsaz.js → index.DzutABu5.js} +2 -2
- streamlit/static/static/js/index.Dzw2iPzi.js +3 -0
- streamlit/static/static/js/{index.DYkkO_of.js → index.FsTmxLbT.js} +1 -1
- streamlit/static/static/js/{index.CTQ8QcOV.js → index.OIwPqGYN.js} +1 -1
- streamlit/static/static/js/{index.NtSfVVJe.js → index.RXLN7YFT.js} +2 -2
- streamlit/static/static/js/{index.BU3d_gp1.js → index.YYb2u0jk.js} +2 -2
- streamlit/static/static/js/{index.BXfSsjdq.js → index.h8ejt-W3.js} +1 -1
- streamlit/static/static/js/{index.gPUFpUqs.js → index.lFMCi9am.js} +1 -1
- streamlit/static/static/js/{index.BDA5l7b9.js → index.pOgf4cEj.js} +1 -1
- streamlit/static/static/js/index.s_E0s7LB.js +188 -0
- streamlit/static/static/js/{index.DysJZEAt.js → index.xLCbzoqj.js} +1 -1
- streamlit/static/static/js/{input.Pz8Lwzsi.js → input.BLG7kWaj.js} +2 -2
- streamlit/static/static/js/{main.BeiYkHRo.js → main.D_CmqChN.js} +1 -1
- streamlit/static/static/js/{memory.Dyx_JBbb.js → memory.T8u9KqIQ.js} +1 -1
- streamlit/static/static/js/{number-overlay-editor.NLIdF6b9.js → number-overlay-editor.BKBSXkAM.js} +2 -2
- streamlit/static/static/js/{pandasStylerUtils.DsNlDEqS.js → pandasStylerUtils.B4tLYMwS.js} +1 -1
- streamlit/static/static/js/{sandbox.bER7qtR1.js → sandbox.jRlkcPem.js} +1 -1
- streamlit/static/static/js/{styled-components.DcoFBb7G.js → styled-components.D2QhNwzd.js} +1 -1
- streamlit/static/static/js/{throttle.DOaQWO4U.js → throttle.Cyw_V0Dq.js} +1 -1
- streamlit/static/static/js/{timepicker.RjHB2IT4.js → timepicker.PzyuDDWl.js} +1 -1
- streamlit/static/static/js/{toConsumableArray.DFAIugL0.js → toConsumableArray.gE9fMkLj.js} +1 -1
- streamlit/static/static/js/uniqueId.B1GeHnT1.js +1 -0
- streamlit/static/static/js/{useBasicWidgetState.CTtyymrp.js → useBasicWidgetState.DFklfao0.js} +1 -1
- streamlit/static/static/js/{useIntlLocale.DG5haQGX.js → useIntlLocale.C3tUGWTU.js} +8 -8
- streamlit/static/static/js/{useTextInputAutoExpand.Cnfcep1Z.js → useTextInputAutoExpand.D9nU_y-e.js} +1 -1
- streamlit/static/static/js/useUpdateUiValue.ClTdrkJN.js +1 -0
- streamlit/static/static/js/{useWaveformController.DozaayUB.js → useWaveformController.lzTbjMW2.js} +1 -1
- streamlit/static/static/js/{withCalculatedWidth.SNNFFxhJ.js → withCalculatedWidth.Dxs9I5Oe.js} +1 -1
- streamlit/static/static/js/{withFullScreenWrapper.Dl2f8_gt.js → withFullScreenWrapper.DfpAcJxf.js} +1 -1
- streamlit/string_util.py +2 -2
- streamlit/testing/v1/app_test.py +1 -1
- streamlit/testing/v1/element_tree.py +33 -20
- streamlit/type_util.py +2 -2
- streamlit/url_util.py +2 -2
- streamlit/user_info.py +2 -41
- streamlit/util.py +1 -1
- streamlit/watcher/event_based_path_watcher.py +37 -7
- streamlit/watcher/path_watcher.py +61 -2
- streamlit/watcher/util.py +26 -10
- streamlit/web/bootstrap.py +16 -4
- streamlit/web/cli.py +1 -4
- streamlit/web/server/app_discovery.py +2 -1
- streamlit/web/server/app_static_file_handler.py +9 -0
- streamlit/web/server/bidi_component_request_handler.py +4 -4
- streamlit/web/server/component_file_utils.py +14 -6
- streamlit/web/server/component_request_handler.py +2 -2
- streamlit/web/server/oauth_authlib_routes.py +14 -42
- streamlit/web/server/server.py +1 -1
- streamlit/web/server/server_util.py +23 -1
- streamlit/web/server/starlette/starlette_app.py +7 -1
- streamlit/web/server/starlette/starlette_auth_routes.py +94 -16
- streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
- streamlit/web/server/starlette/starlette_routes.py +16 -9
- streamlit/web/server/starlette/starlette_server.py +2 -2
- streamlit/web/server/starlette/starlette_static_routes.py +14 -4
- streamlit/web/server/stats_request_handler.py +1 -3
- {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/METADATA +10 -25
- {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/RECORD +291 -291
- {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/WHEEL +1 -1
- streamlit/commands/experimental_query_params.py +0 -169
- streamlit/static/static/js/Particles.D5ZUTvE6.js +0 -1
- streamlit/static/static/js/Toolbar.BbO8bxwz.js +0 -1
- streamlit/static/static/js/embed.DQBlGL9Q.js +0 -195
- streamlit/static/static/js/index.5CsPRetw.js +0 -1
- streamlit/static/static/js/index.BGgra9Bb.js +0 -188
- streamlit/static/static/js/index.BGzJYcHz.js +0 -1
- streamlit/static/static/js/index.BNpEDrb2.js +0 -1
- streamlit/static/static/js/index.Bk5wGJXh.js +0 -1
- streamlit/static/static/js/index.By8GIgDH.js +0 -1
- streamlit/static/static/js/index.C8VoW8Ph.js +0 -1
- streamlit/static/static/js/index.CZzy-Gct.js +0 -1
- streamlit/static/static/js/index.CeFdbzfR.js +0 -11
- streamlit/static/static/js/index.CkmNfvPD.js +0 -1
- streamlit/static/static/js/index.CsmTnJl4.js +0 -3
- streamlit/static/static/js/index.DZGCJu4I.js +0 -2
- streamlit/static/static/js/index.svncz-Ad.js +0 -2
- streamlit/static/static/js/uniqueId.DEvFPH9n.js +0 -1
- streamlit/static/static/js/useUpdateUiValue.BWnXwmrp.js +0 -1
- streamlit-1.53.0.data/scripts/streamlit.cmd +0 -16
- {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/entry_points.txt +0 -0
- {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/top_level.txt +0 -0
|
@@ -24,6 +24,7 @@ import os
|
|
|
24
24
|
from typing import TYPE_CHECKING, Any, Final
|
|
25
25
|
|
|
26
26
|
from streamlit import file_util
|
|
27
|
+
from streamlit.path_security import is_unsafe_path_pattern
|
|
27
28
|
from streamlit.url_util import make_url_path
|
|
28
29
|
from streamlit.web.server.routes import (
|
|
29
30
|
NO_CACHE_PATTERN,
|
|
@@ -51,7 +52,7 @@ def create_streamlit_static_handler(
|
|
|
51
52
|
- Long-term caching of hashed assets
|
|
52
53
|
- No-cache for HTML/manifest files
|
|
53
54
|
- Trailing slash redirect (301)
|
|
54
|
-
- Double-slash protection (
|
|
55
|
+
- Double-slash protection (400 for protocol-relative URL security)
|
|
55
56
|
"""
|
|
56
57
|
from starlette.exceptions import HTTPException
|
|
57
58
|
from starlette.responses import FileResponse, RedirectResponse, Response
|
|
@@ -74,10 +75,19 @@ def create_streamlit_static_handler(
|
|
|
74
75
|
# Security check: Block paths starting with double slash (protocol-relative
|
|
75
76
|
# URL protection). A path like //example.com could be misinterpreted as a
|
|
76
77
|
# protocol-relative URL if redirected, which is a security risk.
|
|
77
|
-
# This matches Tornado's behavior where such paths would escape the static
|
|
78
|
-
# directory and trigger a 403 Forbidden.
|
|
79
78
|
if path.startswith("//"):
|
|
80
|
-
response = Response(content="
|
|
79
|
+
response = Response(content="Bad Request", status_code=400)
|
|
80
|
+
await response(scope, receive, send)
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
# Security check: Block UNC paths, absolute paths, drive-qualified paths,
|
|
84
|
+
# and path traversal patterns BEFORE any filesystem operations.
|
|
85
|
+
# See is_unsafe_path_pattern() docstring for details.
|
|
86
|
+
# Strip the leading slash since paths come in as "/filename" but we check
|
|
87
|
+
# the relative portion.
|
|
88
|
+
relative_path = path.lstrip("/")
|
|
89
|
+
if relative_path and is_unsafe_path_pattern(relative_path):
|
|
90
|
+
response = Response(content="Bad Request", status_code=400)
|
|
81
91
|
await response(scope, receive, send)
|
|
82
92
|
return
|
|
83
93
|
|
|
@@ -52,9 +52,7 @@ class StatsRequestHandler(tornado.web.RequestHandler):
|
|
|
52
52
|
# If no families are specified, all metrics are returned.
|
|
53
53
|
# Example: /_stcore/metrics?families=session_events_total&families=active_sessions
|
|
54
54
|
requested_families = self.get_arguments("families")
|
|
55
|
-
stats = self._manager.get_stats(
|
|
56
|
-
family_names=requested_families if requested_families else None
|
|
57
|
-
)
|
|
55
|
+
stats = self._manager.get_stats(family_names=requested_families or None)
|
|
58
56
|
# If the request asked for protobuf output, we return a serialized
|
|
59
57
|
# protobuf. Else we return text.
|
|
60
58
|
if "application/x-protobuf" in self.request.headers.get_list("Accept"):
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamlit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.54.0
|
|
4
4
|
Summary: A faster way to build and share data apps
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: Snowflake Inc <hello@streamlit.io>
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://streamlit.io
|
|
8
|
+
Project-URL: Documentation, https://docs.streamlit.io/
|
|
9
9
|
Project-URL: Source Code, https://github.com/streamlit/streamlit
|
|
10
10
|
Project-URL: Bug Tracker, https://github.com/streamlit/streamlit/issues
|
|
11
|
-
Project-URL: Release
|
|
12
|
-
Project-URL: Documentation, https://docs.streamlit.io/
|
|
11
|
+
Project-URL: Release Notes, https://docs.streamlit.io/develop/quick-reference/changelog
|
|
13
12
|
Project-URL: Community, https://discuss.streamlit.io/
|
|
14
|
-
Project-URL: Twitter, https://twitter.com/streamlit
|
|
15
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
16
14
|
Classifier: Environment :: Console
|
|
17
15
|
Classifier: Environment :: Web Environment
|
|
18
16
|
Classifier: Intended Audience :: Developers
|
|
19
17
|
Classifier: Intended Audience :: Science/Research
|
|
20
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
21
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
22
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
23
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -35,20 +32,20 @@ Requires-Dist: altair!=5.4.0,!=5.4.1,<7,>=4.0
|
|
|
35
32
|
Requires-Dist: blinker<2,>=1.5.0
|
|
36
33
|
Requires-Dist: cachetools<7,>=5.5
|
|
37
34
|
Requires-Dist: click<9,>=7.0
|
|
35
|
+
Requires-Dist: gitpython!=3.1.19,<4,>=3.0.7
|
|
38
36
|
Requires-Dist: numpy<3,>=1.23
|
|
39
37
|
Requires-Dist: packaging>=20
|
|
40
38
|
Requires-Dist: pandas<3,>=1.4.0
|
|
41
39
|
Requires-Dist: pillow<13,>=7.1.0
|
|
40
|
+
Requires-Dist: pydeck<1,>=0.8.0b4
|
|
42
41
|
Requires-Dist: protobuf<7,>=3.20
|
|
43
42
|
Requires-Dist: pyarrow>=7.0
|
|
44
43
|
Requires-Dist: requests<3,>=2.27
|
|
45
44
|
Requires-Dist: tenacity<10,>=8.1.0
|
|
46
45
|
Requires-Dist: toml<2,>=0.10.1
|
|
46
|
+
Requires-Dist: tornado!=6.5.0,<7,>=6.0.3
|
|
47
47
|
Requires-Dist: typing-extensions<5,>=4.10.0
|
|
48
48
|
Requires-Dist: watchdog<7,>=2.1.5; platform_system != "Darwin"
|
|
49
|
-
Requires-Dist: gitpython!=3.1.19,<4,>=3.0.7
|
|
50
|
-
Requires-Dist: pydeck<1,>=0.8.0b4
|
|
51
|
-
Requires-Dist: tornado!=6.5.0,<7,>=6.0.3
|
|
52
49
|
Provides-Extra: snowflake
|
|
53
50
|
Requires-Dist: snowflake-snowpark-python[modin]>=1.17.0; python_version < "3.12" and extra == "snowflake"
|
|
54
51
|
Requires-Dist: snowflake-connector-python>=3.3.0; python_version < "3.12" and extra == "snowflake"
|
|
@@ -72,23 +69,11 @@ Provides-Extra: sql
|
|
|
72
69
|
Requires-Dist: SQLAlchemy>=2.0.0; extra == "sql"
|
|
73
70
|
Provides-Extra: performance
|
|
74
71
|
Requires-Dist: orjson>=3.5.0; extra == "performance"
|
|
75
|
-
Requires-Dist: uvloop>=0.15.2; (sys_platform != "win32" and
|
|
72
|
+
Requires-Dist: uvloop>=0.15.2; (sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy") and extra == "performance"
|
|
76
73
|
Requires-Dist: httptools>=0.6.3; extra == "performance"
|
|
77
74
|
Provides-Extra: all
|
|
78
75
|
Requires-Dist: streamlit[auth,charts,pdf,performance,snowflake,sql]; extra == "all"
|
|
79
76
|
Requires-Dist: rich>=11.0.0; extra == "all"
|
|
80
|
-
Dynamic: author
|
|
81
|
-
Dynamic: author-email
|
|
82
|
-
Dynamic: classifier
|
|
83
|
-
Dynamic: description
|
|
84
|
-
Dynamic: description-content-type
|
|
85
|
-
Dynamic: home-page
|
|
86
|
-
Dynamic: license
|
|
87
|
-
Dynamic: project-url
|
|
88
|
-
Dynamic: provides-extra
|
|
89
|
-
Dynamic: requires-dist
|
|
90
|
-
Dynamic: requires-python
|
|
91
|
-
Dynamic: summary
|
|
92
77
|
|
|
93
78
|
<br>
|
|
94
79
|
|