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.
Files changed (311) hide show
  1. streamlit/__init__.py +1 -31
  2. streamlit/auth_util.py +91 -2
  3. streamlit/cli_util.py +3 -2
  4. streamlit/commands/echo.py +2 -2
  5. streamlit/commands/execution_control.py +1 -1
  6. streamlit/commands/logo.py +76 -24
  7. streamlit/commands/navigation.py +1 -1
  8. streamlit/components/types/base_custom_component.py +0 -2
  9. streamlit/components/v1/custom_component.py +0 -2
  10. streamlit/components/v2/bidi_component/main.py +2 -2
  11. streamlit/components/v2/component_path_utils.py +17 -29
  12. streamlit/components/v2/manifest_scanner.py +8 -3
  13. streamlit/components/v2/presentation.py +1 -1
  14. streamlit/config.py +57 -13
  15. streamlit/config_util.py +5 -5
  16. streamlit/connections/snowflake_connection.py +6 -3
  17. streamlit/dataframe_util.py +10 -10
  18. streamlit/deprecation_util.py +19 -1
  19. streamlit/elements/arrow.py +18 -8
  20. streamlit/elements/deck_gl_json_chart.py +6 -2
  21. streamlit/elements/exception.py +4 -2
  22. streamlit/elements/form.py +1 -1
  23. streamlit/elements/layouts.py +1 -1
  24. streamlit/elements/lib/built_in_chart_utils.py +36 -13
  25. streamlit/elements/lib/color_util.py +21 -2
  26. streamlit/elements/lib/column_config_utils.py +9 -7
  27. streamlit/elements/lib/dialog.py +1 -1
  28. streamlit/elements/lib/image_utils.py +5 -5
  29. streamlit/elements/lib/layout_utils.py +1 -1
  30. streamlit/elements/lib/options_selector_utils.py +112 -18
  31. streamlit/elements/lib/policies.py +1 -1
  32. streamlit/elements/lib/streamlit_plotly_theme.py +9 -11
  33. streamlit/elements/lib/utils.py +1 -1
  34. streamlit/elements/map.py +6 -6
  35. streamlit/elements/plotly_chart.py +2 -2
  36. streamlit/elements/toast.py +1 -1
  37. streamlit/elements/vega_charts.py +30 -7
  38. streamlit/elements/widgets/button.py +3 -3
  39. streamlit/elements/widgets/button_group.py +3 -3
  40. streamlit/elements/widgets/chat.py +1 -1
  41. streamlit/elements/widgets/data_editor.py +6 -6
  42. streamlit/elements/widgets/multiselect.py +32 -8
  43. streamlit/elements/widgets/number_input.py +1 -1
  44. streamlit/elements/widgets/radio.py +91 -31
  45. streamlit/elements/widgets/select_slider.py +123 -37
  46. streamlit/elements/widgets/selectbox.py +38 -16
  47. streamlit/elements/widgets/slider.py +5 -5
  48. streamlit/elements/widgets/time_widgets.py +150 -18
  49. streamlit/elements/write.py +2 -3
  50. streamlit/env_util.py +1 -1
  51. streamlit/errors.py +2 -14
  52. streamlit/external/langchain/streamlit_callback_handler.py +1 -1
  53. streamlit/hello/dataframe_demo.py +1 -1
  54. streamlit/hello/plotting_demo.py +19 -12
  55. streamlit/path_security.py +98 -0
  56. streamlit/proto/Alert_pb2.py +2 -3
  57. streamlit/proto/AppPage_pb2.py +2 -3
  58. streamlit/proto/ArrowData_pb2.py +2 -3
  59. streamlit/proto/ArrowNamedDataSet_pb2.py +2 -3
  60. streamlit/proto/ArrowVegaLiteChart_pb2.py +2 -3
  61. streamlit/proto/Arrow_pb2.py +2 -3
  62. streamlit/proto/AudioInput_pb2.py +2 -3
  63. streamlit/proto/Audio_pb2.py +2 -3
  64. streamlit/proto/AuthRedirect_pb2.py +2 -3
  65. streamlit/proto/AutoRerun_pb2.py +2 -3
  66. streamlit/proto/BackMsg_pb2.py +2 -3
  67. streamlit/proto/Balloons_pb2.py +2 -3
  68. streamlit/proto/BidiComponent_pb2.py +2 -3
  69. streamlit/proto/Block_pb2.py +2 -3
  70. streamlit/proto/BokehChart_pb2.py +2 -3
  71. streamlit/proto/ButtonGroup_pb2.py +2 -3
  72. streamlit/proto/ButtonLikeIconPosition_pb2.py +2 -3
  73. streamlit/proto/Button_pb2.py +2 -3
  74. streamlit/proto/CameraInput_pb2.py +2 -3
  75. streamlit/proto/ChatInput_pb2.py +2 -3
  76. streamlit/proto/Checkbox_pb2.py +2 -3
  77. streamlit/proto/ClientState_pb2.py +2 -3
  78. streamlit/proto/Code_pb2.py +2 -3
  79. streamlit/proto/ColorPicker_pb2.py +2 -3
  80. streamlit/proto/Common_pb2.py +2 -3
  81. streamlit/proto/Components_pb2.py +2 -3
  82. streamlit/proto/DataFrame_pb2.py +2 -3
  83. streamlit/proto/DateInput_pb2.py +2 -3
  84. streamlit/proto/DateTimeInput_pb2.py +2 -3
  85. streamlit/proto/DeckGlJsonChart_pb2.py +2 -3
  86. streamlit/proto/Delta_pb2.py +2 -3
  87. streamlit/proto/DocString_pb2.py +2 -3
  88. streamlit/proto/DownloadButton_pb2.py +2 -3
  89. streamlit/proto/Element_pb2.py +2 -3
  90. streamlit/proto/Empty_pb2.py +2 -3
  91. streamlit/proto/Exception_pb2.py +2 -3
  92. streamlit/proto/Favicon_pb2.py +2 -3
  93. streamlit/proto/FileUploader_pb2.py +2 -3
  94. streamlit/proto/ForwardMsg_pb2.py +2 -3
  95. streamlit/proto/GapSize_pb2.py +2 -3
  96. streamlit/proto/GitInfo_pb2.py +2 -3
  97. streamlit/proto/GraphVizChart_pb2.py +2 -3
  98. streamlit/proto/Heading_pb2.py +2 -3
  99. streamlit/proto/HeightConfig_pb2.py +2 -3
  100. streamlit/proto/Html_pb2.py +2 -3
  101. streamlit/proto/IFrame_pb2.py +2 -3
  102. streamlit/proto/Image_pb2.py +2 -3
  103. streamlit/proto/Json_pb2.py +2 -3
  104. streamlit/proto/LabelVisibilityMessage_pb2.py +2 -3
  105. streamlit/proto/LinkButton_pb2.py +2 -3
  106. streamlit/proto/Logo_pb2.py +6 -5
  107. streamlit/proto/Logo_pb2.pyi +25 -1
  108. streamlit/proto/Markdown_pb2.py +2 -3
  109. streamlit/proto/Metric_pb2.py +2 -3
  110. streamlit/proto/MetricsEvent_pb2.py +2 -3
  111. streamlit/proto/MultiSelect_pb2.py +2 -3
  112. streamlit/proto/NamedDataSet_pb2.py +2 -3
  113. streamlit/proto/Navigation_pb2.py +2 -3
  114. streamlit/proto/NewSession_pb2.py +25 -24
  115. streamlit/proto/NewSession_pb2.pyi +28 -2
  116. streamlit/proto/NumberInput_pb2.py +2 -3
  117. streamlit/proto/PageConfig_pb2.py +2 -3
  118. streamlit/proto/PageInfo_pb2.py +2 -3
  119. streamlit/proto/PageLink_pb2.py +2 -3
  120. streamlit/proto/PageNotFound_pb2.py +2 -3
  121. streamlit/proto/PageProfile_pb2.py +2 -3
  122. streamlit/proto/PagesChanged_pb2.py +2 -3
  123. streamlit/proto/ParentMessage_pb2.py +2 -3
  124. streamlit/proto/PlotlyChart_pb2.py +2 -3
  125. streamlit/proto/Progress_pb2.py +2 -3
  126. streamlit/proto/Radio_pb2.py +5 -4
  127. streamlit/proto/Radio_pb2.pyi +20 -3
  128. streamlit/proto/RootContainer_pb2.py +2 -3
  129. streamlit/proto/Selectbox_pb2.py +2 -3
  130. streamlit/proto/SessionEvent_pb2.py +2 -3
  131. streamlit/proto/SessionStatus_pb2.py +2 -3
  132. streamlit/proto/Skeleton_pb2.py +2 -3
  133. streamlit/proto/Slider_pb2.py +7 -8
  134. streamlit/proto/Slider_pb2.pyi +9 -1
  135. streamlit/proto/Snow_pb2.py +2 -3
  136. streamlit/proto/Space_pb2.py +2 -3
  137. streamlit/proto/Spinner_pb2.py +2 -3
  138. streamlit/proto/TextAlignmentConfig_pb2.py +2 -3
  139. streamlit/proto/TextArea_pb2.py +2 -3
  140. streamlit/proto/TextInput_pb2.py +2 -3
  141. streamlit/proto/Text_pb2.py +2 -3
  142. streamlit/proto/TimeInput_pb2.py +2 -3
  143. streamlit/proto/Toast_pb2.py +2 -3
  144. streamlit/proto/Transient_pb2.py +2 -3
  145. streamlit/proto/VegaLiteChart_pb2.py +2 -3
  146. streamlit/proto/Video_pb2.py +2 -3
  147. streamlit/proto/WidgetStates_pb2.py +2 -3
  148. streamlit/proto/WidthConfig_pb2.py +2 -3
  149. streamlit/proto/openmetrics_data_model_pb2.py +2 -3
  150. streamlit/runtime/app_session.py +106 -60
  151. streamlit/runtime/caching/cache_data_api.py +3 -3
  152. streamlit/runtime/caching/cache_errors.py +0 -2
  153. streamlit/runtime/caching/cache_resource_api.py +1 -1
  154. streamlit/runtime/caching/cache_utils.py +2 -2
  155. streamlit/runtime/caching/hashing.py +1 -3
  156. streamlit/runtime/caching/storage/cache_storage_protocol.py +0 -3
  157. streamlit/runtime/connection_factory.py +1 -1
  158. streamlit/runtime/credentials.py +2 -2
  159. streamlit/runtime/metrics_util.py +3 -3
  160. streamlit/runtime/runtime.py +6 -6
  161. streamlit/runtime/scriptrunner/script_runner.py +17 -0
  162. streamlit/runtime/scriptrunner_utils/exceptions.py +0 -4
  163. streamlit/runtime/scriptrunner_utils/script_run_context.py +13 -31
  164. streamlit/runtime/secrets.py +3 -4
  165. streamlit/runtime/state/__init__.py +7 -1
  166. streamlit/runtime/state/common.py +13 -0
  167. streamlit/runtime/state/query_params.py +493 -24
  168. streamlit/runtime/state/session_state.py +179 -4
  169. streamlit/runtime/state/widgets.py +26 -1
  170. streamlit/runtime/stats.py +1 -10
  171. streamlit/static/index.html +1 -1
  172. streamlit/static/manifest.json +304 -304
  173. streamlit/static/static/js/{ErrorOutline.esm.Cxoit62D.js → ErrorOutline.esm.BWk6F-Tz.js} +1 -1
  174. streamlit/static/static/js/{FileDownload.esm.Cym2KVOR.js → FileDownload.esm.AllYUuOW.js} +1 -1
  175. streamlit/static/static/js/{FileHelper.C47VLeXF.js → FileHelper.BvVTNdmy.js} +1 -1
  176. streamlit/static/static/js/{FormClearHelper.CUrwwEeX.js → FormClearHelper.C__r5Llk.js} +1 -1
  177. streamlit/static/static/js/{InputInstructions.DyVOE42q.js → InputInstructions.DOtkdOMV.js} +1 -1
  178. streamlit/static/static/js/Particles.DCsqQZlE.js +1 -0
  179. streamlit/static/static/js/{ProgressBar.qKdiDYyx.js → ProgressBar.DLCRvt4m.js} +2 -2
  180. streamlit/static/static/js/{StreamlitSyntaxHighlighter.DUPp9dS3.js → StreamlitSyntaxHighlighter.CYFWoZHb.js} +1 -1
  181. streamlit/static/static/js/{TableChart.esm.C_g2CvCE.js → TableChart.esm.D6ydHcIm.js} +1 -1
  182. streamlit/static/static/js/Toolbar.BHDNzWBx.js +1 -0
  183. streamlit/static/static/js/{WidgetLabelHelpIconInline.Dy4yV6I2.js → WidgetLabelHelpIconInline.DEXBrVlc.js} +1 -1
  184. streamlit/static/static/js/{base-input.DQAb60v0.js → base-input.TSQjctlq.js} +4 -4
  185. streamlit/static/static/js/{checkbox.C0HE0ojW.js → checkbox.BKgfzJZV.js} +1 -1
  186. streamlit/static/static/js/{createDownloadLinkElement.DBMfH8_e.js → createDownloadLinkElement.CG7nr2a4.js} +1 -1
  187. streamlit/static/static/js/{data-grid-overlay-editor.CSZWem5Q.js → data-grid-overlay-editor.ChXO__lP.js} +1 -1
  188. streamlit/static/static/js/{downloader.Bp8c7mYD.js → downloader.DJ3R_zWA.js} +1 -1
  189. streamlit/static/static/js/embed.u3PPfLkw.js +193 -0
  190. streamlit/static/static/js/{es6.j7akTCaI.js → es6.C5Mfy8nd.js} +2 -2
  191. streamlit/static/static/js/{formatNumber.CfuUiEpF.js → formatNumber.CMRgW9EJ.js} +1 -1
  192. streamlit/static/static/js/{iconPosition.BVSTKfGd.js → iconPosition.B4EEXI3E.js} +1 -1
  193. streamlit/static/static/js/{iframeResizer.contentWindow.BZ3lugzo.js → iframeResizer.contentWindow.WSvOiTW0.js} +1 -1
  194. streamlit/static/static/js/index.-FOBV3nz.js +1 -0
  195. streamlit/static/static/js/{index.D0tXFTaW.js → index.-NF8OSF5.js} +1 -1
  196. streamlit/static/static/js/{index.Dk0CU4R6.js → index.4cBg8kn5.js} +1 -1
  197. streamlit/static/static/js/{index.DtZTtufl.js → index.B0pzzCsH.js} +1 -1
  198. streamlit/static/static/js/{index.DSaE74nc.js → index.BID6ND5j.js} +2 -2
  199. streamlit/static/static/js/index.BMp5bGjh.js +1 -0
  200. streamlit/static/static/js/{index.CAMxgVFm.js → index.BQcmlvas.js} +1 -1
  201. streamlit/static/static/js/{index.C0F0G-wg.js → index.BRcmclgI.js} +1 -1
  202. streamlit/static/static/js/index.BaUZR4IG.js +1 -0
  203. streamlit/static/static/js/{index.Cow0Hs9V.js → index.BbMJj4PN.js} +1 -1
  204. streamlit/static/static/js/{index.iboGgrkh.js → index.BdCTJtq3.js} +2 -2
  205. streamlit/static/static/js/index.BdETLMuI.js +1 -0
  206. streamlit/static/static/js/index.BnKMWhs1.js +1 -0
  207. streamlit/static/static/js/index.Br1kXwQW.js +2 -0
  208. streamlit/static/static/js/{index.B2fTHpId.js → index.Bt2olRE4.js} +1 -1
  209. streamlit/static/static/js/{index.DBIRzFM7.js → index.Bxwsv5T8.js} +1 -1
  210. streamlit/static/static/js/index.C4KskYz6.js +1 -0
  211. streamlit/static/static/js/{index.BgCYNmov.js → index.C6bmbXk0.js} +1 -1
  212. streamlit/static/static/js/{index.7S_sCSRx.js → index.CEfKfbta.js} +1 -1
  213. streamlit/static/static/js/index.CIuaA8q0.js +2 -0
  214. streamlit/static/static/js/{index.CWAvu1Qu.js → index.CV1sObFX.js} +1 -1
  215. streamlit/static/static/js/{index.C9QftD-S.js → index.CbR6dgaV.js} +1 -1
  216. streamlit/static/static/js/index.Cq6szKqJ.js +1 -0
  217. streamlit/static/static/js/index.CyouXqCz.js +1 -0
  218. streamlit/static/static/js/{index.BMFt07G_.js → index.D1NUgMFI.js} +1 -1
  219. streamlit/static/static/js/{index.Tq2okoAU.js → index.D7SWG4Om.js} +1 -1
  220. streamlit/static/static/js/{index.DgJeIFb5.js → index.DAYPEwLI.js} +1 -1
  221. streamlit/static/static/js/index.DKS75Vfg.js +11 -0
  222. streamlit/static/static/js/{index.FfR9SXQv.js → index.DOXrMIxB.js} +1 -1
  223. streamlit/static/static/js/{index.BiVJWMS-.js → index.DOzYX8yS.js} +3 -3
  224. streamlit/static/static/js/{index.nEa8y_He.js → index.DRFMYcC4.js} +4 -4
  225. streamlit/static/static/js/{index.dgs1TGpP.js → index.Divl5FCY.js} +1 -1
  226. streamlit/static/static/js/{index.95DldRtG.js → index.DjAJ_CUa.js} +1 -1
  227. streamlit/static/static/js/{index.Z0mB4zBp.js → index.Dncue2pm.js} +33 -33
  228. streamlit/static/static/js/{index.DFT9nVK6.js → index.Drusyo5m.js} +48 -48
  229. streamlit/static/static/js/{index.1PD6f3vh.js → index.DuUyDGnP.js} +1 -1
  230. streamlit/static/static/js/{index.DpU0Bc2F.js → index.DvgT2rB2.js} +223 -223
  231. streamlit/static/static/js/{index.Bukztsaz.js → index.DzutABu5.js} +2 -2
  232. streamlit/static/static/js/index.Dzw2iPzi.js +3 -0
  233. streamlit/static/static/js/{index.DYkkO_of.js → index.FsTmxLbT.js} +1 -1
  234. streamlit/static/static/js/{index.CTQ8QcOV.js → index.OIwPqGYN.js} +1 -1
  235. streamlit/static/static/js/{index.NtSfVVJe.js → index.RXLN7YFT.js} +2 -2
  236. streamlit/static/static/js/{index.BU3d_gp1.js → index.YYb2u0jk.js} +2 -2
  237. streamlit/static/static/js/{index.BXfSsjdq.js → index.h8ejt-W3.js} +1 -1
  238. streamlit/static/static/js/{index.gPUFpUqs.js → index.lFMCi9am.js} +1 -1
  239. streamlit/static/static/js/{index.BDA5l7b9.js → index.pOgf4cEj.js} +1 -1
  240. streamlit/static/static/js/index.s_E0s7LB.js +188 -0
  241. streamlit/static/static/js/{index.DysJZEAt.js → index.xLCbzoqj.js} +1 -1
  242. streamlit/static/static/js/{input.Pz8Lwzsi.js → input.BLG7kWaj.js} +2 -2
  243. streamlit/static/static/js/{main.BeiYkHRo.js → main.D_CmqChN.js} +1 -1
  244. streamlit/static/static/js/{memory.Dyx_JBbb.js → memory.T8u9KqIQ.js} +1 -1
  245. streamlit/static/static/js/{number-overlay-editor.NLIdF6b9.js → number-overlay-editor.BKBSXkAM.js} +2 -2
  246. streamlit/static/static/js/{pandasStylerUtils.DsNlDEqS.js → pandasStylerUtils.B4tLYMwS.js} +1 -1
  247. streamlit/static/static/js/{sandbox.bER7qtR1.js → sandbox.jRlkcPem.js} +1 -1
  248. streamlit/static/static/js/{styled-components.DcoFBb7G.js → styled-components.D2QhNwzd.js} +1 -1
  249. streamlit/static/static/js/{throttle.DOaQWO4U.js → throttle.Cyw_V0Dq.js} +1 -1
  250. streamlit/static/static/js/{timepicker.RjHB2IT4.js → timepicker.PzyuDDWl.js} +1 -1
  251. streamlit/static/static/js/{toConsumableArray.DFAIugL0.js → toConsumableArray.gE9fMkLj.js} +1 -1
  252. streamlit/static/static/js/uniqueId.B1GeHnT1.js +1 -0
  253. streamlit/static/static/js/{useBasicWidgetState.CTtyymrp.js → useBasicWidgetState.DFklfao0.js} +1 -1
  254. streamlit/static/static/js/{useIntlLocale.DG5haQGX.js → useIntlLocale.C3tUGWTU.js} +8 -8
  255. streamlit/static/static/js/{useTextInputAutoExpand.Cnfcep1Z.js → useTextInputAutoExpand.D9nU_y-e.js} +1 -1
  256. streamlit/static/static/js/useUpdateUiValue.ClTdrkJN.js +1 -0
  257. streamlit/static/static/js/{useWaveformController.DozaayUB.js → useWaveformController.lzTbjMW2.js} +1 -1
  258. streamlit/static/static/js/{withCalculatedWidth.SNNFFxhJ.js → withCalculatedWidth.Dxs9I5Oe.js} +1 -1
  259. streamlit/static/static/js/{withFullScreenWrapper.Dl2f8_gt.js → withFullScreenWrapper.DfpAcJxf.js} +1 -1
  260. streamlit/string_util.py +2 -2
  261. streamlit/testing/v1/app_test.py +1 -1
  262. streamlit/testing/v1/element_tree.py +33 -20
  263. streamlit/type_util.py +2 -2
  264. streamlit/url_util.py +2 -2
  265. streamlit/user_info.py +2 -41
  266. streamlit/util.py +1 -1
  267. streamlit/watcher/event_based_path_watcher.py +37 -7
  268. streamlit/watcher/path_watcher.py +61 -2
  269. streamlit/watcher/util.py +26 -10
  270. streamlit/web/bootstrap.py +16 -4
  271. streamlit/web/cli.py +1 -4
  272. streamlit/web/server/app_discovery.py +2 -1
  273. streamlit/web/server/app_static_file_handler.py +9 -0
  274. streamlit/web/server/bidi_component_request_handler.py +4 -4
  275. streamlit/web/server/component_file_utils.py +14 -6
  276. streamlit/web/server/component_request_handler.py +2 -2
  277. streamlit/web/server/oauth_authlib_routes.py +14 -42
  278. streamlit/web/server/server.py +1 -1
  279. streamlit/web/server/server_util.py +23 -1
  280. streamlit/web/server/starlette/starlette_app.py +7 -1
  281. streamlit/web/server/starlette/starlette_auth_routes.py +94 -16
  282. streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
  283. streamlit/web/server/starlette/starlette_routes.py +16 -9
  284. streamlit/web/server/starlette/starlette_server.py +2 -2
  285. streamlit/web/server/starlette/starlette_static_routes.py +14 -4
  286. streamlit/web/server/stats_request_handler.py +1 -3
  287. {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/METADATA +10 -25
  288. {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/RECORD +291 -291
  289. {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/WHEEL +1 -1
  290. streamlit/commands/experimental_query_params.py +0 -169
  291. streamlit/static/static/js/Particles.D5ZUTvE6.js +0 -1
  292. streamlit/static/static/js/Toolbar.BbO8bxwz.js +0 -1
  293. streamlit/static/static/js/embed.DQBlGL9Q.js +0 -195
  294. streamlit/static/static/js/index.5CsPRetw.js +0 -1
  295. streamlit/static/static/js/index.BGgra9Bb.js +0 -188
  296. streamlit/static/static/js/index.BGzJYcHz.js +0 -1
  297. streamlit/static/static/js/index.BNpEDrb2.js +0 -1
  298. streamlit/static/static/js/index.Bk5wGJXh.js +0 -1
  299. streamlit/static/static/js/index.By8GIgDH.js +0 -1
  300. streamlit/static/static/js/index.C8VoW8Ph.js +0 -1
  301. streamlit/static/static/js/index.CZzy-Gct.js +0 -1
  302. streamlit/static/static/js/index.CeFdbzfR.js +0 -11
  303. streamlit/static/static/js/index.CkmNfvPD.js +0 -1
  304. streamlit/static/static/js/index.CsmTnJl4.js +0 -3
  305. streamlit/static/static/js/index.DZGCJu4I.js +0 -2
  306. streamlit/static/static/js/index.svncz-Ad.js +0 -2
  307. streamlit/static/static/js/uniqueId.DEvFPH9n.js +0 -1
  308. streamlit/static/static/js/useUpdateUiValue.BWnXwmrp.js +0 -1
  309. streamlit-1.53.0.data/scripts/streamlit.cmd +0 -16
  310. {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/entry_points.txt +0 -0
  311. {streamlit-1.53.0.dist-info → streamlit-1.54.0.dist-info}/top_level.txt +0 -0
@@ -127,7 +127,7 @@ def _convert_datelike_to_date(
127
127
  if isinstance(value, date):
128
128
  return value
129
129
 
130
- if value in {"today"}:
130
+ if value == "today":
131
131
  return datetime.now().date()
132
132
 
133
133
  if isinstance(value, str):
@@ -472,6 +472,109 @@ class TimeInputSerde:
472
472
  return time.strftime(v, "%H:%M")
473
473
 
474
474
 
475
+ def _validate_date_value(
476
+ current_value: DateWidgetReturn,
477
+ parsed_values: _DateInputValues,
478
+ has_explicit_bounds: bool,
479
+ ) -> tuple[DateWidgetReturn, bool]:
480
+ """Validate current value against min/max bounds and reset if needed.
481
+
482
+ Only validates when has_explicit_bounds is True (user provided min_value or max_value).
483
+ This avoids incorrectly resetting values against computed default bounds.
484
+
485
+ Parameters
486
+ ----------
487
+ current_value : DateWidgetReturn
488
+ The current value of the date input widget. Can be a single date, a tuple of
489
+ dates (for range mode), or None.
490
+ parsed_values : _DateInputValues
491
+ Parsed configuration containing min, max, default value, and whether the widget
492
+ is in range mode.
493
+ has_explicit_bounds : bool
494
+ Whether the user explicitly provided min_value or max_value. If False, validation
495
+ is skipped to avoid resetting against computed default bounds.
496
+
497
+ Returns
498
+ -------
499
+ tuple[DateWidgetReturn, bool]
500
+ A tuple of (validated_value, was_reset) where validated_value is either the
501
+ original value (if valid) or the default value (if reset was needed), and
502
+ was_reset indicates whether a reset occurred.
503
+ """
504
+ value_needs_reset = False
505
+
506
+ if current_value is None or not has_explicit_bounds:
507
+ return current_value, value_needs_reset
508
+
509
+ # For range inputs, current_value is a tuple; for single inputs, it's a date
510
+ if (
511
+ parsed_values.is_range
512
+ and isinstance(current_value, tuple)
513
+ and len(current_value) > 0
514
+ ):
515
+ # For range mode, check if any date in the tuple is outside bounds.
516
+ # Cast to tuple[date, ...] to satisfy the type checker after the length check.
517
+ non_empty_value = cast("tuple[date, ...]", current_value)
518
+ start_date = non_empty_value[0]
519
+ end_date = non_empty_value[-1] if len(non_empty_value) > 1 else start_date
520
+ if start_date < parsed_values.min or end_date > parsed_values.max:
521
+ value_needs_reset = True
522
+ elif not parsed_values.is_range and isinstance(current_value, date):
523
+ # For single date mode
524
+ if current_value < parsed_values.min or current_value > parsed_values.max:
525
+ value_needs_reset = True
526
+ else:
527
+ # Type mismatch: widget mode doesn't match current value type (e.g., range mode
528
+ # with a single date value or single mode with a tuple). Reset to match the mode.
529
+ value_needs_reset = True
530
+
531
+ if not value_needs_reset:
532
+ return current_value, value_needs_reset
533
+
534
+ # Reset to the default value from parsed_values
535
+ if parsed_values.value is None or len(parsed_values.value) == 0:
536
+ return (() if parsed_values.is_range else None), True
537
+ if not parsed_values.is_range:
538
+ return parsed_values.value[0], True
539
+ return cast("DateWidgetReturn", tuple(parsed_values.value)), True
540
+
541
+
542
+ def _validate_datetime_value(
543
+ current_value: datetime | None,
544
+ parsed_values: _DateTimeInputValues,
545
+ has_explicit_bounds: bool,
546
+ ) -> tuple[datetime | None, bool]:
547
+ """Validate current datetime value against min/max bounds and determine if reset is needed.
548
+
549
+ Only validates when has_explicit_bounds is True (user provided min_value or max_value).
550
+ This avoids incorrectly determining if reset is needed against computed default bounds.
551
+
552
+ Parameters
553
+ ----------
554
+ current_value : datetime | None
555
+ The current value of the datetime input widget.
556
+ parsed_values : _DateTimeInputValues
557
+ Parsed configuration containing min, max, and default value.
558
+ has_explicit_bounds : bool
559
+ Whether the user explicitly provided min_value or max_value. If False, validation
560
+ is skipped to avoid resetting against computed default bounds.
561
+
562
+ Returns
563
+ -------
564
+ tuple[datetime | None, bool]
565
+ A tuple of (validated_value, was_reset) where validated_value is either the
566
+ original value (if valid) or the default value (if reset was needed), and
567
+ was_reset indicates whether a reset occurred.
568
+ """
569
+ if current_value is None or not has_explicit_bounds:
570
+ return current_value, False
571
+
572
+ if current_value < parsed_values.min or current_value > parsed_values.max:
573
+ return parsed_values.value, True
574
+
575
+ return current_value, False
576
+
577
+
475
578
  @dataclass
476
579
  class DateInputSerde:
477
580
  value: _DateInputValues
@@ -1065,9 +1168,10 @@ class TimeWidgetsMixin:
1065
1168
  element_id = compute_and_register_element_id(
1066
1169
  "date_time_input",
1067
1170
  user_key=key,
1068
- # Ensure stable IDs when the key is provided; whitelist parameters that
1069
- # affect the selectable range or formatting.
1070
- key_as_main_identity={"min_value", "max_value", "format", "step"},
1171
+ # Format is whitelisted because of a bug in the BaseWeb date input component.
1172
+ # Step is whitelisted because it invalidates the current selection.
1173
+ # We might be able to unlock this as a follow-up.
1174
+ key_as_main_identity={"format", "step"},
1071
1175
  dg=self.dg,
1072
1176
  label=label,
1073
1177
  value=value_for_id,
@@ -1078,7 +1182,9 @@ class TimeWidgetsMixin:
1078
1182
  step=step,
1079
1183
  width=width,
1080
1184
  )
1081
- del value
1185
+ # Track if user explicitly set bounds (before del)
1186
+ has_explicit_bounds = min_value is not None or max_value is not None
1187
+ del value, min_value, max_value
1082
1188
 
1083
1189
  if not bool(ALLOWED_DATE_FORMATS.match(format)):
1084
1190
  raise StreamlitAPIException(
@@ -1141,8 +1247,20 @@ class TimeWidgetsMixin:
1141
1247
  value_type="string_array_value",
1142
1248
  )
1143
1249
 
1144
- if widget_state.value_changed:
1145
- date_time_input_proto.value[:] = serde.serialize(widget_state.value)
1250
+ # Validate the current value against the new min/max bounds.
1251
+ # Only validate when user explicitly provided min_value or max_value.
1252
+ current_value, value_needs_reset = _validate_datetime_value(
1253
+ widget_state.value, datetime_values, has_explicit_bounds
1254
+ )
1255
+
1256
+ if value_needs_reset and key is not None:
1257
+ # Update session_state so subsequent accesses in this run
1258
+ # return the corrected value. Use reset_state_value to avoid
1259
+ # the "cannot be modified after widget instantiated" error.
1260
+ get_session_state().reset_state_value(key, current_value)
1261
+
1262
+ if value_needs_reset or widget_state.value_changed:
1263
+ date_time_input_proto.value[:] = serde.serialize(current_value)
1146
1264
  date_time_input_proto.set_value = True
1147
1265
 
1148
1266
  validate_width(width)
@@ -1151,7 +1269,7 @@ class TimeWidgetsMixin:
1151
1269
  self.dg._enqueue(
1152
1270
  "date_time_input", date_time_input_proto, layout_config=layout_config
1153
1271
  )
1154
- return widget_state.value
1272
+ return current_value
1155
1273
 
1156
1274
  @overload
1157
1275
  def date_input(
@@ -1467,7 +1585,7 @@ class TimeWidgetsMixin:
1467
1585
  parsed_min_date = parse_date_deterministic_for_id(min_value)
1468
1586
  parsed_max_date = parse_date_deterministic_for_id(max_value)
1469
1587
 
1470
- parsed: str | None | list[str | None]
1588
+ parsed: str | list[str | None] | None
1471
1589
  if value == "today":
1472
1590
  parsed = None
1473
1591
  elif isinstance(value, Sequence):
@@ -1480,12 +1598,10 @@ class TimeWidgetsMixin:
1480
1598
  element_id = compute_and_register_element_id(
1481
1599
  "date_input",
1482
1600
  user_key=key,
1483
- # Ensure stable ID when key is provided; explicitly whitelist parameters
1484
- # that might invalidate the current widget state.
1485
- # format should be supported. However, there is a bug in baseweb where
1486
- # changing the format dynamically leads to a wrongly formatted date.
1487
- # So, we whitelist it for now until we migrate this away from baseweb.
1488
- key_as_main_identity={"min_value", "max_value", "format"},
1601
+ # Ensure stable ID when key is provided. Only format is whitelisted because
1602
+ # there is a bug in baseweb where changing the format dynamically leads to
1603
+ # a wrongly formatted date. min_value and max_value support dynamic changes.
1604
+ key_as_main_identity={"format"},
1489
1605
  dg=self.dg,
1490
1606
  label=label,
1491
1607
  value=parsed,
@@ -1508,6 +1624,9 @@ class TimeWidgetsMixin:
1508
1624
  max_value=max_value,
1509
1625
  )
1510
1626
 
1627
+ # Track if user explicitly set bounds (before del)
1628
+ has_explicit_bounds = min_value is not None or max_value is not None
1629
+
1511
1630
  if value == "today":
1512
1631
  # We need to know if this is a single or range date_input, but don't have
1513
1632
  # a default value, so we check if session_state can tell us.
@@ -1564,15 +1683,28 @@ class TimeWidgetsMixin:
1564
1683
  value_type="string_array_value",
1565
1684
  )
1566
1685
 
1567
- if widget_state.value_changed:
1568
- date_input_proto.value[:] = serde.serialize(widget_state.value)
1686
+ # Validate the current value against the new min/max bounds.
1687
+ # Only validate when user explicitly provided min_value or max_value.
1688
+ current_value, value_needs_reset = _validate_date_value(
1689
+ widget_state.value, parsed_values, has_explicit_bounds
1690
+ )
1691
+
1692
+ # Reset if needed.
1693
+ if value_needs_reset and key is not None:
1694
+ # Update session_state so subsequent accesses in this run
1695
+ # return the corrected value. Use reset_state_value to avoid
1696
+ # the "cannot be modified after widget instantiated" error.
1697
+ get_session_state().reset_state_value(key, current_value)
1698
+
1699
+ if value_needs_reset or widget_state.value_changed:
1700
+ date_input_proto.value[:] = serde.serialize(current_value)
1569
1701
  date_input_proto.set_value = True
1570
1702
 
1571
1703
  validate_width(width)
1572
1704
  layout_config = LayoutConfig(width=width)
1573
1705
 
1574
1706
  self.dg._enqueue("date_input", date_input_proto, layout_config=layout_config)
1575
- return widget_state.value
1707
+ return current_value
1576
1708
 
1577
1709
  @property
1578
1710
  def dg(self) -> DeltaGenerator:
@@ -56,7 +56,7 @@ HELP_TYPES: Final[tuple[type[Any], ...]] = (
56
56
  )
57
57
 
58
58
 
59
- class StreamingOutput(list[Any]):
59
+ class StreamingOutput(list[Any]): # noqa: FURB189
60
60
  pass
61
61
 
62
62
 
@@ -178,8 +178,7 @@ class WriteMixin:
178
178
 
179
179
  def flush_stream_response() -> None:
180
180
  """Write the full response to the app."""
181
- nonlocal streamed_response
182
- nonlocal stream_container
181
+ nonlocal streamed_response, stream_container
183
182
 
184
183
  if streamed_response and stream_container:
185
184
  # Replace the stream_container element the full response
streamlit/env_util.py CHANGED
@@ -46,7 +46,7 @@ def is_repl() -> bool:
46
46
 
47
47
  # <stdin> is what the basic Python REPL calls the root frame's
48
48
  # filename, and <string> is what iPython sometimes calls it.
49
- return filename in ("<stdin>", "<string>")
49
+ return filename in {"<stdin>", "<string>"}
50
50
 
51
51
 
52
52
  def is_executable_in_path(name: str) -> bool:
streamlit/errors.py CHANGED
@@ -12,6 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ # ruff: noqa: RUF027 - We allow template strings in localizable exception messages instead of f-strings.
16
+
15
17
  from __future__ import annotations
16
18
 
17
19
  import os
@@ -32,14 +34,10 @@ class Error(Exception):
32
34
  code.
33
35
  """
34
36
 
35
- pass
36
-
37
37
 
38
38
  class CustomComponentError(Error):
39
39
  """Exceptions thrown in the custom components code path."""
40
40
 
41
- pass
42
-
43
41
 
44
42
  class StreamlitComponentRegistryError(Error):
45
43
  """Exceptions raised while discovering or registering Streamlit components.
@@ -49,8 +47,6 @@ class StreamlitComponentRegistryError(Error):
49
47
  registry.
50
48
  """
51
49
 
52
- pass
53
-
54
50
 
55
51
  class DeprecationError(Error):
56
52
  pass
@@ -61,16 +57,12 @@ class FragmentStorageKeyError(Error, KeyError):
61
57
  operation.
62
58
  """
63
59
 
64
- pass
65
-
66
60
 
67
61
  class FragmentHandledException(Exception): # noqa: N818
68
62
  """An exception that is raised by the fragment
69
63
  when it has handled the exception itself.
70
64
  """
71
65
 
72
- pass
73
-
74
66
 
75
67
  class NoStaticFiles(Error): # noqa: N818
76
68
  pass
@@ -87,14 +79,10 @@ class MarkdownFormattedException(Error): # noqa: N818
87
79
  nicely formatted on the frontend.
88
80
  """
89
81
 
90
- pass
91
-
92
82
 
93
83
  class StreamlitMaxRetriesError(Error):
94
84
  """An exception raised when a file or folder cannot be accessed after multiple retries."""
95
85
 
96
- pass
97
-
98
86
 
99
87
  class StreamlitAPIException(MarkdownFormattedException):
100
88
  """Base class for Streamlit API exceptions.
@@ -129,7 +129,7 @@ class LLMThoughtLabeler:
129
129
  input_str_len = min(MAX_TOOL_INPUT_STR_LENGTH, len(input_str))
130
130
  input_str = input_str[:input_str_len]
131
131
  if len(tool.input_str) > input_str_len:
132
- input_str = input_str + "..."
132
+ input_str += "..."
133
133
  input_str = input_str.replace("\n", " ")
134
134
  return f"**{name}:** {input_str}"
135
135
 
@@ -54,7 +54,7 @@ def data_frame_demo() -> None:
54
54
  color="Region:N",
55
55
  )
56
56
  )
57
- st.altair_chart(chart, use_container_width=True)
57
+ st.altair_chart(chart, width="stretch")
58
58
  except URLError as e:
59
59
  st.error(f"This demo requires internet access. Connection error: {e.reason}")
60
60
 
@@ -23,16 +23,24 @@ from streamlit.hello.utils import show_code
23
23
  def plotting_demo() -> None:
24
24
  progress_bar = st.sidebar.progress(0)
25
25
  status_text = st.sidebar.empty()
26
- last_rows = np.random.randn(1, 1) # noqa: NPY002
27
- chart = st.line_chart(last_rows)
28
-
29
- for i in range(1, 101):
30
- new_rows = last_rows[-1, :] + np.random.randn(5, 1).cumsum(axis=0) # noqa: NPY002
31
- status_text.text(f"{i}% complete")
32
- chart.add_rows(new_rows)
33
- progress_bar.progress(i)
34
- last_rows = new_rows
35
- time.sleep(0.05)
26
+ chart = st.empty()
27
+
28
+ # Initialize with one data point
29
+ data = np.random.randn(1, 1) # noqa: NPY002
30
+ chart.line_chart(data)
31
+
32
+ for i in range(1, 51):
33
+ # Generate new rows based on the last value (random walk)
34
+ new_rows = data[-1, :] + np.random.randn(5, 1).cumsum(axis=0) # noqa: NPY002
35
+ # Append new rows to existing data
36
+ data = np.concatenate([data, new_rows])
37
+ # Update the chart with full data
38
+ chart.line_chart(data)
39
+ # Scale progress to show 0-100% with 50 iterations
40
+ progress = i * 2
41
+ status_text.text(f"{progress}% complete")
42
+ progress_bar.progress(progress)
43
+ time.sleep(0.01)
36
44
 
37
45
  progress_bar.empty()
38
46
 
@@ -47,8 +55,7 @@ st.title("Plotting demo")
47
55
  st.write(
48
56
  """
49
57
  This demo illustrates a combination of plotting and animation with
50
- Streamlit. We're generating a bunch of random numbers in a loop for around
51
- 5 seconds. Enjoy!
58
+ Streamlit. We're generating a bunch of random numbers in a loop. Enjoy!
52
59
  """
53
60
  )
54
61
  plotting_demo()
@@ -0,0 +1,98 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Shared path security utilities for preventing path traversal and SSRF attacks.
16
+
17
+ This module provides a centralized implementation for path validation that is
18
+ used by multiple parts of the codebase. Having a single implementation ensures
19
+ consistent security checks and avoids divergent behavior between components.
20
+
21
+ Security Context
22
+ ----------------
23
+ These checks are designed to run BEFORE any filesystem operations (like
24
+ ``os.path.realpath()``) to prevent Windows from triggering SMB connections
25
+ to attacker-controlled servers when resolving UNC paths. This prevents
26
+ SSRF attacks and NTLM hash disclosure.
27
+ """
28
+
29
+ from __future__ import annotations
30
+
31
+ import os
32
+ import string
33
+
34
+
35
+ def is_unsafe_path_pattern(path: str) -> bool:
36
+ r"""Return True if path contains UNC, absolute, drive, or traversal patterns.
37
+
38
+ This function checks for dangerous path patterns that could lead to:
39
+ - SSRF attacks via Windows UNC path resolution
40
+ - NTLM hash disclosure via SMB connections
41
+ - Path traversal outside intended directories
42
+ - Path truncation via null bytes
43
+
44
+ IMPORTANT: This check must run BEFORE any ``os.path.realpath()`` calls
45
+ to prevent Windows from triggering SMB connections to attacker-controlled
46
+ servers.
47
+
48
+ Parameters
49
+ ----------
50
+ path : str
51
+ The path string to validate.
52
+
53
+ Returns
54
+ -------
55
+ bool
56
+ True if the path contains unsafe patterns, False if it appears safe
57
+ for further processing.
58
+
59
+ Examples
60
+ --------
61
+ >>> is_unsafe_path_pattern("subdir/file.js")
62
+ False
63
+ >>> is_unsafe_path_pattern("\\\\server\\share")
64
+ True
65
+ >>> is_unsafe_path_pattern("../../../etc/passwd")
66
+ True
67
+ >>> is_unsafe_path_pattern("C:\\Windows\\system32")
68
+ True
69
+ """
70
+ # Null bytes can be used for path truncation attacks
71
+ if "\x00" in path:
72
+ return True
73
+
74
+ # UNC paths (Windows network shares, including \\?\ and \\.\ prefixes)
75
+ if path.startswith(("\\\\", "//")):
76
+ return True
77
+
78
+ # Windows drive paths (e.g. C:\, D:foo) - on Windows, os.path.realpath() on a
79
+ # drive path can trigger SMB connections if the drive is mapped to a network share.
80
+ # This enables SSRF attacks and NTLM hash disclosure. We reject all drive-qualified
81
+ # paths including drive-relative paths like "C:foo" which resolve against the current
82
+ # directory of that drive. Checked on all platforms for defense-in-depth and
83
+ # testability (CI runs on Linux).
84
+ if len(path) >= 2 and path[0] in string.ascii_letters and path[1] == ":":
85
+ return True
86
+
87
+ # Rooted backslash or forward slash (absolute paths)
88
+ if path.startswith(("\\", "/")):
89
+ return True
90
+
91
+ # Also check os.path.isabs for platform-specific absolute path detection
92
+ if os.path.isabs(path):
93
+ return True
94
+
95
+ # Path traversal - check segments after normalizing separators
96
+ normalized = path.replace("\\", "/")
97
+ segments = [seg for seg in normalized.split("/") if seg]
98
+ return ".." in segments
@@ -15,14 +15,13 @@ _sym_db = _symbol_database.Default()
15
15
  from streamlit.proto import WidthConfig_pb2 as streamlit_dot_proto_dot_WidthConfig__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Alert.proto\x1a!streamlit/proto/WidthConfig.proto\"\xb5\x01\n\x05\x41lert\x12\x0c\n\x04\x62ody\x18\x01 \x01(\t\x12\x1d\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\r.Alert.Format\x12\x0c\n\x04icon\x18\x03 \x01(\t\x12,\n\x0cwidth_config\x18\x04 \x01(\x0b\x32\x16.streamlit.WidthConfig\"C\n\x06\x46ormat\x12\n\n\x06UNUSED\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07SUCCESS\x10\x04\x42*\n\x1c\x63om.snowflake.apps.streamlitB\nAlertProtob\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Alert.proto\x1a!streamlit/proto/WidthConfig.proto\"\xb5\x01\n\x05\x41lert\x12\x0c\n\x04\x62ody\x18\x01 \x01(\t\x12\x1d\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\r.Alert.Format\x12\x0c\n\x04icon\x18\x03 \x01(\t\x12,\n\x0cwidth_config\x18\x04 \x01(\x0b\x32\x16.streamlit.WidthConfig\"C\n\x06\x46ormat\x12\n\n\x06UNUSED\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07SUCCESS\x10\x04\x62\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.Alert_pb2', _globals)
23
23
  if not _descriptor._USE_C_DESCRIPTORS:
24
- _globals['DESCRIPTOR']._loaded_options = None
25
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\nAlertProto'
24
+ DESCRIPTOR._loaded_options = None
26
25
  _globals['_ALERT']._serialized_start=67
27
26
  _globals['_ALERT']._serialized_end=248
28
27
  _globals['_ALERT_FORMAT']._serialized_start=181
@@ -14,14 +14,13 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dstreamlit/proto/AppPage.proto\"\x86\x01\n\x07\x41ppPage\x12\x18\n\x10page_script_hash\x18\x01 \x01(\t\x12\x11\n\tpage_name\x18\x02 \x01(\t\x12\x0c\n\x04icon\x18\x03 \x01(\t\x12\x12\n\nis_default\x18\x04 \x01(\x08\x12\x16\n\x0esection_header\x18\x05 \x01(\t\x12\x14\n\x0curl_pathname\x18\x06 \x01(\tB,\n\x1c\x63om.snowflake.apps.streamlitB\x0c\x41ppPageProtob\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dstreamlit/proto/AppPage.proto\"\x86\x01\n\x07\x41ppPage\x12\x18\n\x10page_script_hash\x18\x01 \x01(\t\x12\x11\n\tpage_name\x18\x02 \x01(\t\x12\x0c\n\x04icon\x18\x03 \x01(\t\x12\x12\n\nis_default\x18\x04 \x01(\x08\x12\x16\n\x0esection_header\x18\x05 \x01(\t\x12\x14\n\x0curl_pathname\x18\x06 \x01(\tb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.AppPage_pb2', _globals)
22
22
  if not _descriptor._USE_C_DESCRIPTORS:
23
- _globals['DESCRIPTOR']._loaded_options = None
24
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\014AppPageProto'
23
+ DESCRIPTOR._loaded_options = None
25
24
  _globals['_APPPAGE']._serialized_start=34
26
25
  _globals['_APPPAGE']._serialized_end=168
27
26
  # @@protoc_insertion_point(module_scope)
@@ -14,14 +14,13 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fstreamlit/proto/ArrowData.proto\"\x19\n\tArrowData\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x42.\n\x1c\x63om.snowflake.apps.streamlitB\x0e\x41rrowDataProtob\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fstreamlit/proto/ArrowData.proto\"\x19\n\tArrowData\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.ArrowData_pb2', _globals)
22
22
  if not _descriptor._USE_C_DESCRIPTORS:
23
- _globals['DESCRIPTOR']._loaded_options = None
24
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\016ArrowDataProto'
23
+ DESCRIPTOR._loaded_options = None
25
24
  _globals['_ARROWDATA']._serialized_start=35
26
25
  _globals['_ARROWDATA']._serialized_end=60
27
26
  # @@protoc_insertion_point(module_scope)
@@ -15,14 +15,13 @@ _sym_db = _symbol_database.Default()
15
15
  from streamlit.proto import Arrow_pb2 as streamlit_dot_proto_dot_Arrow__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'streamlit/proto/ArrowNamedDataSet.proto\x1a\x1bstreamlit/proto/Arrow.proto\"I\n\x11\x41rrowNamedDataSet\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08has_name\x18\x03 \x01(\x08\x12\x14\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x06.ArrowB6\n\x1c\x63om.snowflake.apps.streamlitB\x16\x41rrowNamedDataSetProtob\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'streamlit/proto/ArrowNamedDataSet.proto\x1a\x1bstreamlit/proto/Arrow.proto\"I\n\x11\x41rrowNamedDataSet\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08has_name\x18\x03 \x01(\x08\x12\x14\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x06.Arrowb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.ArrowNamedDataSet_pb2', _globals)
23
23
  if not _descriptor._USE_C_DESCRIPTORS:
24
- _globals['DESCRIPTOR']._loaded_options = None
25
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\026ArrowNamedDataSetProto'
24
+ DESCRIPTOR._loaded_options = None
26
25
  _globals['_ARROWNAMEDDATASET']._serialized_start=72
27
26
  _globals['_ARROWNAMEDDATASET']._serialized_end=145
28
27
  # @@protoc_insertion_point(module_scope)
@@ -16,14 +16,13 @@ from streamlit.proto import Arrow_pb2 as streamlit_dot_proto_dot_Arrow__pb2
16
16
  from streamlit.proto import ArrowNamedDataSet_pb2 as streamlit_dot_proto_dot_ArrowNamedDataSet__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(streamlit/proto/ArrowVegaLiteChart.proto\x1a\x1bstreamlit/proto/Arrow.proto\x1a\'streamlit/proto/ArrowNamedDataSet.proto\"\xc5\x01\n\x12\x41rrowVegaLiteChart\x12\x0c\n\x04spec\x18\x01 \x01(\t\x12\x14\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x06.Arrow\x12$\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x12.ArrowNamedDataSet\x12\x1b\n\x13use_container_width\x18\x05 \x01(\x08\x12\r\n\x05theme\x18\x06 \x01(\t\x12\n\n\x02id\x18\x07 \x01(\t\x12\x16\n\x0eselection_mode\x18\x08 \x03(\t\x12\x0f\n\x07\x66orm_id\x18\t \x01(\tJ\x04\x08\x03\x10\x04\x42\x37\n\x1c\x63om.snowflake.apps.streamlitB\x17\x41rrowVegaLiteChartProtob\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(streamlit/proto/ArrowVegaLiteChart.proto\x1a\x1bstreamlit/proto/Arrow.proto\x1a\'streamlit/proto/ArrowNamedDataSet.proto\"\xc5\x01\n\x12\x41rrowVegaLiteChart\x12\x0c\n\x04spec\x18\x01 \x01(\t\x12\x14\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x06.Arrow\x12$\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x12.ArrowNamedDataSet\x12\x1b\n\x13use_container_width\x18\x05 \x01(\x08\x12\r\n\x05theme\x18\x06 \x01(\t\x12\n\n\x02id\x18\x07 \x01(\t\x12\x16\n\x0eselection_mode\x18\x08 \x03(\t\x12\x0f\n\x07\x66orm_id\x18\t \x01(\tJ\x04\x08\x03\x10\x04\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
23
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.ArrowVegaLiteChart_pb2', _globals)
24
24
  if not _descriptor._USE_C_DESCRIPTORS:
25
- _globals['DESCRIPTOR']._loaded_options = None
26
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\027ArrowVegaLiteChartProto'
25
+ DESCRIPTOR._loaded_options = None
27
26
  _globals['_ARROWVEGALITECHART']._serialized_start=115
28
27
  _globals['_ARROWVEGALITECHART']._serialized_end=312
29
28
  # @@protoc_insertion_point(module_scope)
@@ -14,14 +14,13 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Arrow.proto\"\x9a\x05\n\x05\x41rrow\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x17\n\x06styler\x18\x02 \x01(\x0b\x32\x07.Styler\x12\x11\n\x05width\x18\x03 \x01(\rB\x02\x18\x01\x12\x12\n\x06height\x18\x04 \x01(\rB\x02\x18\x01\x12\x1f\n\x13use_container_width\x18\x05 \x01(\x08\x42\x02\x18\x01\x12\n\n\x02id\x18\x06 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x07 \x01(\t\x12(\n\x0c\x65\x64iting_mode\x18\x08 \x01(\x0e\x32\x12.Arrow.EditingMode\x12\x10\n\x08\x64isabled\x18\t \x01(\x08\x12\x0f\n\x07\x66orm_id\x18\n \x01(\t\x12\x14\n\x0c\x63olumn_order\x18\x0b \x03(\t\x12,\n\x0eselection_mode\x18\x0c \x03(\x0e\x32\x14.Arrow.SelectionMode\x12\x17\n\nrow_height\x18\r \x01(\rH\x00\x88\x01\x01\x12&\n\x0b\x62order_mode\x18\x0e \x01(\x0e\x32\x11.Arrow.BorderMode\x12\x18\n\x0bplaceholder\x18\x0f \x01(\tH\x01\x88\x01\x01\"S\n\x0b\x45\x64itingMode\x12\r\n\tREAD_ONLY\x10\x00\x12\t\n\x05\x46IXED\x10\x01\x12\x0b\n\x07\x44YNAMIC\x10\x02\x12\x0c\n\x08\x41\x44\x44_ONLY\x10\x03\x12\x0f\n\x0b\x44\x45LETE_ONLY\x10\x04\"t\n\rSelectionMode\x12\x0e\n\nSINGLE_ROW\x10\x00\x12\r\n\tMULTI_ROW\x10\x01\x12\x11\n\rSINGLE_COLUMN\x10\x02\x12\x10\n\x0cMULTI_COLUMN\x10\x03\x12\x0f\n\x0bSINGLE_CELL\x10\x04\x12\x0e\n\nMULTI_CELL\x10\x05\"/\n\nBorderMode\x12\x07\n\x03\x41LL\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x0e\n\nHORIZONTAL\x10\x02\x42\r\n\x0b_row_heightB\x0e\n\x0c_placeholder\"O\n\x06Styler\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61ption\x18\x02 \x01(\t\x12\x0e\n\x06styles\x18\x03 \x01(\t\x12\x16\n\x0e\x64isplay_values\x18\x04 \x01(\x0c\x42*\n\x1c\x63om.snowflake.apps.streamlitB\nArrowProtob\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Arrow.proto\"\x9a\x05\n\x05\x41rrow\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x17\n\x06styler\x18\x02 \x01(\x0b\x32\x07.Styler\x12\x11\n\x05width\x18\x03 \x01(\rB\x02\x18\x01\x12\x12\n\x06height\x18\x04 \x01(\rB\x02\x18\x01\x12\x1f\n\x13use_container_width\x18\x05 \x01(\x08\x42\x02\x18\x01\x12\n\n\x02id\x18\x06 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x07 \x01(\t\x12(\n\x0c\x65\x64iting_mode\x18\x08 \x01(\x0e\x32\x12.Arrow.EditingMode\x12\x10\n\x08\x64isabled\x18\t \x01(\x08\x12\x0f\n\x07\x66orm_id\x18\n \x01(\t\x12\x14\n\x0c\x63olumn_order\x18\x0b \x03(\t\x12,\n\x0eselection_mode\x18\x0c \x03(\x0e\x32\x14.Arrow.SelectionMode\x12\x17\n\nrow_height\x18\r \x01(\rH\x00\x88\x01\x01\x12&\n\x0b\x62order_mode\x18\x0e \x01(\x0e\x32\x11.Arrow.BorderMode\x12\x18\n\x0bplaceholder\x18\x0f \x01(\tH\x01\x88\x01\x01\"S\n\x0b\x45\x64itingMode\x12\r\n\tREAD_ONLY\x10\x00\x12\t\n\x05\x46IXED\x10\x01\x12\x0b\n\x07\x44YNAMIC\x10\x02\x12\x0c\n\x08\x41\x44\x44_ONLY\x10\x03\x12\x0f\n\x0b\x44\x45LETE_ONLY\x10\x04\"t\n\rSelectionMode\x12\x0e\n\nSINGLE_ROW\x10\x00\x12\r\n\tMULTI_ROW\x10\x01\x12\x11\n\rSINGLE_COLUMN\x10\x02\x12\x10\n\x0cMULTI_COLUMN\x10\x03\x12\x0f\n\x0bSINGLE_CELL\x10\x04\x12\x0e\n\nMULTI_CELL\x10\x05\"/\n\nBorderMode\x12\x07\n\x03\x41LL\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x0e\n\nHORIZONTAL\x10\x02\x42\r\n\x0b_row_heightB\x0e\n\x0c_placeholder\"O\n\x06Styler\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61ption\x18\x02 \x01(\t\x12\x0e\n\x06styles\x18\x03 \x01(\t\x12\x16\n\x0e\x64isplay_values\x18\x04 \x01(\x0c\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
21
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.Arrow_pb2', _globals)
22
22
  if not _descriptor._USE_C_DESCRIPTORS:
23
- _globals['DESCRIPTOR']._loaded_options = None
24
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\nArrowProto'
23
+ DESCRIPTOR._loaded_options = None
25
24
  _globals['_ARROW'].fields_by_name['width']._loaded_options = None
26
25
  _globals['_ARROW'].fields_by_name['width']._serialized_options = b'\030\001'
27
26
  _globals['_ARROW'].fields_by_name['height']._loaded_options = None
@@ -15,14 +15,13 @@ _sym_db = _symbol_database.Default()
15
15
  from streamlit.proto import LabelVisibilityMessage_pb2 as streamlit_dot_proto_dot_LabelVisibilityMessage__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n streamlit/proto/AudioInput.proto\x1a,streamlit/proto/LabelVisibilityMessage.proto\"\xb5\x01\n\nAudioInput\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x0c\n\x04help\x18\x03 \x01(\t\x12\x0f\n\x07\x66orm_id\x18\x04 \x01(\t\x12\x10\n\x08\x64isabled\x18\x05 \x01(\x08\x12\x31\n\x10label_visibility\x18\x06 \x01(\x0b\x32\x17.LabelVisibilityMessage\x12\x18\n\x0bsample_rate\x18\x07 \x01(\x05H\x00\x88\x01\x01\x42\x0e\n\x0c_sample_rateB/\n\x1c\x63om.snowflake.apps.streamlitB\x0f\x41udioInputProtob\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n streamlit/proto/AudioInput.proto\x1a,streamlit/proto/LabelVisibilityMessage.proto\"\xb5\x01\n\nAudioInput\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x0c\n\x04help\x18\x03 \x01(\t\x12\x0f\n\x07\x66orm_id\x18\x04 \x01(\t\x12\x10\n\x08\x64isabled\x18\x05 \x01(\x08\x12\x31\n\x10label_visibility\x18\x06 \x01(\x0b\x32\x17.LabelVisibilityMessage\x12\x18\n\x0bsample_rate\x18\x07 \x01(\x05H\x00\x88\x01\x01\x42\x0e\n\x0c_sample_rateb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.AudioInput_pb2', _globals)
23
23
  if not _descriptor._USE_C_DESCRIPTORS:
24
- _globals['DESCRIPTOR']._loaded_options = None
25
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\017AudioInputProto'
24
+ DESCRIPTOR._loaded_options = None
26
25
  _globals['_AUDIOINPUT']._serialized_start=83
27
26
  _globals['_AUDIOINPUT']._serialized_end=264
28
27
  # @@protoc_insertion_point(module_scope)
@@ -15,14 +15,13 @@ _sym_db = _symbol_database.Default()
15
15
  from streamlit.proto import WidthConfig_pb2 as streamlit_dot_proto_dot_WidthConfig__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Audio.proto\x1a!streamlit/proto/WidthConfig.proto\"\xca\x01\n\x05\x41udio\x12\x0b\n\x03url\x18\x05 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_time\x18\x06 \x01(\x05\x12\x0c\n\x04loop\x18\x07 \x01(\x08\x12\x10\n\x08\x61utoplay\x18\x08 \x01(\x08\x12\n\n\x02id\x18\t \x01(\t\x12\x31\n\x0cwidth_config\x18\n \x01(\x0b\x32\x16.streamlit.WidthConfigH\x00\x88\x01\x01\x42\x0f\n\r_width_configJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x04\x64\x61taR\x06\x66ormatB*\n\x1c\x63om.snowflake.apps.streamlitB\nAudioProtob\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Audio.proto\x1a!streamlit/proto/WidthConfig.proto\"\xca\x01\n\x05\x41udio\x12\x0b\n\x03url\x18\x05 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_time\x18\x06 \x01(\x05\x12\x0c\n\x04loop\x18\x07 \x01(\x08\x12\x10\n\x08\x61utoplay\x18\x08 \x01(\x08\x12\n\n\x02id\x18\t \x01(\t\x12\x31\n\x0cwidth_config\x18\n \x01(\x0b\x32\x16.streamlit.WidthConfigH\x00\x88\x01\x01\x42\x0f\n\r_width_configJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x04\x64\x61taR\x06\x66ormatb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'streamlit.proto.Audio_pb2', _globals)
23
23
  if not _descriptor._USE_C_DESCRIPTORS:
24
- _globals['DESCRIPTOR']._loaded_options = None
25
- _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\nAudioProto'
24
+ DESCRIPTOR._loaded_options = None
26
25
  _globals['_AUDIO']._serialized_start=67
27
26
  _globals['_AUDIO']._serialized_end=269
28
27
  # @@protoc_insertion_point(module_scope)