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