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.
Files changed (563) hide show
  1. streamlit/__init__.py +306 -0
  2. streamlit/__main__.py +20 -0
  3. streamlit/auth_util.py +218 -0
  4. streamlit/cli_util.py +105 -0
  5. streamlit/column_config.py +56 -0
  6. streamlit/commands/__init__.py +13 -0
  7. streamlit/commands/echo.py +126 -0
  8. streamlit/commands/execution_control.py +238 -0
  9. streamlit/commands/experimental_query_params.py +169 -0
  10. streamlit/commands/logo.py +189 -0
  11. streamlit/commands/navigation.py +385 -0
  12. streamlit/commands/page_config.py +311 -0
  13. streamlit/components/__init__.py +13 -0
  14. streamlit/components/lib/__init__.py +13 -0
  15. streamlit/components/lib/local_component_registry.py +84 -0
  16. streamlit/components/types/__init__.py +13 -0
  17. streamlit/components/types/base_component_registry.py +99 -0
  18. streamlit/components/types/base_custom_component.py +150 -0
  19. streamlit/components/v1/__init__.py +31 -0
  20. streamlit/components/v1/component_arrow.py +141 -0
  21. streamlit/components/v1/component_registry.py +130 -0
  22. streamlit/components/v1/components.py +38 -0
  23. streamlit/components/v1/custom_component.py +243 -0
  24. streamlit/config.py +1513 -0
  25. streamlit/config_option.py +311 -0
  26. streamlit/config_util.py +177 -0
  27. streamlit/connections/__init__.py +28 -0
  28. streamlit/connections/base_connection.py +174 -0
  29. streamlit/connections/snowflake_connection.py +562 -0
  30. streamlit/connections/snowpark_connection.py +213 -0
  31. streamlit/connections/sql_connection.py +425 -0
  32. streamlit/connections/util.py +97 -0
  33. streamlit/cursor.py +210 -0
  34. streamlit/dataframe_util.py +1416 -0
  35. streamlit/delta_generator.py +602 -0
  36. streamlit/delta_generator_singletons.py +204 -0
  37. streamlit/deprecation_util.py +209 -0
  38. streamlit/development.py +21 -0
  39. streamlit/elements/__init__.py +13 -0
  40. streamlit/elements/alert.py +234 -0
  41. streamlit/elements/arrow.py +962 -0
  42. streamlit/elements/balloons.py +47 -0
  43. streamlit/elements/bokeh_chart.py +133 -0
  44. streamlit/elements/code.py +114 -0
  45. streamlit/elements/deck_gl_json_chart.py +546 -0
  46. streamlit/elements/dialog_decorator.py +267 -0
  47. streamlit/elements/doc_string.py +558 -0
  48. streamlit/elements/empty.py +130 -0
  49. streamlit/elements/exception.py +331 -0
  50. streamlit/elements/form.py +354 -0
  51. streamlit/elements/graphviz_chart.py +150 -0
  52. streamlit/elements/heading.py +302 -0
  53. streamlit/elements/html.py +105 -0
  54. streamlit/elements/iframe.py +191 -0
  55. streamlit/elements/image.py +196 -0
  56. streamlit/elements/json.py +139 -0
  57. streamlit/elements/layouts.py +879 -0
  58. streamlit/elements/lib/__init__.py +13 -0
  59. streamlit/elements/lib/built_in_chart_utils.py +1157 -0
  60. streamlit/elements/lib/color_util.py +263 -0
  61. streamlit/elements/lib/column_config_utils.py +542 -0
  62. streamlit/elements/lib/column_types.py +2188 -0
  63. streamlit/elements/lib/dialog.py +147 -0
  64. streamlit/elements/lib/dicttools.py +154 -0
  65. streamlit/elements/lib/event_utils.py +37 -0
  66. streamlit/elements/lib/file_uploader_utils.py +66 -0
  67. streamlit/elements/lib/form_utils.py +77 -0
  68. streamlit/elements/lib/image_utils.py +441 -0
  69. streamlit/elements/lib/js_number.py +105 -0
  70. streamlit/elements/lib/mutable_status_container.py +183 -0
  71. streamlit/elements/lib/options_selector_utils.py +250 -0
  72. streamlit/elements/lib/pandas_styler_utils.py +274 -0
  73. streamlit/elements/lib/policies.py +194 -0
  74. streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
  75. streamlit/elements/lib/subtitle_utils.py +176 -0
  76. streamlit/elements/lib/utils.py +250 -0
  77. streamlit/elements/map.py +508 -0
  78. streamlit/elements/markdown.py +277 -0
  79. streamlit/elements/media.py +793 -0
  80. streamlit/elements/metric.py +301 -0
  81. streamlit/elements/plotly_chart.py +546 -0
  82. streamlit/elements/progress.py +156 -0
  83. streamlit/elements/pyplot.py +194 -0
  84. streamlit/elements/snow.py +47 -0
  85. streamlit/elements/spinner.py +113 -0
  86. streamlit/elements/text.py +76 -0
  87. streamlit/elements/toast.py +98 -0
  88. streamlit/elements/vega_charts.py +1984 -0
  89. streamlit/elements/widgets/__init__.py +13 -0
  90. streamlit/elements/widgets/audio_input.py +310 -0
  91. streamlit/elements/widgets/button.py +1123 -0
  92. streamlit/elements/widgets/button_group.py +1008 -0
  93. streamlit/elements/widgets/camera_input.py +263 -0
  94. streamlit/elements/widgets/chat.py +647 -0
  95. streamlit/elements/widgets/checkbox.py +352 -0
  96. streamlit/elements/widgets/color_picker.py +265 -0
  97. streamlit/elements/widgets/data_editor.py +983 -0
  98. streamlit/elements/widgets/file_uploader.py +486 -0
  99. streamlit/elements/widgets/multiselect.py +338 -0
  100. streamlit/elements/widgets/number_input.py +545 -0
  101. streamlit/elements/widgets/radio.py +407 -0
  102. streamlit/elements/widgets/select_slider.py +437 -0
  103. streamlit/elements/widgets/selectbox.py +366 -0
  104. streamlit/elements/widgets/slider.py +880 -0
  105. streamlit/elements/widgets/text_widgets.py +628 -0
  106. streamlit/elements/widgets/time_widgets.py +970 -0
  107. streamlit/elements/write.py +574 -0
  108. streamlit/emojis.py +34 -0
  109. streamlit/env_util.py +61 -0
  110. streamlit/error_util.py +105 -0
  111. streamlit/errors.py +452 -0
  112. streamlit/external/__init__.py +13 -0
  113. streamlit/external/langchain/__init__.py +23 -0
  114. streamlit/external/langchain/streamlit_callback_handler.py +406 -0
  115. streamlit/file_util.py +247 -0
  116. streamlit/git_util.py +173 -0
  117. streamlit/hello/__init__.py +13 -0
  118. streamlit/hello/animation_demo.py +82 -0
  119. streamlit/hello/dataframe_demo.py +71 -0
  120. streamlit/hello/hello.py +37 -0
  121. streamlit/hello/mapping_demo.py +114 -0
  122. streamlit/hello/plotting_demo.py +55 -0
  123. streamlit/hello/streamlit_app.py +55 -0
  124. streamlit/hello/utils.py +28 -0
  125. streamlit/logger.py +130 -0
  126. streamlit/material_icon_names.py +25 -0
  127. streamlit/navigation/__init__.py +13 -0
  128. streamlit/navigation/page.py +302 -0
  129. streamlit/net_util.py +125 -0
  130. streamlit/platform.py +33 -0
  131. streamlit/proto/Alert_pb2.py +29 -0
  132. streamlit/proto/Alert_pb2.pyi +90 -0
  133. streamlit/proto/AppPage_pb2.py +27 -0
  134. streamlit/proto/AppPage_pb2.pyi +64 -0
  135. streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
  136. streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
  137. streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
  138. streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
  139. streamlit/proto/Arrow_pb2.py +33 -0
  140. streamlit/proto/Arrow_pb2.pyi +188 -0
  141. streamlit/proto/AudioInput_pb2.py +28 -0
  142. streamlit/proto/AudioInput_pb2.pyi +58 -0
  143. streamlit/proto/Audio_pb2.py +27 -0
  144. streamlit/proto/Audio_pb2.pyi +58 -0
  145. streamlit/proto/AuthRedirect_pb2.py +27 -0
  146. streamlit/proto/AuthRedirect_pb2.pyi +41 -0
  147. streamlit/proto/AutoRerun_pb2.py +27 -0
  148. streamlit/proto/AutoRerun_pb2.pyi +45 -0
  149. streamlit/proto/BackMsg_pb2.py +29 -0
  150. streamlit/proto/BackMsg_pb2.pyi +105 -0
  151. streamlit/proto/Balloons_pb2.py +27 -0
  152. streamlit/proto/Balloons_pb2.pyi +43 -0
  153. streamlit/proto/Block_pb2.py +53 -0
  154. streamlit/proto/Block_pb2.pyi +322 -0
  155. streamlit/proto/BokehChart_pb2.py +27 -0
  156. streamlit/proto/BokehChart_pb2.pyi +49 -0
  157. streamlit/proto/ButtonGroup_pb2.py +36 -0
  158. streamlit/proto/ButtonGroup_pb2.pyi +169 -0
  159. streamlit/proto/Button_pb2.py +27 -0
  160. streamlit/proto/Button_pb2.pyi +71 -0
  161. streamlit/proto/CameraInput_pb2.py +28 -0
  162. streamlit/proto/CameraInput_pb2.pyi +58 -0
  163. streamlit/proto/ChatInput_pb2.py +31 -0
  164. streamlit/proto/ChatInput_pb2.pyi +111 -0
  165. streamlit/proto/Checkbox_pb2.py +30 -0
  166. streamlit/proto/Checkbox_pb2.pyi +90 -0
  167. streamlit/proto/ClientState_pb2.py +30 -0
  168. streamlit/proto/ClientState_pb2.pyi +90 -0
  169. streamlit/proto/Code_pb2.py +27 -0
  170. streamlit/proto/Code_pb2.pyi +55 -0
  171. streamlit/proto/ColorPicker_pb2.py +28 -0
  172. streamlit/proto/ColorPicker_pb2.pyi +67 -0
  173. streamlit/proto/Common_pb2.py +51 -0
  174. streamlit/proto/Common_pb2.pyi +293 -0
  175. streamlit/proto/Components_pb2.py +35 -0
  176. streamlit/proto/Components_pb2.pyi +172 -0
  177. streamlit/proto/DataFrame_pb2.py +56 -0
  178. streamlit/proto/DataFrame_pb2.pyi +397 -0
  179. streamlit/proto/DateInput_pb2.py +28 -0
  180. streamlit/proto/DateInput_pb2.pyi +83 -0
  181. streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
  182. streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
  183. streamlit/proto/Delta_pb2.py +31 -0
  184. streamlit/proto/Delta_pb2.pyi +74 -0
  185. streamlit/proto/DocString_pb2.py +29 -0
  186. streamlit/proto/DocString_pb2.pyi +93 -0
  187. streamlit/proto/DownloadButton_pb2.py +27 -0
  188. streamlit/proto/DownloadButton_pb2.pyi +70 -0
  189. streamlit/proto/Element_pb2.py +78 -0
  190. streamlit/proto/Element_pb2.pyi +312 -0
  191. streamlit/proto/Empty_pb2.py +27 -0
  192. streamlit/proto/Empty_pb2.pyi +36 -0
  193. streamlit/proto/Exception_pb2.py +27 -0
  194. streamlit/proto/Exception_pb2.pyi +72 -0
  195. streamlit/proto/Favicon_pb2.py +27 -0
  196. streamlit/proto/Favicon_pb2.pyi +40 -0
  197. streamlit/proto/FileUploader_pb2.py +28 -0
  198. streamlit/proto/FileUploader_pb2.pyi +78 -0
  199. streamlit/proto/ForwardMsg_pb2.py +53 -0
  200. streamlit/proto/ForwardMsg_pb2.pyi +293 -0
  201. streamlit/proto/GitInfo_pb2.py +29 -0
  202. streamlit/proto/GitInfo_pb2.pyi +83 -0
  203. streamlit/proto/GraphVizChart_pb2.py +27 -0
  204. streamlit/proto/GraphVizChart_pb2.pyi +53 -0
  205. streamlit/proto/Heading_pb2.py +27 -0
  206. streamlit/proto/Heading_pb2.pyi +56 -0
  207. streamlit/proto/Html_pb2.py +27 -0
  208. streamlit/proto/Html_pb2.pyi +42 -0
  209. streamlit/proto/IFrame_pb2.py +27 -0
  210. streamlit/proto/IFrame_pb2.pyi +59 -0
  211. streamlit/proto/Image_pb2.py +29 -0
  212. streamlit/proto/Image_pb2.pyi +84 -0
  213. streamlit/proto/Json_pb2.py +27 -0
  214. streamlit/proto/Json_pb2.pyi +53 -0
  215. streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
  216. streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
  217. streamlit/proto/LinkButton_pb2.py +27 -0
  218. streamlit/proto/LinkButton_pb2.pyi +58 -0
  219. streamlit/proto/Logo_pb2.py +27 -0
  220. streamlit/proto/Logo_pb2.pyi +51 -0
  221. streamlit/proto/Markdown_pb2.py +29 -0
  222. streamlit/proto/Markdown_pb2.pyi +86 -0
  223. streamlit/proto/Metric_pb2.py +32 -0
  224. streamlit/proto/Metric_pb2.pyi +101 -0
  225. streamlit/proto/MetricsEvent_pb2.py +30 -0
  226. streamlit/proto/MetricsEvent_pb2.pyi +200 -0
  227. streamlit/proto/MultiSelect_pb2.py +28 -0
  228. streamlit/proto/MultiSelect_pb2.pyi +81 -0
  229. streamlit/proto/NamedDataSet_pb2.py +28 -0
  230. streamlit/proto/NamedDataSet_pb2.pyi +59 -0
  231. streamlit/proto/Navigation_pb2.py +30 -0
  232. streamlit/proto/Navigation_pb2.pyi +84 -0
  233. streamlit/proto/NewSession_pb2.py +51 -0
  234. streamlit/proto/NewSession_pb2.pyi +481 -0
  235. streamlit/proto/NumberInput_pb2.py +30 -0
  236. streamlit/proto/NumberInput_pb2.pyi +121 -0
  237. streamlit/proto/PageConfig_pb2.py +33 -0
  238. streamlit/proto/PageConfig_pb2.pyi +126 -0
  239. streamlit/proto/PageInfo_pb2.py +27 -0
  240. streamlit/proto/PageInfo_pb2.pyi +43 -0
  241. streamlit/proto/PageLink_pb2.py +27 -0
  242. streamlit/proto/PageLink_pb2.pyi +63 -0
  243. streamlit/proto/PageNotFound_pb2.py +27 -0
  244. streamlit/proto/PageNotFound_pb2.pyi +42 -0
  245. streamlit/proto/PageProfile_pb2.py +31 -0
  246. streamlit/proto/PageProfile_pb2.pyi +127 -0
  247. streamlit/proto/PagesChanged_pb2.py +28 -0
  248. streamlit/proto/PagesChanged_pb2.pyi +48 -0
  249. streamlit/proto/ParentMessage_pb2.py +27 -0
  250. streamlit/proto/ParentMessage_pb2.pyi +46 -0
  251. streamlit/proto/PlotlyChart_pb2.py +31 -0
  252. streamlit/proto/PlotlyChart_pb2.pyi +131 -0
  253. streamlit/proto/Progress_pb2.py +27 -0
  254. streamlit/proto/Progress_pb2.pyi +43 -0
  255. streamlit/proto/Radio_pb2.py +28 -0
  256. streamlit/proto/Radio_pb2.pyi +84 -0
  257. streamlit/proto/RootContainer_pb2.py +27 -0
  258. streamlit/proto/RootContainer_pb2.pyi +56 -0
  259. streamlit/proto/Selectbox_pb2.py +28 -0
  260. streamlit/proto/Selectbox_pb2.pyi +80 -0
  261. streamlit/proto/SessionEvent_pb2.py +28 -0
  262. streamlit/proto/SessionEvent_pb2.pyi +62 -0
  263. streamlit/proto/SessionStatus_pb2.py +27 -0
  264. streamlit/proto/SessionStatus_pb2.pyi +57 -0
  265. streamlit/proto/Skeleton_pb2.py +29 -0
  266. streamlit/proto/Skeleton_pb2.pyi +71 -0
  267. streamlit/proto/Slider_pb2.py +32 -0
  268. streamlit/proto/Slider_pb2.pyi +142 -0
  269. streamlit/proto/Snow_pb2.py +27 -0
  270. streamlit/proto/Snow_pb2.pyi +43 -0
  271. streamlit/proto/Spinner_pb2.py +27 -0
  272. streamlit/proto/Spinner_pb2.pyi +49 -0
  273. streamlit/proto/TextArea_pb2.py +28 -0
  274. streamlit/proto/TextArea_pb2.pyi +80 -0
  275. streamlit/proto/TextInput_pb2.py +30 -0
  276. streamlit/proto/TextInput_pb2.pyi +107 -0
  277. streamlit/proto/Text_pb2.py +27 -0
  278. streamlit/proto/Text_pb2.pyi +46 -0
  279. streamlit/proto/TimeInput_pb2.py +28 -0
  280. streamlit/proto/TimeInput_pb2.pyi +74 -0
  281. streamlit/proto/Toast_pb2.py +27 -0
  282. streamlit/proto/Toast_pb2.pyi +45 -0
  283. streamlit/proto/VegaLiteChart_pb2.py +29 -0
  284. streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
  285. streamlit/proto/Video_pb2.py +31 -0
  286. streamlit/proto/Video_pb2.pyi +117 -0
  287. streamlit/proto/WidgetStates_pb2.py +31 -0
  288. streamlit/proto/WidgetStates_pb2.pyi +126 -0
  289. streamlit/proto/__init__.py +15 -0
  290. streamlit/proto/openmetrics_data_model_pb2.py +60 -0
  291. streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
  292. streamlit/py.typed +0 -0
  293. streamlit/runtime/__init__.py +50 -0
  294. streamlit/runtime/app_session.py +982 -0
  295. streamlit/runtime/caching/__init__.py +98 -0
  296. streamlit/runtime/caching/cache_data_api.py +665 -0
  297. streamlit/runtime/caching/cache_errors.py +142 -0
  298. streamlit/runtime/caching/cache_resource_api.py +527 -0
  299. streamlit/runtime/caching/cache_type.py +33 -0
  300. streamlit/runtime/caching/cache_utils.py +523 -0
  301. streamlit/runtime/caching/cached_message_replay.py +290 -0
  302. streamlit/runtime/caching/hashing.py +637 -0
  303. streamlit/runtime/caching/legacy_cache_api.py +169 -0
  304. streamlit/runtime/caching/storage/__init__.py +29 -0
  305. streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
  306. streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
  307. streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
  308. streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
  309. streamlit/runtime/connection_factory.py +436 -0
  310. streamlit/runtime/context.py +280 -0
  311. streamlit/runtime/credentials.py +364 -0
  312. streamlit/runtime/forward_msg_cache.py +296 -0
  313. streamlit/runtime/forward_msg_queue.py +240 -0
  314. streamlit/runtime/fragment.py +477 -0
  315. streamlit/runtime/media_file_manager.py +234 -0
  316. streamlit/runtime/media_file_storage.py +143 -0
  317. streamlit/runtime/memory_media_file_storage.py +181 -0
  318. streamlit/runtime/memory_session_storage.py +77 -0
  319. streamlit/runtime/memory_uploaded_file_manager.py +138 -0
  320. streamlit/runtime/metrics_util.py +486 -0
  321. streamlit/runtime/pages_manager.py +165 -0
  322. streamlit/runtime/runtime.py +792 -0
  323. streamlit/runtime/runtime_util.py +106 -0
  324. streamlit/runtime/script_data.py +46 -0
  325. streamlit/runtime/scriptrunner/__init__.py +38 -0
  326. streamlit/runtime/scriptrunner/exec_code.py +159 -0
  327. streamlit/runtime/scriptrunner/magic.py +273 -0
  328. streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
  329. streamlit/runtime/scriptrunner/script_cache.py +89 -0
  330. streamlit/runtime/scriptrunner/script_runner.py +756 -0
  331. streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
  332. streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
  333. streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
  334. streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
  335. streamlit/runtime/secrets.py +534 -0
  336. streamlit/runtime/session_manager.py +394 -0
  337. streamlit/runtime/state/__init__.py +41 -0
  338. streamlit/runtime/state/common.py +191 -0
  339. streamlit/runtime/state/query_params.py +205 -0
  340. streamlit/runtime/state/query_params_proxy.py +218 -0
  341. streamlit/runtime/state/safe_session_state.py +138 -0
  342. streamlit/runtime/state/session_state.py +772 -0
  343. streamlit/runtime/state/session_state_proxy.py +153 -0
  344. streamlit/runtime/state/widgets.py +135 -0
  345. streamlit/runtime/stats.py +109 -0
  346. streamlit/runtime/uploaded_file_manager.py +148 -0
  347. streamlit/runtime/websocket_session_manager.py +167 -0
  348. streamlit/source_util.py +98 -0
  349. streamlit/static/favicon.png +0 -0
  350. streamlit/static/index.html +61 -0
  351. streamlit/static/static/css/index.Bmkmz40k.css +1 -0
  352. streamlit/static/static/css/index.DpJG_94W.css +1 -0
  353. streamlit/static/static/css/index.DzuxGC_t.css +1 -0
  354. streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
  355. streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
  356. streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
  357. streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
  358. streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
  359. streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
  360. streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
  361. streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
  362. streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
  363. streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
  364. streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
  365. streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
  366. streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
  367. streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
  368. streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
  369. streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
  370. streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
  371. streamlit/static/static/js/index.08vcOOvb.js +1 -0
  372. streamlit/static/static/js/index.0uqKfJUS.js +1 -0
  373. streamlit/static/static/js/index.B02M5u69.js +203 -0
  374. streamlit/static/static/js/index.B7mcZKMx.js +1 -0
  375. streamlit/static/static/js/index.BAQDHFA_.js +1 -0
  376. streamlit/static/static/js/index.BI60cMVr.js +2 -0
  377. streamlit/static/static/js/index.BLug2inK.js +1 -0
  378. streamlit/static/static/js/index.BM6TMY8g.js +2 -0
  379. streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
  380. streamlit/static/static/js/index.BZqa87a1.js +2 -0
  381. streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
  382. streamlit/static/static/js/index.BgVMiY_P.js +197 -0
  383. streamlit/static/static/js/index.BtuGy7By.js +6 -0
  384. streamlit/static/static/js/index.BuDuBmrs.js +1 -0
  385. streamlit/static/static/js/index.BvXU2oKV.js +1 -0
  386. streamlit/static/static/js/index.BxcwPacT.js +73 -0
  387. streamlit/static/static/js/index.CWX8KB81.js +1 -0
  388. streamlit/static/static/js/index.CXzZTo_q.js +1 -0
  389. streamlit/static/static/js/index.CcRWp_KL.js +1 -0
  390. streamlit/static/static/js/index.Cd-_xe55.js +3 -0
  391. streamlit/static/static/js/index.CdG2PXln.js +4537 -0
  392. streamlit/static/static/js/index.CjXvXmcP.js +1 -0
  393. streamlit/static/static/js/index.D1HZENZx.js +776 -0
  394. streamlit/static/static/js/index.D21Efo64.js +1617 -0
  395. streamlit/static/static/js/index.D9WgGVBx.js +7 -0
  396. streamlit/static/static/js/index.DEcsHtvb.js +12 -0
  397. streamlit/static/static/js/index.DFeMfr_K.js +1 -0
  398. streamlit/static/static/js/index.DHFBoItz.js +1 -0
  399. streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
  400. streamlit/static/static/js/index.DmuRkekN.js +3855 -0
  401. streamlit/static/static/js/index.Do6eY8sf.js +1 -0
  402. streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
  403. streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
  404. streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
  405. streamlit/static/static/js/index.H1U1IC_d.js +3 -0
  406. streamlit/static/static/js/index.g6p_4DPr.js +1 -0
  407. streamlit/static/static/js/index.g9x_GKss.js +1 -0
  408. streamlit/static/static/js/index.zo9jm08y.js +1 -0
  409. streamlit/static/static/js/input.DnaFglHq.js +2 -0
  410. streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
  411. streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
  412. streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
  413. streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
  414. streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
  415. streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
  416. streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
  417. streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
  418. streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
  419. streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
  420. streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
  421. streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
  422. streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
  423. streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
  424. streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
  425. streamlit/static/static/js/value.CgPGBV_l.js +1 -0
  426. streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
  427. streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
  428. streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
  429. streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
  430. streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
  431. streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
  432. streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
  433. streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
  434. streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
  435. streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
  436. streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
  437. streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
  438. streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
  439. streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
  440. streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
  441. streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
  442. streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
  443. streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
  444. streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
  445. streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
  446. streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
  447. streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
  448. streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
  449. streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
  450. streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
  451. streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
  452. streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
  453. streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
  454. streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
  455. streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
  456. streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
  457. streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
  458. streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
  459. streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
  460. streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
  461. streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
  462. streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
  463. streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
  464. streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
  465. streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
  466. streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
  467. streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
  468. streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
  469. streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
  470. streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
  471. streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
  472. streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
  473. streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
  474. streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
  475. streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
  476. streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
  477. streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
  478. streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
  479. streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
  480. streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
  481. streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
  482. streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
  483. streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
  484. streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
  485. streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
  486. streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
  487. streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
  488. streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
  489. streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
  490. streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
  491. streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
  492. streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
  493. streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
  494. streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
  495. streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
  496. streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
  497. streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
  498. streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
  499. streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
  500. streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
  501. streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
  502. streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
  503. streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
  504. streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
  505. streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
  506. streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
  507. streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
  508. streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
  509. streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
  510. streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
  511. streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
  512. streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
  513. streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
  514. streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
  515. streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
  516. streamlit/string_util.py +203 -0
  517. streamlit/temporary_directory.py +56 -0
  518. streamlit/testing/__init__.py +13 -0
  519. streamlit/testing/v1/__init__.py +17 -0
  520. streamlit/testing/v1/app_test.py +1050 -0
  521. streamlit/testing/v1/element_tree.py +2083 -0
  522. streamlit/testing/v1/local_script_runner.py +180 -0
  523. streamlit/testing/v1/util.py +53 -0
  524. streamlit/time_util.py +75 -0
  525. streamlit/type_util.py +460 -0
  526. streamlit/url_util.py +122 -0
  527. streamlit/user_info.py +519 -0
  528. streamlit/util.py +72 -0
  529. streamlit/vendor/__init__.py +0 -0
  530. streamlit/vendor/pympler/__init__.py +0 -0
  531. streamlit/vendor/pympler/asizeof.py +2869 -0
  532. streamlit/version.py +18 -0
  533. streamlit/watcher/__init__.py +28 -0
  534. streamlit/watcher/event_based_path_watcher.py +406 -0
  535. streamlit/watcher/folder_black_list.py +82 -0
  536. streamlit/watcher/local_sources_watcher.py +233 -0
  537. streamlit/watcher/path_watcher.py +185 -0
  538. streamlit/watcher/polling_path_watcher.py +124 -0
  539. streamlit/watcher/util.py +207 -0
  540. streamlit/web/__init__.py +13 -0
  541. streamlit/web/bootstrap.py +353 -0
  542. streamlit/web/cache_storage_manager_config.py +38 -0
  543. streamlit/web/cli.py +369 -0
  544. streamlit/web/server/__init__.py +26 -0
  545. streamlit/web/server/app_static_file_handler.py +93 -0
  546. streamlit/web/server/authlib_tornado_integration.py +60 -0
  547. streamlit/web/server/browser_websocket_handler.py +246 -0
  548. streamlit/web/server/component_request_handler.py +116 -0
  549. streamlit/web/server/media_file_handler.py +141 -0
  550. streamlit/web/server/oauth_authlib_routes.py +176 -0
  551. streamlit/web/server/oidc_mixin.py +108 -0
  552. streamlit/web/server/routes.py +295 -0
  553. streamlit/web/server/server.py +479 -0
  554. streamlit/web/server/server_util.py +161 -0
  555. streamlit/web/server/stats_request_handler.py +95 -0
  556. streamlit/web/server/upload_file_request_handler.py +137 -0
  557. streamlit/web/server/websocket_headers.py +56 -0
  558. streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
  559. streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
  560. streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
  561. streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
  562. streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
  563. streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
@@ -0,0 +1,558 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Allows us to create and absorb changes (aka Deltas) to elements."""
16
+
17
+ from __future__ import annotations
18
+
19
+ import ast
20
+ import contextlib
21
+ import inspect
22
+ import re
23
+ import types
24
+ from typing import TYPE_CHECKING, Any, Final, cast
25
+
26
+ import streamlit
27
+ from streamlit.proto.DocString_pb2 import DocString as DocStringProto
28
+ from streamlit.proto.DocString_pb2 import Member as MemberProto
29
+ from streamlit.runtime.metrics_util import gather_metrics
30
+ from streamlit.runtime.scriptrunner.script_runner import (
31
+ __file__ as SCRIPTRUNNER_FILENAME,
32
+ )
33
+ from streamlit.runtime.secrets import Secrets
34
+ from streamlit.string_util import is_mem_address_str
35
+
36
+ if TYPE_CHECKING:
37
+ from streamlit.delta_generator import DeltaGenerator
38
+
39
+
40
+ CONFUSING_STREAMLIT_SIG_PREFIXES: Final = ("(element, ",)
41
+
42
+
43
+ class HelpMixin:
44
+ @gather_metrics("help")
45
+ def help(self, obj: Any = streamlit) -> DeltaGenerator:
46
+ """Display help and other information for a given object.
47
+
48
+ Depending on the type of object that is passed in, this displays the
49
+ object's name, type, value, signature, docstring, and member variables,
50
+ methods — as well as the values/docstring of members and methods.
51
+
52
+ Parameters
53
+ ----------
54
+ obj : any
55
+ The object whose information should be displayed. If left
56
+ unspecified, this call will display help for Streamlit itself.
57
+
58
+ Example
59
+ -------
60
+
61
+ Don't remember how to initialize a dataframe? Try this:
62
+
63
+ >>> import streamlit as st
64
+ >>> import pandas
65
+ >>>
66
+ >>> st.help(pandas.DataFrame)
67
+
68
+ .. output::
69
+ https://doc-string.streamlit.app/
70
+ height: 700px
71
+
72
+ Want to quickly check what data type is output by a certain function?
73
+ Try:
74
+
75
+ >>> import streamlit as st
76
+ >>>
77
+ >>> x = my_poorly_documented_function()
78
+ >>> st.help(x)
79
+
80
+ Want to quickly inspect an object? No sweat:
81
+
82
+ >>> class Dog:
83
+ >>> '''A typical dog.'''
84
+ >>>
85
+ >>> def __init__(self, breed, color):
86
+ >>> self.breed = breed
87
+ >>> self.color = color
88
+ >>>
89
+ >>> def bark(self):
90
+ >>> return 'Woof!'
91
+ >>>
92
+ >>>
93
+ >>> fido = Dog("poodle", "white")
94
+ >>>
95
+ >>> st.help(fido)
96
+
97
+ .. output::
98
+ https://doc-string1.streamlit.app/
99
+ height: 300px
100
+
101
+ And if you're using Magic, you can get help for functions, classes,
102
+ and modules without even typing ``st.help``:
103
+
104
+ >>> import streamlit as st
105
+ >>> import pandas
106
+ >>>
107
+ >>> # Get help for Pandas read_csv:
108
+ >>> pandas.read_csv
109
+ >>>
110
+ >>> # Get help for Streamlit itself:
111
+ >>> st
112
+
113
+ .. output::
114
+ https://doc-string2.streamlit.app/
115
+ height: 700px
116
+ """
117
+ doc_string_proto = DocStringProto()
118
+ _marshall(doc_string_proto, obj)
119
+ return self.dg._enqueue("doc_string", doc_string_proto)
120
+
121
+ @property
122
+ def dg(self) -> DeltaGenerator:
123
+ """Get our DeltaGenerator."""
124
+ return cast("DeltaGenerator", self)
125
+
126
+
127
+ def _marshall(doc_string_proto: DocStringProto, obj: Any) -> None:
128
+ """Construct a DocString object.
129
+
130
+ See DeltaGenerator.help for docs.
131
+ """
132
+ var_name = _get_variable_name()
133
+ if var_name is not None:
134
+ doc_string_proto.name = var_name
135
+
136
+ obj_type = _get_type_as_str(obj)
137
+ doc_string_proto.type = obj_type
138
+
139
+ obj_docs = _get_docstring(obj)
140
+ if obj_docs is not None:
141
+ doc_string_proto.doc_string = obj_docs
142
+
143
+ obj_value = _get_value(obj, var_name)
144
+ if obj_value is not None:
145
+ doc_string_proto.value = obj_value
146
+
147
+ doc_string_proto.members.extend(_get_members(obj))
148
+
149
+
150
+ def _get_name(obj):
151
+ # Try to get the fully-qualified name of the object.
152
+ # For example:
153
+ # st.help(bar.Baz(123))
154
+ #
155
+ # The name is bar.Baz
156
+ name = getattr(obj, "__qualname__", None)
157
+ if name:
158
+ return name
159
+
160
+ # Try to get the name of the object.
161
+ # For example:
162
+ # st.help(bar.Baz(123))
163
+ #
164
+ # The name is Baz
165
+ return getattr(obj, "__name__", None)
166
+
167
+
168
+ def _get_module(obj):
169
+ return getattr(obj, "__module__", None)
170
+
171
+
172
+ def _get_signature(obj):
173
+ if not inspect.isclass(obj) and not callable(obj):
174
+ return None
175
+
176
+ sig = ""
177
+
178
+ # TODO: Can we replace below with this?
179
+ # with contextlib.suppress(ValueError):
180
+ # sig = str(inspect.signature(obj))
181
+
182
+ try:
183
+ sig = str(inspect.signature(obj))
184
+ except ValueError:
185
+ sig = "(...)"
186
+ except TypeError:
187
+ return None
188
+
189
+ is_delta_gen = False
190
+ with contextlib.suppress(AttributeError):
191
+ is_delta_gen = obj.__module__ == "streamlit.delta_generator"
192
+ # Functions such as numpy.minimum don't have a __module__ attribute,
193
+ # since we're only using it to check if its a DeltaGenerator, its ok
194
+ # to continue
195
+
196
+ if is_delta_gen:
197
+ for prefix in CONFUSING_STREAMLIT_SIG_PREFIXES:
198
+ if sig.startswith(prefix):
199
+ sig = sig.replace(prefix, "(")
200
+ break
201
+
202
+ return sig
203
+
204
+
205
+ def _get_docstring(obj):
206
+ doc_string = inspect.getdoc(obj)
207
+
208
+ # Sometimes an object has no docstring, but the object's type does.
209
+ # If that's the case here, use the type's docstring.
210
+ # For objects where type is "type" we do not print the docs (e.g. int).
211
+ # We also do not print the docs for functions and methods if the docstring is empty.
212
+ if doc_string is None:
213
+ obj_type = type(obj)
214
+
215
+ if (
216
+ obj_type is not type
217
+ and obj_type is not types.ModuleType
218
+ and not inspect.isfunction(obj)
219
+ and not inspect.ismethod(obj)
220
+ ):
221
+ doc_string = inspect.getdoc(obj_type)
222
+
223
+ if doc_string:
224
+ return doc_string.strip()
225
+
226
+ return None
227
+
228
+
229
+ def _get_variable_name():
230
+ """Try to get the name of the variable in the current line, as set by the user.
231
+
232
+ For example:
233
+ foo = bar.Baz(123)
234
+ st.help(foo)
235
+
236
+ The name is "foo"
237
+ """
238
+ code = _get_current_line_of_code_as_str()
239
+
240
+ if code is None:
241
+ return None
242
+
243
+ return _get_variable_name_from_code_str(code)
244
+
245
+
246
+ def _get_variable_name_from_code_str(code):
247
+ tree = ast.parse(code)
248
+
249
+ # Example:
250
+ #
251
+ # tree = Module(
252
+ # body=[
253
+ # Expr(
254
+ # value=Call(
255
+ # args=[
256
+ # Name(id='the variable name')
257
+ # ],
258
+ # keywords=[
259
+ # ???
260
+ # ],
261
+ # )
262
+ # )
263
+ # ]
264
+ # )
265
+
266
+ # Check if this is an magic call (i.e. it's not st.help or st.write).
267
+ # If that's the case, just clean it up and return it.
268
+ if not _is_stcommand(tree, command_name="help") and not _is_stcommand(
269
+ tree, command_name="write"
270
+ ):
271
+ # A common pattern is to add "," at the end of a magic command to make it print.
272
+ # This removes that final ",", so it looks nicer.
273
+ code = code.removesuffix(",")
274
+
275
+ return code
276
+
277
+ arg_node = _get_stcommand_arg(tree)
278
+
279
+ # If st.help() is called without an argument, return no variable name.
280
+ if not arg_node:
281
+ return None
282
+
283
+ # If walrus, get name.
284
+ # E.g. st.help(foo := 123) should give you "foo".
285
+ elif type(arg_node) is ast.NamedExpr:
286
+ # This next "if" will always be true, but need to add this for the type-checking test to
287
+ # pass.
288
+ if type(arg_node.target) is ast.Name:
289
+ return arg_node.target.id
290
+
291
+ # If constant, there's no variable name.
292
+ # E.g. st.help("foo") or st.help(123) should give you None.
293
+ elif type(arg_node) is ast.Constant:
294
+ return None
295
+
296
+ # Otherwise, return whatever is inside st.help(<-- here -->)
297
+
298
+ # But, if multiline, only return the first line.
299
+ code_lines = code.split("\n")
300
+ is_multiline = len(code_lines) > 1
301
+
302
+ start_offset = arg_node.col_offset
303
+
304
+ if is_multiline:
305
+ first_lineno = arg_node.lineno - 1 # Lines are 1-indexed!
306
+ first_line = code_lines[first_lineno]
307
+ end_offset = None
308
+
309
+ else:
310
+ first_line = code_lines[0]
311
+ end_offset = getattr(arg_node, "end_col_offset", -1)
312
+
313
+ return first_line[start_offset:end_offset]
314
+
315
+
316
+ _NEWLINES = re.compile(r"[\n\r]+")
317
+
318
+
319
+ def _get_current_line_of_code_as_str():
320
+ scriptrunner_frame = _get_scriptrunner_frame()
321
+
322
+ if scriptrunner_frame is None:
323
+ # If there's no ScriptRunner frame, something weird is going on. This
324
+ # can happen when the script is executed with `python myscript.py`.
325
+ # Either way, let's bail out nicely just in case there's some valid
326
+ # edge case where this is OK.
327
+ return None
328
+
329
+ code_context = scriptrunner_frame.code_context
330
+
331
+ if not code_context:
332
+ # Sometimes a frame has no code_context. This can happen inside certain exec() calls, for
333
+ # example. If this happens, we can't determine the variable name. Just return.
334
+ # For the background on why exec() doesn't produce code_context, see
335
+ # https://stackoverflow.com/a/12072941
336
+ return None
337
+
338
+ code_as_string = "".join(code_context)
339
+ return re.sub(_NEWLINES, "", code_as_string.strip())
340
+
341
+
342
+ def _get_scriptrunner_frame():
343
+ prev_frame = None
344
+ scriptrunner_frame = None
345
+
346
+ # Look back in call stack to get the variable name passed into st.help().
347
+ # The frame *before* the ScriptRunner frame is the correct one.
348
+ # IMPORTANT: This will change if we refactor the code. But hopefully our tests will catch the
349
+ # issue and we'll fix it before it lands upstream!
350
+ for frame in inspect.stack():
351
+ # Check if this is running inside a funny "exec()" block that won't provide the info we
352
+ # need. If so, just quit.
353
+ if frame.code_context is None:
354
+ return None
355
+
356
+ if frame.filename == SCRIPTRUNNER_FILENAME:
357
+ scriptrunner_frame = prev_frame
358
+ break
359
+
360
+ prev_frame = frame
361
+
362
+ return scriptrunner_frame
363
+
364
+
365
+ def _is_stcommand(tree, command_name):
366
+ """Checks whether the AST in tree is a call for command_name."""
367
+ root_node = tree.body[0].value
368
+
369
+ if not isinstance(root_node, ast.Call):
370
+ return False
371
+
372
+ return (
373
+ # st call called without module. E.g. "help()"
374
+ getattr(root_node.func, "id", None) == command_name
375
+ or
376
+ # st call called with module. E.g. "foo.help()" (where usually "foo" is "st")
377
+ getattr(root_node.func, "attr", None) == command_name
378
+ )
379
+
380
+
381
+ def _get_stcommand_arg(tree):
382
+ """Gets the argument node for the st command in tree (AST)."""
383
+
384
+ root_node = tree.body[0].value
385
+
386
+ if root_node.args:
387
+ return root_node.args[0]
388
+
389
+ return None
390
+
391
+
392
+ def _get_type_as_str(obj):
393
+ if inspect.isclass(obj):
394
+ return "class"
395
+
396
+ return str(type(obj).__name__)
397
+
398
+
399
+ def _get_first_line(text):
400
+ if not text:
401
+ return ""
402
+
403
+ left, _, _ = text.partition("\n")
404
+ return left
405
+
406
+
407
+ def _get_weight(value):
408
+ if inspect.ismodule(value):
409
+ return 3
410
+ if inspect.isclass(value):
411
+ return 2
412
+ if callable(value):
413
+ return 1
414
+ return 0
415
+
416
+
417
+ def _get_value(obj, var_name):
418
+ obj_value = _get_human_readable_value(obj)
419
+
420
+ if obj_value is not None:
421
+ return obj_value
422
+
423
+ # If there's no human-readable value, it's some complex object.
424
+ # So let's provide other info about it.
425
+ name = _get_name(obj)
426
+
427
+ if name:
428
+ name_obj = obj
429
+ else:
430
+ # If the object itself doesn't have a name, then it's probably an instance
431
+ # of some class Foo. So let's show info about Foo in the value slot.
432
+ name_obj = type(obj)
433
+ name = _get_name(name_obj)
434
+
435
+ module = _get_module(name_obj)
436
+ sig = _get_signature(name_obj) or ""
437
+
438
+ if name:
439
+ if module:
440
+ obj_value = f"{module}.{name}{sig}"
441
+ else:
442
+ obj_value = f"{name}{sig}"
443
+
444
+ if obj_value == var_name:
445
+ # No need to repeat the same info.
446
+ # For example: st.help(re) shouldn't show "re module re", just "re module".
447
+ obj_value = None
448
+
449
+ return obj_value
450
+
451
+
452
+ def _get_human_readable_value(value):
453
+ if isinstance(value, Secrets):
454
+ # Don't want to read secrets.toml because that will show a warning if there's no
455
+ # secrets.toml file.
456
+ return None
457
+
458
+ if inspect.isclass(value) or inspect.ismodule(value) or callable(value):
459
+ return None
460
+
461
+ value_str = repr(value)
462
+
463
+ if isinstance(value, str):
464
+ # Special-case strings as human-readable because they're allowed to look like
465
+ # "<foo blarg at 0x15ee6f9a0>".
466
+ return _shorten(value_str)
467
+
468
+ if is_mem_address_str(value_str):
469
+ # If value_str looks like "<foo blarg at 0x15ee6f9a0>" it's not human readable.
470
+ return None
471
+
472
+ return _shorten(value_str)
473
+
474
+
475
+ def _shorten(s, length=300):
476
+ s = s.strip()
477
+ return s[:length] + "..." if len(s) > length else s
478
+
479
+
480
+ def _is_computed_property(obj, attr_name):
481
+ obj_class = getattr(obj, "__class__", None)
482
+
483
+ if not obj_class:
484
+ return False
485
+
486
+ # Go through superclasses in order of inheritance (mro) to see if any of them have an
487
+ # attribute called attr_name. If so, check if it's a @property.
488
+ for parent_class in inspect.getmro(obj_class):
489
+ class_attr = getattr(parent_class, attr_name, None)
490
+
491
+ if class_attr is None:
492
+ continue
493
+
494
+ # If is property, return it.
495
+ if isinstance(class_attr, property) or inspect.isgetsetdescriptor(class_attr):
496
+ return True
497
+
498
+ return False
499
+
500
+
501
+ def _get_members(obj):
502
+ members_for_sorting = []
503
+
504
+ for attr_name in dir(obj):
505
+ if attr_name.startswith("_"):
506
+ continue
507
+
508
+ try:
509
+ is_computed_value = _is_computed_property(obj, attr_name)
510
+ if is_computed_value:
511
+ parent_attr = getattr(obj.__class__, attr_name)
512
+
513
+ member_type = "property"
514
+
515
+ weight = 0
516
+ member_docs = _get_docstring(parent_attr)
517
+ member_value = None
518
+ else:
519
+ attr_value = getattr(obj, attr_name)
520
+ weight = _get_weight(attr_value)
521
+
522
+ human_readable_value = _get_human_readable_value(attr_value)
523
+
524
+ member_type = _get_type_as_str(attr_value)
525
+
526
+ if human_readable_value is None:
527
+ member_docs = _get_docstring(attr_value)
528
+ member_value = None
529
+ else:
530
+ member_docs = None
531
+ member_value = human_readable_value
532
+ except AttributeError:
533
+ # If there's an AttributeError, we can just skip it.
534
+ # This can happen when members are exposed with `dir()`
535
+ # but are conditionally unavailable.
536
+ continue
537
+
538
+ if member_type == "module":
539
+ # Don't pollute the output with all imported modules.
540
+ continue
541
+
542
+ member = MemberProto()
543
+ member.name = attr_name
544
+ member.type = member_type
545
+
546
+ if member_docs is not None:
547
+ member.doc_string = _get_first_line(member_docs)
548
+
549
+ if member_value is not None:
550
+ member.value = member_value
551
+
552
+ members_for_sorting.append((weight, member))
553
+
554
+ if members_for_sorting:
555
+ sorted_members = sorted(members_for_sorting, key=lambda x: (x[0], x[1].name))
556
+ return [m for _, m in sorted_members]
557
+
558
+ return []
@@ -0,0 +1,130 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import TYPE_CHECKING, cast
18
+
19
+ from streamlit.proto.Empty_pb2 import Empty as EmptyProto
20
+ from streamlit.proto.Skeleton_pb2 import Skeleton as SkeletonProto
21
+ from streamlit.runtime.metrics_util import gather_metrics
22
+
23
+ if TYPE_CHECKING:
24
+ from streamlit.delta_generator import DeltaGenerator
25
+
26
+
27
+ class EmptyMixin:
28
+ @gather_metrics("empty")
29
+ def empty(self) -> DeltaGenerator:
30
+ """Insert a single-element container.
31
+
32
+ Inserts a container into your app that can be used to hold a single element.
33
+ This allows you to, for example, remove elements at any point, or replace
34
+ several elements at once (using a child multi-element container).
35
+
36
+ To insert/replace/clear an element on the returned container, you can
37
+ use ``with`` notation or just call methods directly on the returned object.
38
+ See examples below.
39
+
40
+ Examples
41
+ --------
42
+ Inside a ``with st.empty():`` block, each displayed element will
43
+ replace the previous one.
44
+
45
+ >>> import streamlit as st
46
+ >>> import time
47
+ >>>
48
+ >>> with st.empty():
49
+ ... for seconds in range(10):
50
+ ... st.write(f"⏳ {seconds} seconds have passed")
51
+ ... time.sleep(1)
52
+ ... st.write(":material/check: 10 seconds over!")
53
+ ... st.button("Rerun")
54
+
55
+ .. output::
56
+ https://doc-empty.streamlit.app/
57
+ height: 220px
58
+
59
+ You can use an ``st.empty`` to replace multiple elements in
60
+ succession. Use ``st.container`` inside ``st.empty`` to display (and
61
+ later replace) a group of elements.
62
+
63
+ >>> import streamlit as st
64
+ >>> import time
65
+ >>>
66
+ >>> st.button("Start over")
67
+ >>>
68
+ >>> placeholder = st.empty()
69
+ >>> placeholder.markdown("Hello")
70
+ >>> time.sleep(1)
71
+ >>>
72
+ >>> placeholder.progress(0, "Wait for it...")
73
+ >>> time.sleep(1)
74
+ >>> placeholder.progress(50, "Wait for it...")
75
+ >>> time.sleep(1)
76
+ >>> placeholder.progress(100, "Wait for it...")
77
+ >>> time.sleep(1)
78
+ >>>
79
+ >>> with placeholder.container():
80
+ ... st.line_chart({"data": [1, 5, 2, 6]})
81
+ ... time.sleep(1)
82
+ ... st.markdown("3...")
83
+ ... time.sleep(1)
84
+ ... st.markdown("2...")
85
+ ... time.sleep(1)
86
+ ... st.markdown("1...")
87
+ ... time.sleep(1)
88
+ >>>
89
+ >>> placeholder.markdown("Poof!")
90
+ >>> time.sleep(1)
91
+ >>>
92
+ >>> placeholder.empty()
93
+
94
+ .. output::
95
+ https://doc-empty-placeholder.streamlit.app/
96
+ height: 600px
97
+
98
+ """
99
+ empty_proto = EmptyProto()
100
+ return self.dg._enqueue("empty", empty_proto)
101
+
102
+ @gather_metrics("_skeleton")
103
+ def _skeleton(self, *, height: int | None = None) -> DeltaGenerator:
104
+ """Insert a single-element container which displays a "skeleton" placeholder.
105
+
106
+ Inserts a container into your app that can be used to hold a single element.
107
+ This allows you to, for example, remove elements at any point, or replace
108
+ several elements at once (using a child multi-element container).
109
+
110
+ To insert/replace/clear an element on the returned container, you can
111
+ use ``with`` notation or just call methods directly on the returned object.
112
+ See some of the examples below.
113
+
114
+ This is an internal method and should not be used directly.
115
+
116
+ Parameters
117
+ ----------
118
+ height: int or None
119
+ Desired height of the skeleton expressed in pixels. If None, a
120
+ default height is used.
121
+ """
122
+ skeleton_proto = SkeletonProto()
123
+ if height:
124
+ skeleton_proto.height = height
125
+ return self.dg._enqueue("skeleton", skeleton_proto)
126
+
127
+ @property
128
+ def dg(self) -> DeltaGenerator:
129
+ """Get our DeltaGenerator."""
130
+ return cast("DeltaGenerator", self)