streamlit-data-editor-plus 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. streamlit/__init__.py +292 -0
  2. streamlit/__main__.py +20 -0
  3. streamlit/auth_util.py +583 -0
  4. streamlit/cli_util.py +107 -0
  5. streamlit/column_config.py +60 -0
  6. streamlit/commands/__init__.py +13 -0
  7. streamlit/commands/echo.py +128 -0
  8. streamlit/commands/execution_control.py +318 -0
  9. streamlit/commands/logo.py +250 -0
  10. streamlit/commands/navigation.py +430 -0
  11. streamlit/commands/page_config.py +335 -0
  12. streamlit/components/__init__.py +13 -0
  13. streamlit/components/lib/__init__.py +13 -0
  14. streamlit/components/lib/local_component_registry.py +84 -0
  15. streamlit/components/types/__init__.py +13 -0
  16. streamlit/components/types/base_component_registry.py +99 -0
  17. streamlit/components/types/base_custom_component.py +158 -0
  18. streamlit/components/v1/__init__.py +29 -0
  19. streamlit/components/v1/component_arrow.py +141 -0
  20. streamlit/components/v1/component_registry.py +147 -0
  21. streamlit/components/v1/components.py +38 -0
  22. streamlit/components/v1/custom_component.py +239 -0
  23. streamlit/components/v2/__init__.py +531 -0
  24. streamlit/components/v2/bidi_component/__init__.py +20 -0
  25. streamlit/components/v2/bidi_component/constants.py +29 -0
  26. streamlit/components/v2/bidi_component/main.py +537 -0
  27. streamlit/components/v2/bidi_component/serialization.py +272 -0
  28. streamlit/components/v2/bidi_component/state.py +92 -0
  29. streamlit/components/v2/component_definition_resolver.py +143 -0
  30. streamlit/components/v2/component_file_watcher.py +403 -0
  31. streamlit/components/v2/component_manager.py +439 -0
  32. streamlit/components/v2/component_manifest_handler.py +122 -0
  33. streamlit/components/v2/component_path_utils.py +233 -0
  34. streamlit/components/v2/component_registry.py +426 -0
  35. streamlit/components/v2/get_bidi_component_manager.py +51 -0
  36. streamlit/components/v2/manifest_scanner.py +620 -0
  37. streamlit/components/v2/presentation.py +198 -0
  38. streamlit/components/v2/types.py +317 -0
  39. streamlit/config.py +2977 -0
  40. streamlit/config_option.py +319 -0
  41. streamlit/config_util.py +887 -0
  42. streamlit/connections/__init__.py +32 -0
  43. streamlit/connections/base_connection.py +215 -0
  44. streamlit/connections/snowflake_connection.py +765 -0
  45. streamlit/connections/snowpark_connection.py +213 -0
  46. streamlit/connections/sql_connection.py +427 -0
  47. streamlit/connections/util.py +97 -0
  48. streamlit/cursor.py +314 -0
  49. streamlit/dataframe_util.py +1434 -0
  50. streamlit/delta_generator.py +696 -0
  51. streamlit/delta_generator_singletons.py +243 -0
  52. streamlit/deprecation_util.py +253 -0
  53. streamlit/development.py +21 -0
  54. streamlit/elements/__init__.py +13 -0
  55. streamlit/elements/alert.py +341 -0
  56. streamlit/elements/arrow.py +1065 -0
  57. streamlit/elements/balloons.py +47 -0
  58. streamlit/elements/bokeh_chart.py +75 -0
  59. streamlit/elements/code.py +154 -0
  60. streamlit/elements/deck_gl_json_chart.py +627 -0
  61. streamlit/elements/dialog_decorator.py +320 -0
  62. streamlit/elements/empty.py +130 -0
  63. streamlit/elements/exception.py +370 -0
  64. streamlit/elements/form.py +481 -0
  65. streamlit/elements/graphviz_chart.py +226 -0
  66. streamlit/elements/heading.py +407 -0
  67. streamlit/elements/help.py +565 -0
  68. streamlit/elements/html.py +189 -0
  69. streamlit/elements/iframe.py +245 -0
  70. streamlit/elements/image.py +221 -0
  71. streamlit/elements/json.py +171 -0
  72. streamlit/elements/layouts.py +1534 -0
  73. streamlit/elements/lib/__init__.py +13 -0
  74. streamlit/elements/lib/built_in_chart_utils.py +1316 -0
  75. streamlit/elements/lib/color_util.py +272 -0
  76. streamlit/elements/lib/column_config_utils.py +555 -0
  77. streamlit/elements/lib/column_types.py +2699 -0
  78. streamlit/elements/lib/dialog.py +212 -0
  79. streamlit/elements/lib/dicttools.py +152 -0
  80. streamlit/elements/lib/file_uploader_utils.py +91 -0
  81. streamlit/elements/lib/form_utils.py +77 -0
  82. streamlit/elements/lib/image_utils.py +447 -0
  83. streamlit/elements/lib/js_number.py +105 -0
  84. streamlit/elements/lib/layout_utils.py +325 -0
  85. streamlit/elements/lib/mutable_expander_container.py +73 -0
  86. streamlit/elements/lib/mutable_popover_container.py +73 -0
  87. streamlit/elements/lib/mutable_status_container.py +194 -0
  88. streamlit/elements/lib/mutable_tab_container.py +73 -0
  89. streamlit/elements/lib/options_selector_utils.py +480 -0
  90. streamlit/elements/lib/pandas_styler_utils.py +302 -0
  91. streamlit/elements/lib/policies.py +198 -0
  92. streamlit/elements/lib/shortcut_utils.py +152 -0
  93. streamlit/elements/lib/streamlit_plotly_theme.py +206 -0
  94. streamlit/elements/lib/subtitle_utils.py +175 -0
  95. streamlit/elements/lib/utils.py +274 -0
  96. streamlit/elements/map.py +526 -0
  97. streamlit/elements/markdown.py +529 -0
  98. streamlit/elements/media.py +843 -0
  99. streamlit/elements/metric.py +529 -0
  100. streamlit/elements/pdf.py +190 -0
  101. streamlit/elements/plotly_chart.py +779 -0
  102. streamlit/elements/progress.py +172 -0
  103. streamlit/elements/pyplot.py +240 -0
  104. streamlit/elements/snow.py +47 -0
  105. streamlit/elements/space.py +121 -0
  106. streamlit/elements/spinner.py +152 -0
  107. streamlit/elements/table.py +240 -0
  108. streamlit/elements/text.py +113 -0
  109. streamlit/elements/toast.py +175 -0
  110. streamlit/elements/vega_charts.py +2510 -0
  111. streamlit/elements/widgets/__init__.py +13 -0
  112. streamlit/elements/widgets/audio_input.py +334 -0
  113. streamlit/elements/widgets/button.py +1559 -0
  114. streamlit/elements/widgets/button_group.py +1061 -0
  115. streamlit/elements/widgets/camera_input.py +281 -0
  116. streamlit/elements/widgets/chat.py +1028 -0
  117. streamlit/elements/widgets/checkbox.py +420 -0
  118. streamlit/elements/widgets/color_picker.py +329 -0
  119. streamlit/elements/widgets/data_editor.py +1168 -0
  120. streamlit/elements/widgets/data_editor_plus.py +902 -0
  121. streamlit/elements/widgets/feedback.py +322 -0
  122. streamlit/elements/widgets/file_uploader.py +592 -0
  123. streamlit/elements/widgets/multiselect.py +654 -0
  124. streamlit/elements/widgets/number_input.py +719 -0
  125. streamlit/elements/widgets/radio.py +551 -0
  126. streamlit/elements/widgets/select_slider.py +568 -0
  127. streamlit/elements/widgets/selectbox.py +680 -0
  128. streamlit/elements/widgets/slider.py +1093 -0
  129. streamlit/elements/widgets/text_widgets.py +779 -0
  130. streamlit/elements/widgets/time_widgets.py +1712 -0
  131. streamlit/elements/write.py +585 -0
  132. streamlit/emojis.py +34 -0
  133. streamlit/env_util.py +56 -0
  134. streamlit/error_util.py +112 -0
  135. streamlit/errors.py +680 -0
  136. streamlit/external/__init__.py +13 -0
  137. streamlit/external/langchain/__init__.py +23 -0
  138. streamlit/external/langchain/streamlit_callback_handler.py +410 -0
  139. streamlit/file_util.py +266 -0
  140. streamlit/git_util.py +200 -0
  141. streamlit/hello/__init__.py +13 -0
  142. streamlit/hello/__pycache__/__init__.cpython-312.pyc +0 -0
  143. streamlit/hello/__pycache__/streamlit_app.cpython-312.pyc +0 -0
  144. streamlit/hello/animation_demo.py +82 -0
  145. streamlit/hello/dataframe_demo.py +71 -0
  146. streamlit/hello/hello.py +46 -0
  147. streamlit/hello/mapping_demo.py +113 -0
  148. streamlit/hello/plotting_demo.py +62 -0
  149. streamlit/hello/streamlit_app.py +57 -0
  150. streamlit/hello/utils.py +30 -0
  151. streamlit/logger.py +129 -0
  152. streamlit/material_icon_names.py +25 -0
  153. streamlit/navigation/__init__.py +13 -0
  154. streamlit/navigation/page.py +365 -0
  155. streamlit/net_util.py +125 -0
  156. streamlit/path_security.py +98 -0
  157. streamlit/platform.py +31 -0
  158. streamlit/proto/Alert_pb2.py +28 -0
  159. streamlit/proto/Alert_pb2.pyi +100 -0
  160. streamlit/proto/AppPage_pb2.py +25 -0
  161. streamlit/proto/AppPage_pb2.pyi +75 -0
  162. streamlit/proto/ArrowData_pb2.py +27 -0
  163. streamlit/proto/ArrowData_pb2.pyi +103 -0
  164. streamlit/proto/ArrowNamedDataSet_pb2.py +26 -0
  165. streamlit/proto/ArrowNamedDataSet_pb2.pyi +65 -0
  166. streamlit/proto/AudioInput_pb2.py +26 -0
  167. streamlit/proto/AudioInput_pb2.pyi +72 -0
  168. streamlit/proto/Audio_pb2.py +26 -0
  169. streamlit/proto/Audio_pb2.pyi +75 -0
  170. streamlit/proto/AuthRedirect_pb2.py +25 -0
  171. streamlit/proto/AuthRedirect_pb2.pyi +48 -0
  172. streamlit/proto/AutoRerun_pb2.py +25 -0
  173. streamlit/proto/AutoRerun_pb2.pyi +52 -0
  174. streamlit/proto/BackMsg_pb2.py +29 -0
  175. streamlit/proto/BackMsg_pb2.pyi +132 -0
  176. streamlit/proto/Balloons_pb2.py +25 -0
  177. streamlit/proto/Balloons_pb2.pyi +48 -0
  178. streamlit/proto/BidiComponent_pb2.py +32 -0
  179. streamlit/proto/BidiComponent_pb2.pyi +176 -0
  180. streamlit/proto/Block_pb2.py +62 -0
  181. streamlit/proto/Block_pb2.pyi +518 -0
  182. streamlit/proto/ButtonGroup_pb2.py +32 -0
  183. streamlit/proto/ButtonGroup_pb2.pyi +157 -0
  184. streamlit/proto/ButtonLikeIconPosition_pb2.py +25 -0
  185. streamlit/proto/ButtonLikeIconPosition_pb2.pyi +47 -0
  186. streamlit/proto/Button_pb2.py +26 -0
  187. streamlit/proto/Button_pb2.pyi +82 -0
  188. streamlit/proto/CameraInput_pb2.py +26 -0
  189. streamlit/proto/CameraInput_pb2.pyi +66 -0
  190. streamlit/proto/ChatInput_pb2.py +27 -0
  191. streamlit/proto/ChatInput_pb2.pyi +113 -0
  192. streamlit/proto/Checkbox_pb2.py +28 -0
  193. streamlit/proto/Checkbox_pb2.pyi +99 -0
  194. streamlit/proto/ClientState_pb2.py +28 -0
  195. streamlit/proto/ClientState_pb2.pyi +137 -0
  196. streamlit/proto/Code_pb2.py +25 -0
  197. streamlit/proto/Code_pb2.pyi +59 -0
  198. streamlit/proto/ColorPicker_pb2.py +26 -0
  199. streamlit/proto/ColorPicker_pb2.pyi +82 -0
  200. streamlit/proto/Common_pb2.py +49 -0
  201. streamlit/proto/Common_pb2.pyi +325 -0
  202. streamlit/proto/Components_pb2.py +33 -0
  203. streamlit/proto/Components_pb2.pyi +196 -0
  204. streamlit/proto/Dataframe_pb2.py +30 -0
  205. streamlit/proto/Dataframe_pb2.pyi +172 -0
  206. streamlit/proto/DateInput_pb2.py +26 -0
  207. streamlit/proto/DateInput_pb2.pyi +91 -0
  208. streamlit/proto/DateTimeInput_pb2.py +26 -0
  209. streamlit/proto/DateTimeInput_pb2.pyi +94 -0
  210. streamlit/proto/DeckGlJsonChart_pb2.py +27 -0
  211. streamlit/proto/DeckGlJsonChart_pb2.pyi +91 -0
  212. streamlit/proto/Delta_pb2.py +29 -0
  213. streamlit/proto/Delta_pb2.pyi +82 -0
  214. streamlit/proto/DownloadButton_pb2.py +26 -0
  215. streamlit/proto/DownloadButton_pb2.pyi +92 -0
  216. streamlit/proto/Element_pb2.py +81 -0
  217. streamlit/proto/Element_pb2.pyi +348 -0
  218. streamlit/proto/Empty_pb2.py +25 -0
  219. streamlit/proto/Empty_pb2.pyi +42 -0
  220. streamlit/proto/Exception_pb2.py +26 -0
  221. streamlit/proto/Exception_pb2.pyi +88 -0
  222. streamlit/proto/Favicon_pb2.py +25 -0
  223. streamlit/proto/Favicon_pb2.pyi +47 -0
  224. streamlit/proto/Feedback_pb2.py +27 -0
  225. streamlit/proto/Feedback_pb2.pyi +93 -0
  226. streamlit/proto/FileUploader_pb2.py +26 -0
  227. streamlit/proto/FileUploader_pb2.pyi +90 -0
  228. streamlit/proto/ForwardMsg_pb2.py +48 -0
  229. streamlit/proto/ForwardMsg_pb2.pyi +296 -0
  230. streamlit/proto/GapSize_pb2.py +27 -0
  231. streamlit/proto/GapSize_pb2.pyi +82 -0
  232. streamlit/proto/GitInfo_pb2.py +27 -0
  233. streamlit/proto/GitInfo_pb2.pyi +84 -0
  234. streamlit/proto/GraphVizChart_pb2.py +25 -0
  235. streamlit/proto/GraphVizChart_pb2.pyi +56 -0
  236. streamlit/proto/Heading_pb2.py +25 -0
  237. streamlit/proto/Heading_pb2.pyi +63 -0
  238. streamlit/proto/HeightConfig_pb2.py +25 -0
  239. streamlit/proto/HeightConfig_pb2.pyi +61 -0
  240. streamlit/proto/Help_pb2.py +27 -0
  241. streamlit/proto/Help_pb2.pyi +104 -0
  242. streamlit/proto/Html_pb2.py +25 -0
  243. streamlit/proto/Html_pb2.pyi +52 -0
  244. streamlit/proto/IFrame_pb2.py +25 -0
  245. streamlit/proto/IFrame_pb2.pyi +68 -0
  246. streamlit/proto/Image_pb2.py +27 -0
  247. streamlit/proto/Image_pb2.pyi +73 -0
  248. streamlit/proto/Json_pb2.py +25 -0
  249. streamlit/proto/Json_pb2.pyi +63 -0
  250. streamlit/proto/LabelVisibility_pb2.py +27 -0
  251. streamlit/proto/LabelVisibility_pb2.pyi +69 -0
  252. streamlit/proto/LinkButton_pb2.py +26 -0
  253. streamlit/proto/LinkButton_pb2.pyi +76 -0
  254. streamlit/proto/Logo_pb2.py +27 -0
  255. streamlit/proto/Logo_pb2.pyi +82 -0
  256. streamlit/proto/Markdown_pb2.py +27 -0
  257. streamlit/proto/Markdown_pb2.pyi +83 -0
  258. streamlit/proto/Metric_pb2.py +32 -0
  259. streamlit/proto/Metric_pb2.pyi +145 -0
  260. streamlit/proto/MetricsEvent_pb2.py +28 -0
  261. streamlit/proto/MetricsEvent_pb2.pyi +224 -0
  262. streamlit/proto/MultiSelect_pb2.py +26 -0
  263. streamlit/proto/MultiSelect_pb2.pyi +108 -0
  264. streamlit/proto/Navigation_pb2.py +28 -0
  265. streamlit/proto/Navigation_pb2.pyi +89 -0
  266. streamlit/proto/NewSession_pb2.py +47 -0
  267. streamlit/proto/NewSession_pb2.pyi +753 -0
  268. streamlit/proto/NumberInput_pb2.py +28 -0
  269. streamlit/proto/NumberInput_pb2.pyi +138 -0
  270. streamlit/proto/PageConfig_pb2.py +33 -0
  271. streamlit/proto/PageConfig_pb2.pyi +179 -0
  272. streamlit/proto/PageInfo_pb2.py +25 -0
  273. streamlit/proto/PageInfo_pb2.pyi +50 -0
  274. streamlit/proto/PageLink_pb2.py +26 -0
  275. streamlit/proto/PageLink_pb2.pyi +80 -0
  276. streamlit/proto/PageNotFound_pb2.py +25 -0
  277. streamlit/proto/PageNotFound_pb2.pyi +49 -0
  278. streamlit/proto/PageProfile_pb2.py +29 -0
  279. streamlit/proto/PageProfile_pb2.pyi +146 -0
  280. streamlit/proto/ParentMessage_pb2.py +25 -0
  281. streamlit/proto/ParentMessage_pb2.pyi +53 -0
  282. streamlit/proto/PlotlyChart_pb2.py +27 -0
  283. streamlit/proto/PlotlyChart_pb2.pyi +96 -0
  284. streamlit/proto/Progress_pb2.py +25 -0
  285. streamlit/proto/Progress_pb2.pyi +50 -0
  286. streamlit/proto/Radio_pb2.py +26 -0
  287. streamlit/proto/Radio_pb2.pyi +104 -0
  288. streamlit/proto/RootContainer_pb2.py +25 -0
  289. streamlit/proto/RootContainer_pb2.pyi +56 -0
  290. streamlit/proto/Selectbox_pb2.py +26 -0
  291. streamlit/proto/Selectbox_pb2.pyi +107 -0
  292. streamlit/proto/SessionEvent_pb2.py +26 -0
  293. streamlit/proto/SessionEvent_pb2.pyi +72 -0
  294. streamlit/proto/SessionStatus_pb2.py +25 -0
  295. streamlit/proto/SessionStatus_pb2.pyi +64 -0
  296. streamlit/proto/Skeleton_pb2.py +27 -0
  297. streamlit/proto/Skeleton_pb2.pyi +75 -0
  298. streamlit/proto/Slider_pb2.py +30 -0
  299. streamlit/proto/Slider_pb2.pyi +161 -0
  300. streamlit/proto/Snow_pb2.py +25 -0
  301. streamlit/proto/Snow_pb2.pyi +48 -0
  302. streamlit/proto/Space_pb2.py +25 -0
  303. streamlit/proto/Space_pb2.pyi +48 -0
  304. streamlit/proto/Spinner_pb2.py +25 -0
  305. streamlit/proto/Spinner_pb2.pyi +56 -0
  306. streamlit/proto/Table_pb2.py +28 -0
  307. streamlit/proto/Table_pb2.pyi +83 -0
  308. streamlit/proto/TextAlignmentConfig_pb2.py +27 -0
  309. streamlit/proto/TextAlignmentConfig_pb2.pyi +69 -0
  310. streamlit/proto/TextArea_pb2.py +26 -0
  311. streamlit/proto/TextArea_pb2.pyi +97 -0
  312. streamlit/proto/TextInput_pb2.py +28 -0
  313. streamlit/proto/TextInput_pb2.pyi +124 -0
  314. streamlit/proto/Text_pb2.py +25 -0
  315. streamlit/proto/Text_pb2.pyi +53 -0
  316. streamlit/proto/TimeInput_pb2.py +26 -0
  317. streamlit/proto/TimeInput_pb2.pyi +86 -0
  318. streamlit/proto/Toast_pb2.py +25 -0
  319. streamlit/proto/Toast_pb2.pyi +64 -0
  320. streamlit/proto/Transient_pb2.py +26 -0
  321. streamlit/proto/Transient_pb2.pyi +53 -0
  322. streamlit/proto/VegaLiteChart_pb2.py +27 -0
  323. streamlit/proto/VegaLiteChart_pb2.pyi +92 -0
  324. streamlit/proto/Video_pb2.py +30 -0
  325. streamlit/proto/Video_pb2.pyi +129 -0
  326. streamlit/proto/WidgetStates_pb2.py +31 -0
  327. streamlit/proto/WidgetStates_pb2.pyi +157 -0
  328. streamlit/proto/WidthConfig_pb2.py +25 -0
  329. streamlit/proto/WidthConfig_pb2.pyi +61 -0
  330. streamlit/proto/__init__.py +15 -0
  331. streamlit/proto/openmetrics_data_model_pb2.py +58 -0
  332. streamlit/proto/openmetrics_data_model_pb2.pyi +558 -0
  333. streamlit/py.typed +0 -0
  334. streamlit/runtime/__init__.py +50 -0
  335. streamlit/runtime/app_session.py +1302 -0
  336. streamlit/runtime/caching/__init__.py +118 -0
  337. streamlit/runtime/caching/cache_data_api.py +775 -0
  338. streamlit/runtime/caching/cache_errors.py +143 -0
  339. streamlit/runtime/caching/cache_resource_api.py +756 -0
  340. streamlit/runtime/caching/cache_type.py +33 -0
  341. streamlit/runtime/caching/cache_utils.py +601 -0
  342. streamlit/runtime/caching/cached_message_replay.py +290 -0
  343. streamlit/runtime/caching/hashing.py +655 -0
  344. streamlit/runtime/caching/legacy_cache_api.py +170 -0
  345. streamlit/runtime/caching/storage/__init__.py +29 -0
  346. streamlit/runtime/caching/storage/cache_storage_protocol.py +236 -0
  347. streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
  348. streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +159 -0
  349. streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
  350. streamlit/runtime/caching/ttl_cleanup_cache.py +85 -0
  351. streamlit/runtime/connection_factory.py +498 -0
  352. streamlit/runtime/context.py +449 -0
  353. streamlit/runtime/context_util.py +49 -0
  354. streamlit/runtime/credentials.py +355 -0
  355. streamlit/runtime/download_data_util.py +53 -0
  356. streamlit/runtime/forward_msg_cache.py +101 -0
  357. streamlit/runtime/forward_msg_queue.py +263 -0
  358. streamlit/runtime/fragment.py +441 -0
  359. streamlit/runtime/media_file_manager.py +409 -0
  360. streamlit/runtime/media_file_storage.py +143 -0
  361. streamlit/runtime/memory_media_file_storage.py +201 -0
  362. streamlit/runtime/memory_session_storage.py +77 -0
  363. streamlit/runtime/memory_uploaded_file_manager.py +149 -0
  364. streamlit/runtime/metrics_util.py +612 -0
  365. streamlit/runtime/pages_manager.py +160 -0
  366. streamlit/runtime/runtime.py +775 -0
  367. streamlit/runtime/runtime_util.py +108 -0
  368. streamlit/runtime/script_data.py +46 -0
  369. streamlit/runtime/scriptrunner/__init__.py +38 -0
  370. streamlit/runtime/scriptrunner/exec_code.py +167 -0
  371. streamlit/runtime/scriptrunner/magic.py +277 -0
  372. streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
  373. streamlit/runtime/scriptrunner/script_cache.py +89 -0
  374. streamlit/runtime/scriptrunner/script_runner.py +805 -0
  375. streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
  376. streamlit/runtime/scriptrunner_utils/exceptions.py +44 -0
  377. streamlit/runtime/scriptrunner_utils/script_requests.py +311 -0
  378. streamlit/runtime/scriptrunner_utils/script_run_context.py +277 -0
  379. streamlit/runtime/secrets.py +533 -0
  380. streamlit/runtime/session_manager.py +430 -0
  381. streamlit/runtime/state/__init__.py +47 -0
  382. streamlit/runtime/state/common.py +256 -0
  383. streamlit/runtime/state/presentation.py +85 -0
  384. streamlit/runtime/state/query_params.py +767 -0
  385. streamlit/runtime/state/query_params_proxy.py +222 -0
  386. streamlit/runtime/state/safe_session_state.py +146 -0
  387. streamlit/runtime/state/session_state.py +1299 -0
  388. streamlit/runtime/state/session_state_proxy.py +153 -0
  389. streamlit/runtime/state/widgets.py +197 -0
  390. streamlit/runtime/stats.py +356 -0
  391. streamlit/runtime/theme_util.py +148 -0
  392. streamlit/runtime/uploaded_file_manager.py +152 -0
  393. streamlit/runtime/websocket_session_manager.py +301 -0
  394. streamlit/source_util.py +97 -0
  395. streamlit/starlette.py +34 -0
  396. streamlit/string_util.py +264 -0
  397. streamlit/temporary_directory.py +67 -0
  398. streamlit/testing/__init__.py +13 -0
  399. streamlit/testing/v1/__init__.py +17 -0
  400. streamlit/testing/v1/app_test.py +1089 -0
  401. streamlit/testing/v1/element_tree.py +2272 -0
  402. streamlit/testing/v1/local_script_runner.py +176 -0
  403. streamlit/testing/v1/util.py +61 -0
  404. streamlit/time_util.py +73 -0
  405. streamlit/type_util.py +480 -0
  406. streamlit/url_util.py +120 -0
  407. streamlit/user_info.py +698 -0
  408. streamlit/util.py +108 -0
  409. streamlit/vendor/__init__.py +0 -0
  410. streamlit/vendor/pympler/__init__.py +0 -0
  411. streamlit/vendor/pympler/asizeof.py +2870 -0
  412. streamlit/version.py +18 -0
  413. streamlit/watcher/__init__.py +28 -0
  414. streamlit/watcher/event_based_path_watcher.py +500 -0
  415. streamlit/watcher/folder_black_list.py +82 -0
  416. streamlit/watcher/local_sources_watcher.py +297 -0
  417. streamlit/watcher/path_watcher.py +244 -0
  418. streamlit/watcher/polling_path_watcher.py +138 -0
  419. streamlit/watcher/util.py +223 -0
  420. streamlit/web/__init__.py +13 -0
  421. streamlit/web/bootstrap.py +463 -0
  422. streamlit/web/cache_storage_manager_config.py +38 -0
  423. streamlit/web/cli.py +465 -0
  424. streamlit/web/server/__init__.py +30 -0
  425. streamlit/web/server/app_discovery.py +422 -0
  426. streamlit/web/server/app_static_file_handler.py +102 -0
  427. streamlit/web/server/authlib_tornado_integration.py +125 -0
  428. streamlit/web/server/bidi_component_request_handler.py +193 -0
  429. streamlit/web/server/browser_websocket_handler.py +341 -0
  430. streamlit/web/server/component_file_utils.py +105 -0
  431. streamlit/web/server/component_request_handler.py +107 -0
  432. streamlit/web/server/media_file_handler.py +148 -0
  433. streamlit/web/server/oauth_authlib_routes.py +314 -0
  434. streamlit/web/server/oidc_mixin.py +138 -0
  435. streamlit/web/server/routes.py +257 -0
  436. streamlit/web/server/server.py +555 -0
  437. streamlit/web/server/server_util.py +235 -0
  438. streamlit/web/server/starlette/__init__.py +23 -0
  439. streamlit/web/server/starlette/starlette_app.py +541 -0
  440. streamlit/web/server/starlette/starlette_app_utils.py +306 -0
  441. streamlit/web/server/starlette/starlette_auth_routes.py +584 -0
  442. streamlit/web/server/starlette/starlette_gzip_middleware.py +121 -0
  443. streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
  444. streamlit/web/server/starlette/starlette_routes.py +884 -0
  445. streamlit/web/server/starlette/starlette_server.py +496 -0
  446. streamlit/web/server/starlette/starlette_server_config.py +55 -0
  447. streamlit/web/server/starlette/starlette_static_routes.py +181 -0
  448. streamlit/web/server/starlette/starlette_websocket.py +560 -0
  449. streamlit/web/server/stats_request_handler.py +116 -0
  450. streamlit/web/server/upload_file_request_handler.py +158 -0
  451. streamlit/web/server/websocket_headers.py +56 -0
  452. streamlit_data_editor_plus-0.1.0.dist-info/METADATA +76 -0
  453. streamlit_data_editor_plus-0.1.0.dist-info/RECORD +456 -0
  454. streamlit_data_editor_plus-0.1.0.dist-info/WHEEL +5 -0
  455. streamlit_data_editor_plus-0.1.0.dist-info/entry_points.txt +2 -0
  456. streamlit_data_editor_plus-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,449 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from collections.abc import Iterable, Iterator, Mapping
18
+ from functools import lru_cache
19
+ from types import MappingProxyType
20
+ from typing import TYPE_CHECKING, Any, Literal
21
+
22
+ from streamlit import runtime
23
+ from streamlit.runtime.context_util import maybe_add_page_path, maybe_trim_page_path
24
+ from streamlit.runtime.metrics_util import gather_metrics
25
+ from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
26
+ from streamlit.util import AttributeDictionary
27
+
28
+ if TYPE_CHECKING:
29
+ from http.cookies import Morsel
30
+
31
+ from tornado.httputil import HTTPHeaders
32
+
33
+ from streamlit.runtime.session_manager import ClientContext
34
+
35
+
36
+ def _get_client_context() -> ClientContext | None:
37
+ """Get the ClientContext for the current session.
38
+
39
+ Returns the client context from the session client if available,
40
+ or None if not available (e.g., no active session or the session
41
+ client doesn't provide a client context).
42
+ """
43
+ ctx = get_script_run_ctx()
44
+ if ctx is None:
45
+ return None
46
+
47
+ session_client = runtime.get_instance().get_client(ctx.session_id)
48
+ if session_client is None:
49
+ return None
50
+
51
+ return session_client.client_context
52
+
53
+
54
+ @lru_cache
55
+ def _normalize_header(name: str) -> str:
56
+ """Map a header name to Http-Header-Case.
57
+
58
+ >>> _normalize_header("coNtent-TYPE")
59
+ 'Content-Type'
60
+ """
61
+ return "-".join(w.capitalize() for w in name.split("-"))
62
+
63
+
64
+ class StreamlitTheme(AttributeDictionary):
65
+ """A dictionary-like object containing theme information.
66
+
67
+ This class extends the functionality of a standard dictionary to allow items
68
+ to be accessed via attribute-style dot notation in addition to the traditional
69
+ key-based access. If a dictionary item is accessed and is itself a dictionary,
70
+ it is automatically wrapped in another `AttributeDictionary`, enabling recursive
71
+ attribute-style access.
72
+ """
73
+
74
+ type: Literal["dark", "light"] | None
75
+
76
+ def __init__(self, theme_info: dict[str, str | None]):
77
+ super().__init__(theme_info)
78
+
79
+ @classmethod
80
+ def from_context_info(cls, context_dict: dict[str, str | None]) -> StreamlitTheme:
81
+ return cls(context_dict)
82
+
83
+
84
+ class StreamlitHeaders(Mapping[str, str]):
85
+ def __init__(self, headers: Iterable[tuple[str, str]]) -> None:
86
+ dict_like_headers: dict[str, list[str]] = {}
87
+
88
+ for key, value in headers:
89
+ header_value = dict_like_headers.setdefault(_normalize_header(key), [])
90
+ header_value.append(value)
91
+
92
+ self._headers = dict_like_headers
93
+
94
+ @classmethod
95
+ def from_tornado_headers(cls, tornado_headers: HTTPHeaders) -> StreamlitHeaders:
96
+ return cls(tornado_headers.get_all())
97
+
98
+ def get_all(self, key: str) -> list[str]:
99
+ return list(self._headers.get(_normalize_header(key), []))
100
+
101
+ def __getitem__(self, key: str) -> str:
102
+ try:
103
+ return self._headers[_normalize_header(key)][0]
104
+ except LookupError:
105
+ raise KeyError(key) from None
106
+
107
+ def __len__(self) -> int:
108
+ """Number of unique headers present in request."""
109
+ return len(self._headers)
110
+
111
+ def __iter__(self) -> Iterator[str]:
112
+ return iter(self._headers)
113
+
114
+ def to_dict(self) -> dict[str, str]:
115
+ return {key: self[key] for key in self}
116
+
117
+
118
+ class StreamlitCookies(Mapping[str, str]):
119
+ def __init__(self, cookies: Mapping[str, str]) -> None:
120
+ self._cookies = MappingProxyType(cookies)
121
+
122
+ @classmethod
123
+ def from_tornado_cookies(
124
+ cls, tornado_cookies: dict[str, Morsel[Any]]
125
+ ) -> StreamlitCookies:
126
+ dict_like_cookies = {}
127
+ for key, morsel in tornado_cookies.items():
128
+ dict_like_cookies[key] = morsel.value
129
+ return cls(dict_like_cookies)
130
+
131
+ def __getitem__(self, key: str) -> str:
132
+ return self._cookies[key]
133
+
134
+ def __len__(self) -> int:
135
+ """Number of unique headers present in request."""
136
+ return len(self._cookies)
137
+
138
+ def __iter__(self) -> Iterator[str]:
139
+ return iter(self._cookies)
140
+
141
+ def to_dict(self) -> dict[str, str]:
142
+ return dict(self._cookies)
143
+
144
+
145
+ class ContextProxy:
146
+ """An interface to access user session context.
147
+
148
+ ``st.context`` provides a read-only interface to access headers and cookies
149
+ for the current user session.
150
+
151
+ Each property (``st.context.headers`` and ``st.context.cookies``) returns
152
+ a dictionary of named values.
153
+
154
+ """
155
+
156
+ @property
157
+ @gather_metrics("context.headers")
158
+ def headers(self) -> StreamlitHeaders:
159
+ """A read-only, dict-like object containing headers sent in the initial request.
160
+
161
+ Keys are case-insensitive and may be repeated. When keys are repeated,
162
+ dict-like methods will only return the last instance of each key. Use
163
+ ``.get_all(key="your_repeated_key")`` to see all values if the same
164
+ header is set multiple times.
165
+
166
+ Examples
167
+ --------
168
+ **Example 1: Access all available headers**
169
+
170
+ Show a dictionary of headers (with only the last instance of any
171
+ repeated key):
172
+
173
+ >>> import streamlit as st
174
+ >>>
175
+ >>> st.context.headers
176
+
177
+ **Example 2: Access a specific header**
178
+
179
+ Show the value of a specific header (or the last instance if it's
180
+ repeated):
181
+
182
+ >>> import streamlit as st
183
+ >>>
184
+ >>> st.context.headers["host"]
185
+
186
+ Show of list of all headers for a given key:
187
+
188
+ >>> import streamlit as st
189
+ >>>
190
+ >>> st.context.headers.get_all("pragma")
191
+
192
+ """
193
+ # We have a docstring in line above as one-liner, to have a correct docstring
194
+ # in the st.write(st,context) call.
195
+ client_context = _get_client_context()
196
+
197
+ if client_context is None:
198
+ return StreamlitHeaders({})
199
+
200
+ return StreamlitHeaders(client_context.headers)
201
+
202
+ @property
203
+ @gather_metrics("context.cookies")
204
+ def cookies(self) -> StreamlitCookies:
205
+ """A read-only, dict-like object containing cookies sent in the initial request.
206
+
207
+ Examples
208
+ --------
209
+ **Example 1: Access all available cookies**
210
+
211
+ Show a dictionary of cookies:
212
+
213
+ >>> import streamlit as st
214
+ >>>
215
+ >>> st.context.cookies
216
+
217
+ **Example 2: Access a specific cookie**
218
+
219
+ Show the value of a specific cookie:
220
+
221
+ >>> import streamlit as st
222
+ >>>
223
+ >>> st.context.cookies["_ga"]
224
+
225
+ """
226
+ # We have a docstring in line above as one-liner, to have a correct docstring
227
+ # in the st.write(st,context) call.
228
+ client_context = _get_client_context()
229
+
230
+ if client_context is None:
231
+ return StreamlitCookies({})
232
+
233
+ return StreamlitCookies(client_context.cookies)
234
+
235
+ @property
236
+ @gather_metrics("context.theme")
237
+ def theme(self) -> StreamlitTheme:
238
+ """A read-only, dictionary-like object containing theme information.
239
+
240
+ Theme information is restricted to the ``type`` of the theme (dark or
241
+ light) and is inferred from the background color of the app.
242
+
243
+ .. note::
244
+ Changes made to the background color through CSS are not included.
245
+ Additionally, the theme type may be incorrect during a change in
246
+ theme, like in the following situations:
247
+
248
+ - When the app is first loaded within a session
249
+ - When the user changes the theme in the settings menu
250
+
251
+ For more information and to upvote an improvement, see GitHub issue
252
+ `#11920 <https://github.com/streamlit/streamlit/issues/11920>`_.
253
+
254
+ Attributes
255
+ ----------
256
+ type : "light", "dark"
257
+ The theme type inferred from the background color of the app.
258
+
259
+ Example
260
+ -------
261
+ Access the theme type of the app:
262
+
263
+ >>> import streamlit as st
264
+ >>>
265
+ >>> st.write(f"The current theme type is {st.context.theme.type}.")
266
+
267
+ """
268
+ ctx = get_script_run_ctx()
269
+
270
+ if ctx is None or ctx.context_info is None:
271
+ return StreamlitTheme({"type": None})
272
+
273
+ return StreamlitTheme.from_context_info({"type": ctx.context_info.color_scheme})
274
+
275
+ @property
276
+ @gather_metrics("context.timezone")
277
+ def timezone(self) -> str | None:
278
+ """The read-only timezone of the user's browser.
279
+
280
+ Example
281
+ -------
282
+ Access the user's timezone, and format a datetime to display locally:
283
+
284
+ >>> import streamlit as st
285
+ >>> from datetime import datetime, timezone
286
+ >>> import pytz
287
+ >>>
288
+ >>> tz = st.context.timezone
289
+ >>> tz_obj = pytz.timezone(tz)
290
+ >>>
291
+ >>> now = datetime.now(timezone.utc)
292
+ >>>
293
+ >>> f"The user's timezone is {tz}."
294
+ >>> f"The UTC time is {now}."
295
+ >>> f"The user's local time is {now.astimezone(tz_obj)}"
296
+
297
+ """
298
+ ctx = get_script_run_ctx()
299
+
300
+ if ctx is None or ctx.context_info is None:
301
+ return None
302
+ return ctx.context_info.timezone
303
+
304
+ @property
305
+ @gather_metrics("context.timezone_offset")
306
+ def timezone_offset(self) -> int | None:
307
+ """The read-only timezone offset of the user's browser.
308
+
309
+ Example
310
+ -------
311
+ Access the user's timezone offset, and format a datetime to display locally:
312
+
313
+ >>> import streamlit as st
314
+ >>> from datetime import datetime, timezone, timedelta
315
+ >>>
316
+ >>> tzoff = st.context.timezone_offset
317
+ >>> tz_obj = timezone(-timedelta(minutes=tzoff))
318
+ >>>
319
+ >>> now = datetime.now(timezone.utc)
320
+ >>>
321
+ >>> f"The user's timezone is {tz}."
322
+ >>> f"The UTC time is {now}."
323
+ >>> f"The user's local time is {now.astimezone(tz_obj)}"
324
+
325
+ """
326
+ ctx = get_script_run_ctx()
327
+ if ctx is None or ctx.context_info is None:
328
+ return None
329
+ return ctx.context_info.timezone_offset
330
+
331
+ @property
332
+ @gather_metrics("context.locale")
333
+ def locale(self) -> str | None:
334
+ """The read-only locale of the user's browser.
335
+
336
+ ``st.context.locale`` returns the value of |navigator.language|_ from
337
+ the user's DOM. This is a string representing the user's preferred
338
+ language (e.g. "en-US").
339
+
340
+ .. |navigator.language| replace:: ``navigator.language``
341
+ .. _navigator.language: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language
342
+
343
+ Example
344
+ -------
345
+ Access the user's locale to display locally:
346
+
347
+ >>> import streamlit as st
348
+ >>>
349
+ >>> if st.context.locale == "fr-FR":
350
+ >>> st.write("Bonjour!")
351
+ >>> else:
352
+ >>> st.write("Hello!")
353
+
354
+ """
355
+ ctx = get_script_run_ctx()
356
+ if ctx is None or ctx.context_info is None:
357
+ return None
358
+ return ctx.context_info.locale
359
+
360
+ @property
361
+ @gather_metrics("context.url")
362
+ def url(self) -> str | None:
363
+ """The read-only URL of the app in the user's browser.
364
+
365
+ ``st.context.url`` returns the URL through which the user is accessing
366
+ the app. This includes the scheme, domain name, port, and path. If
367
+ query parameters or anchors are present in the URL, they are removed
368
+ and not included in this value.
369
+
370
+ Example
371
+ -------
372
+ Conditionally show content when you access your app through
373
+ ``localhost``:
374
+
375
+ >>> import streamlit as st
376
+ >>>
377
+ >>> if st.context.url.startswith("http://localhost"):
378
+ >>> st.write("You are running the app locally.")
379
+ """
380
+ ctx = get_script_run_ctx()
381
+ if ctx is None or ctx.context_info is None:
382
+ return None
383
+
384
+ url_from_frontend = ctx.context_info.url
385
+ url_without_page_prefix = maybe_trim_page_path(
386
+ url_from_frontend, ctx.pages_manager
387
+ )
388
+ return maybe_add_page_path(url_without_page_prefix, ctx.pages_manager)
389
+
390
+ @property
391
+ @gather_metrics("context.ip_address")
392
+ def ip_address(self) -> str | None:
393
+ """The read-only IP address of the user's connection.
394
+
395
+ This should not be used for security measures because it can easily be
396
+ spoofed. When a user accesses the app through ``localhost``, the IP
397
+ address is ``None``. Otherwise, the IP address is determined from the
398
+ WebSocket connection and may be an IPv4 or IPv6 address.
399
+
400
+ Example
401
+ -------
402
+ Check if the user has an IPv4 or IPv6 address:
403
+
404
+ >>> import streamlit as st
405
+ >>>
406
+ >>> ip = st.context.ip_address
407
+ >>> if ip is None:
408
+ >>> st.write("No IP address. This is expected in local development.")
409
+ >>> elif ip.contains(":"):
410
+ >>> st.write("You have an IPv6 address.")
411
+ >>> elif ip.contains("."):
412
+ >>> st.write("You have an IPv4 address.")
413
+ >>> else:
414
+ >>> st.error("This should not happen.")
415
+ """
416
+ client_context = _get_client_context()
417
+ if client_context is not None:
418
+ remote_ip = client_context.remote_ip
419
+ if remote_ip in {"::1", "127.0.0.1"}:
420
+ return None
421
+ return remote_ip
422
+ return None
423
+
424
+ @property
425
+ @gather_metrics("context.is_embedded")
426
+ def is_embedded(self) -> bool | None:
427
+ """Whether the app is embedded.
428
+
429
+ This property returns a boolean value indicating whether the app is
430
+ running in an embedded context. This is determined by the presence of
431
+ ``embed=true`` as a query parameter in the URL. This is the only way to
432
+ determine if the app is currently configured for embedding because
433
+ embedding settings are not accessible through ``st.query_params`` or
434
+ ``st.context.url``.
435
+
436
+ Example
437
+ -------
438
+ Conditionally show content when the app is running in an embedded
439
+ context:
440
+
441
+ >>> import streamlit as st
442
+ >>>
443
+ >>> if st.context.is_embedded:
444
+ >>> st.write("You are running the app in an embedded context.")
445
+ """
446
+ ctx = get_script_run_ctx()
447
+ if ctx is None or ctx.context_info is None:
448
+ return None
449
+ return ctx.context_info.is_embedded
@@ -0,0 +1,49 @@
1
+ # Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import TYPE_CHECKING
18
+
19
+ if TYPE_CHECKING:
20
+ from streamlit.runtime.pages_manager import PagesManager
21
+ from streamlit.source_util import PageInfo
22
+
23
+
24
+ def maybe_trim_page_path(url: str, page_manager: PagesManager) -> str:
25
+ """Trim the page path from the URL if it exists."""
26
+ url = url.removesuffix("/")
27
+
28
+ for page in page_manager.get_pages().values():
29
+ page_url = page.get("url_pathname", "")
30
+ if page_url and url.endswith(page_url):
31
+ return url.removesuffix(page_url)
32
+
33
+ return url
34
+
35
+
36
+ def maybe_add_page_path(url: str, page_manager: PagesManager) -> str:
37
+ """Add the page path to the URL if it exists."""
38
+ url = url.removesuffix("/")
39
+
40
+ current_page_script_hash = page_manager.current_page_script_hash
41
+ current_page_info: PageInfo | None = page_manager.get_pages().get(
42
+ current_page_script_hash, None
43
+ )
44
+ if current_page_info is not None:
45
+ page_url = current_page_info.get("url_pathname", "")
46
+ if page_url:
47
+ return f"{url}/{page_url}"
48
+
49
+ return url