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.
- streamlit/__init__.py +292 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +583 -0
- streamlit/cli_util.py +107 -0
- streamlit/column_config.py +60 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +128 -0
- streamlit/commands/execution_control.py +318 -0
- streamlit/commands/logo.py +250 -0
- streamlit/commands/navigation.py +430 -0
- streamlit/commands/page_config.py +335 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +158 -0
- streamlit/components/v1/__init__.py +29 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +147 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +239 -0
- streamlit/components/v2/__init__.py +531 -0
- streamlit/components/v2/bidi_component/__init__.py +20 -0
- streamlit/components/v2/bidi_component/constants.py +29 -0
- streamlit/components/v2/bidi_component/main.py +537 -0
- streamlit/components/v2/bidi_component/serialization.py +272 -0
- streamlit/components/v2/bidi_component/state.py +92 -0
- streamlit/components/v2/component_definition_resolver.py +143 -0
- streamlit/components/v2/component_file_watcher.py +403 -0
- streamlit/components/v2/component_manager.py +439 -0
- streamlit/components/v2/component_manifest_handler.py +122 -0
- streamlit/components/v2/component_path_utils.py +233 -0
- streamlit/components/v2/component_registry.py +426 -0
- streamlit/components/v2/get_bidi_component_manager.py +51 -0
- streamlit/components/v2/manifest_scanner.py +620 -0
- streamlit/components/v2/presentation.py +198 -0
- streamlit/components/v2/types.py +317 -0
- streamlit/config.py +2977 -0
- streamlit/config_option.py +319 -0
- streamlit/config_util.py +887 -0
- streamlit/connections/__init__.py +32 -0
- streamlit/connections/base_connection.py +215 -0
- streamlit/connections/snowflake_connection.py +765 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +427 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +314 -0
- streamlit/dataframe_util.py +1434 -0
- streamlit/delta_generator.py +696 -0
- streamlit/delta_generator_singletons.py +243 -0
- streamlit/deprecation_util.py +253 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +341 -0
- streamlit/elements/arrow.py +1065 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +75 -0
- streamlit/elements/code.py +154 -0
- streamlit/elements/deck_gl_json_chart.py +627 -0
- streamlit/elements/dialog_decorator.py +320 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +370 -0
- streamlit/elements/form.py +481 -0
- streamlit/elements/graphviz_chart.py +226 -0
- streamlit/elements/heading.py +407 -0
- streamlit/elements/help.py +565 -0
- streamlit/elements/html.py +189 -0
- streamlit/elements/iframe.py +245 -0
- streamlit/elements/image.py +221 -0
- streamlit/elements/json.py +171 -0
- streamlit/elements/layouts.py +1534 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1316 -0
- streamlit/elements/lib/color_util.py +272 -0
- streamlit/elements/lib/column_config_utils.py +555 -0
- streamlit/elements/lib/column_types.py +2699 -0
- streamlit/elements/lib/dialog.py +212 -0
- streamlit/elements/lib/dicttools.py +152 -0
- streamlit/elements/lib/file_uploader_utils.py +91 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +447 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/layout_utils.py +325 -0
- streamlit/elements/lib/mutable_expander_container.py +73 -0
- streamlit/elements/lib/mutable_popover_container.py +73 -0
- streamlit/elements/lib/mutable_status_container.py +194 -0
- streamlit/elements/lib/mutable_tab_container.py +73 -0
- streamlit/elements/lib/options_selector_utils.py +480 -0
- streamlit/elements/lib/pandas_styler_utils.py +302 -0
- streamlit/elements/lib/policies.py +198 -0
- streamlit/elements/lib/shortcut_utils.py +152 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +206 -0
- streamlit/elements/lib/subtitle_utils.py +175 -0
- streamlit/elements/lib/utils.py +274 -0
- streamlit/elements/map.py +526 -0
- streamlit/elements/markdown.py +529 -0
- streamlit/elements/media.py +843 -0
- streamlit/elements/metric.py +529 -0
- streamlit/elements/pdf.py +190 -0
- streamlit/elements/plotly_chart.py +779 -0
- streamlit/elements/progress.py +172 -0
- streamlit/elements/pyplot.py +240 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/space.py +121 -0
- streamlit/elements/spinner.py +152 -0
- streamlit/elements/table.py +240 -0
- streamlit/elements/text.py +113 -0
- streamlit/elements/toast.py +175 -0
- streamlit/elements/vega_charts.py +2510 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +334 -0
- streamlit/elements/widgets/button.py +1559 -0
- streamlit/elements/widgets/button_group.py +1061 -0
- streamlit/elements/widgets/camera_input.py +281 -0
- streamlit/elements/widgets/chat.py +1028 -0
- streamlit/elements/widgets/checkbox.py +420 -0
- streamlit/elements/widgets/color_picker.py +329 -0
- streamlit/elements/widgets/data_editor.py +1168 -0
- streamlit/elements/widgets/data_editor_plus.py +902 -0
- streamlit/elements/widgets/feedback.py +322 -0
- streamlit/elements/widgets/file_uploader.py +592 -0
- streamlit/elements/widgets/multiselect.py +654 -0
- streamlit/elements/widgets/number_input.py +719 -0
- streamlit/elements/widgets/radio.py +551 -0
- streamlit/elements/widgets/select_slider.py +568 -0
- streamlit/elements/widgets/selectbox.py +680 -0
- streamlit/elements/widgets/slider.py +1093 -0
- streamlit/elements/widgets/text_widgets.py +779 -0
- streamlit/elements/widgets/time_widgets.py +1712 -0
- streamlit/elements/write.py +585 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +56 -0
- streamlit/error_util.py +112 -0
- streamlit/errors.py +680 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +410 -0
- streamlit/file_util.py +266 -0
- streamlit/git_util.py +200 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/__pycache__/__init__.cpython-312.pyc +0 -0
- streamlit/hello/__pycache__/streamlit_app.cpython-312.pyc +0 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +46 -0
- streamlit/hello/mapping_demo.py +113 -0
- streamlit/hello/plotting_demo.py +62 -0
- streamlit/hello/streamlit_app.py +57 -0
- streamlit/hello/utils.py +30 -0
- streamlit/logger.py +129 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +365 -0
- streamlit/net_util.py +125 -0
- streamlit/path_security.py +98 -0
- streamlit/platform.py +31 -0
- streamlit/proto/Alert_pb2.py +28 -0
- streamlit/proto/Alert_pb2.pyi +100 -0
- streamlit/proto/AppPage_pb2.py +25 -0
- streamlit/proto/AppPage_pb2.pyi +75 -0
- streamlit/proto/ArrowData_pb2.py +27 -0
- streamlit/proto/ArrowData_pb2.pyi +103 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +26 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +65 -0
- streamlit/proto/AudioInput_pb2.py +26 -0
- streamlit/proto/AudioInput_pb2.pyi +72 -0
- streamlit/proto/Audio_pb2.py +26 -0
- streamlit/proto/Audio_pb2.pyi +75 -0
- streamlit/proto/AuthRedirect_pb2.py +25 -0
- streamlit/proto/AuthRedirect_pb2.pyi +48 -0
- streamlit/proto/AutoRerun_pb2.py +25 -0
- streamlit/proto/AutoRerun_pb2.pyi +52 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +132 -0
- streamlit/proto/Balloons_pb2.py +25 -0
- streamlit/proto/Balloons_pb2.pyi +48 -0
- streamlit/proto/BidiComponent_pb2.py +32 -0
- streamlit/proto/BidiComponent_pb2.pyi +176 -0
- streamlit/proto/Block_pb2.py +62 -0
- streamlit/proto/Block_pb2.pyi +518 -0
- streamlit/proto/ButtonGroup_pb2.py +32 -0
- streamlit/proto/ButtonGroup_pb2.pyi +157 -0
- streamlit/proto/ButtonLikeIconPosition_pb2.py +25 -0
- streamlit/proto/ButtonLikeIconPosition_pb2.pyi +47 -0
- streamlit/proto/Button_pb2.py +26 -0
- streamlit/proto/Button_pb2.pyi +82 -0
- streamlit/proto/CameraInput_pb2.py +26 -0
- streamlit/proto/CameraInput_pb2.pyi +66 -0
- streamlit/proto/ChatInput_pb2.py +27 -0
- streamlit/proto/ChatInput_pb2.pyi +113 -0
- streamlit/proto/Checkbox_pb2.py +28 -0
- streamlit/proto/Checkbox_pb2.pyi +99 -0
- streamlit/proto/ClientState_pb2.py +28 -0
- streamlit/proto/ClientState_pb2.pyi +137 -0
- streamlit/proto/Code_pb2.py +25 -0
- streamlit/proto/Code_pb2.pyi +59 -0
- streamlit/proto/ColorPicker_pb2.py +26 -0
- streamlit/proto/ColorPicker_pb2.pyi +82 -0
- streamlit/proto/Common_pb2.py +49 -0
- streamlit/proto/Common_pb2.pyi +325 -0
- streamlit/proto/Components_pb2.py +33 -0
- streamlit/proto/Components_pb2.pyi +196 -0
- streamlit/proto/Dataframe_pb2.py +30 -0
- streamlit/proto/Dataframe_pb2.pyi +172 -0
- streamlit/proto/DateInput_pb2.py +26 -0
- streamlit/proto/DateInput_pb2.pyi +91 -0
- streamlit/proto/DateTimeInput_pb2.py +26 -0
- streamlit/proto/DateTimeInput_pb2.pyi +94 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +27 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +91 -0
- streamlit/proto/Delta_pb2.py +29 -0
- streamlit/proto/Delta_pb2.pyi +82 -0
- streamlit/proto/DownloadButton_pb2.py +26 -0
- streamlit/proto/DownloadButton_pb2.pyi +92 -0
- streamlit/proto/Element_pb2.py +81 -0
- streamlit/proto/Element_pb2.pyi +348 -0
- streamlit/proto/Empty_pb2.py +25 -0
- streamlit/proto/Empty_pb2.pyi +42 -0
- streamlit/proto/Exception_pb2.py +26 -0
- streamlit/proto/Exception_pb2.pyi +88 -0
- streamlit/proto/Favicon_pb2.py +25 -0
- streamlit/proto/Favicon_pb2.pyi +47 -0
- streamlit/proto/Feedback_pb2.py +27 -0
- streamlit/proto/Feedback_pb2.pyi +93 -0
- streamlit/proto/FileUploader_pb2.py +26 -0
- streamlit/proto/FileUploader_pb2.pyi +90 -0
- streamlit/proto/ForwardMsg_pb2.py +48 -0
- streamlit/proto/ForwardMsg_pb2.pyi +296 -0
- streamlit/proto/GapSize_pb2.py +27 -0
- streamlit/proto/GapSize_pb2.pyi +82 -0
- streamlit/proto/GitInfo_pb2.py +27 -0
- streamlit/proto/GitInfo_pb2.pyi +84 -0
- streamlit/proto/GraphVizChart_pb2.py +25 -0
- streamlit/proto/GraphVizChart_pb2.pyi +56 -0
- streamlit/proto/Heading_pb2.py +25 -0
- streamlit/proto/Heading_pb2.pyi +63 -0
- streamlit/proto/HeightConfig_pb2.py +25 -0
- streamlit/proto/HeightConfig_pb2.pyi +61 -0
- streamlit/proto/Help_pb2.py +27 -0
- streamlit/proto/Help_pb2.pyi +104 -0
- streamlit/proto/Html_pb2.py +25 -0
- streamlit/proto/Html_pb2.pyi +52 -0
- streamlit/proto/IFrame_pb2.py +25 -0
- streamlit/proto/IFrame_pb2.pyi +68 -0
- streamlit/proto/Image_pb2.py +27 -0
- streamlit/proto/Image_pb2.pyi +73 -0
- streamlit/proto/Json_pb2.py +25 -0
- streamlit/proto/Json_pb2.pyi +63 -0
- streamlit/proto/LabelVisibility_pb2.py +27 -0
- streamlit/proto/LabelVisibility_pb2.pyi +69 -0
- streamlit/proto/LinkButton_pb2.py +26 -0
- streamlit/proto/LinkButton_pb2.pyi +76 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +82 -0
- streamlit/proto/Markdown_pb2.py +27 -0
- streamlit/proto/Markdown_pb2.pyi +83 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +145 -0
- streamlit/proto/MetricsEvent_pb2.py +28 -0
- streamlit/proto/MetricsEvent_pb2.pyi +224 -0
- streamlit/proto/MultiSelect_pb2.py +26 -0
- streamlit/proto/MultiSelect_pb2.pyi +108 -0
- streamlit/proto/Navigation_pb2.py +28 -0
- streamlit/proto/Navigation_pb2.pyi +89 -0
- streamlit/proto/NewSession_pb2.py +47 -0
- streamlit/proto/NewSession_pb2.pyi +753 -0
- streamlit/proto/NumberInput_pb2.py +28 -0
- streamlit/proto/NumberInput_pb2.pyi +138 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +179 -0
- streamlit/proto/PageInfo_pb2.py +25 -0
- streamlit/proto/PageInfo_pb2.pyi +50 -0
- streamlit/proto/PageLink_pb2.py +26 -0
- streamlit/proto/PageLink_pb2.pyi +80 -0
- streamlit/proto/PageNotFound_pb2.py +25 -0
- streamlit/proto/PageNotFound_pb2.pyi +49 -0
- streamlit/proto/PageProfile_pb2.py +29 -0
- streamlit/proto/PageProfile_pb2.pyi +146 -0
- streamlit/proto/ParentMessage_pb2.py +25 -0
- streamlit/proto/ParentMessage_pb2.pyi +53 -0
- streamlit/proto/PlotlyChart_pb2.py +27 -0
- streamlit/proto/PlotlyChart_pb2.pyi +96 -0
- streamlit/proto/Progress_pb2.py +25 -0
- streamlit/proto/Progress_pb2.pyi +50 -0
- streamlit/proto/Radio_pb2.py +26 -0
- streamlit/proto/Radio_pb2.pyi +104 -0
- streamlit/proto/RootContainer_pb2.py +25 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +26 -0
- streamlit/proto/Selectbox_pb2.pyi +107 -0
- streamlit/proto/SessionEvent_pb2.py +26 -0
- streamlit/proto/SessionEvent_pb2.pyi +72 -0
- streamlit/proto/SessionStatus_pb2.py +25 -0
- streamlit/proto/SessionStatus_pb2.pyi +64 -0
- streamlit/proto/Skeleton_pb2.py +27 -0
- streamlit/proto/Skeleton_pb2.pyi +75 -0
- streamlit/proto/Slider_pb2.py +30 -0
- streamlit/proto/Slider_pb2.pyi +161 -0
- streamlit/proto/Snow_pb2.py +25 -0
- streamlit/proto/Snow_pb2.pyi +48 -0
- streamlit/proto/Space_pb2.py +25 -0
- streamlit/proto/Space_pb2.pyi +48 -0
- streamlit/proto/Spinner_pb2.py +25 -0
- streamlit/proto/Spinner_pb2.pyi +56 -0
- streamlit/proto/Table_pb2.py +28 -0
- streamlit/proto/Table_pb2.pyi +83 -0
- streamlit/proto/TextAlignmentConfig_pb2.py +27 -0
- streamlit/proto/TextAlignmentConfig_pb2.pyi +69 -0
- streamlit/proto/TextArea_pb2.py +26 -0
- streamlit/proto/TextArea_pb2.pyi +97 -0
- streamlit/proto/TextInput_pb2.py +28 -0
- streamlit/proto/TextInput_pb2.pyi +124 -0
- streamlit/proto/Text_pb2.py +25 -0
- streamlit/proto/Text_pb2.pyi +53 -0
- streamlit/proto/TimeInput_pb2.py +26 -0
- streamlit/proto/TimeInput_pb2.pyi +86 -0
- streamlit/proto/Toast_pb2.py +25 -0
- streamlit/proto/Toast_pb2.pyi +64 -0
- streamlit/proto/Transient_pb2.py +26 -0
- streamlit/proto/Transient_pb2.pyi +53 -0
- streamlit/proto/VegaLiteChart_pb2.py +27 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +92 -0
- streamlit/proto/Video_pb2.py +30 -0
- streamlit/proto/Video_pb2.pyi +129 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +157 -0
- streamlit/proto/WidthConfig_pb2.py +25 -0
- streamlit/proto/WidthConfig_pb2.pyi +61 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +58 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +558 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +1302 -0
- streamlit/runtime/caching/__init__.py +118 -0
- streamlit/runtime/caching/cache_data_api.py +775 -0
- streamlit/runtime/caching/cache_errors.py +143 -0
- streamlit/runtime/caching/cache_resource_api.py +756 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +601 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +655 -0
- streamlit/runtime/caching/legacy_cache_api.py +170 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +236 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +159 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/caching/ttl_cleanup_cache.py +85 -0
- streamlit/runtime/connection_factory.py +498 -0
- streamlit/runtime/context.py +449 -0
- streamlit/runtime/context_util.py +49 -0
- streamlit/runtime/credentials.py +355 -0
- streamlit/runtime/download_data_util.py +53 -0
- streamlit/runtime/forward_msg_cache.py +101 -0
- streamlit/runtime/forward_msg_queue.py +263 -0
- streamlit/runtime/fragment.py +441 -0
- streamlit/runtime/media_file_manager.py +409 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +201 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +149 -0
- streamlit/runtime/metrics_util.py +612 -0
- streamlit/runtime/pages_manager.py +160 -0
- streamlit/runtime/runtime.py +775 -0
- streamlit/runtime/runtime_util.py +108 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +167 -0
- streamlit/runtime/scriptrunner/magic.py +277 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +805 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +44 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +311 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +277 -0
- streamlit/runtime/secrets.py +533 -0
- streamlit/runtime/session_manager.py +430 -0
- streamlit/runtime/state/__init__.py +47 -0
- streamlit/runtime/state/common.py +256 -0
- streamlit/runtime/state/presentation.py +85 -0
- streamlit/runtime/state/query_params.py +767 -0
- streamlit/runtime/state/query_params_proxy.py +222 -0
- streamlit/runtime/state/safe_session_state.py +146 -0
- streamlit/runtime/state/session_state.py +1299 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +197 -0
- streamlit/runtime/stats.py +356 -0
- streamlit/runtime/theme_util.py +148 -0
- streamlit/runtime/uploaded_file_manager.py +152 -0
- streamlit/runtime/websocket_session_manager.py +301 -0
- streamlit/source_util.py +97 -0
- streamlit/starlette.py +34 -0
- streamlit/string_util.py +264 -0
- streamlit/temporary_directory.py +67 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1089 -0
- streamlit/testing/v1/element_tree.py +2272 -0
- streamlit/testing/v1/local_script_runner.py +176 -0
- streamlit/testing/v1/util.py +61 -0
- streamlit/time_util.py +73 -0
- streamlit/type_util.py +480 -0
- streamlit/url_util.py +120 -0
- streamlit/user_info.py +698 -0
- streamlit/util.py +108 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2870 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +500 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +297 -0
- streamlit/watcher/path_watcher.py +244 -0
- streamlit/watcher/polling_path_watcher.py +138 -0
- streamlit/watcher/util.py +223 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +463 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +465 -0
- streamlit/web/server/__init__.py +30 -0
- streamlit/web/server/app_discovery.py +422 -0
- streamlit/web/server/app_static_file_handler.py +102 -0
- streamlit/web/server/authlib_tornado_integration.py +125 -0
- streamlit/web/server/bidi_component_request_handler.py +193 -0
- streamlit/web/server/browser_websocket_handler.py +341 -0
- streamlit/web/server/component_file_utils.py +105 -0
- streamlit/web/server/component_request_handler.py +107 -0
- streamlit/web/server/media_file_handler.py +148 -0
- streamlit/web/server/oauth_authlib_routes.py +314 -0
- streamlit/web/server/oidc_mixin.py +138 -0
- streamlit/web/server/routes.py +257 -0
- streamlit/web/server/server.py +555 -0
- streamlit/web/server/server_util.py +235 -0
- streamlit/web/server/starlette/__init__.py +23 -0
- streamlit/web/server/starlette/starlette_app.py +541 -0
- streamlit/web/server/starlette/starlette_app_utils.py +306 -0
- streamlit/web/server/starlette/starlette_auth_routes.py +584 -0
- streamlit/web/server/starlette/starlette_gzip_middleware.py +121 -0
- streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
- streamlit/web/server/starlette/starlette_routes.py +884 -0
- streamlit/web/server/starlette/starlette_server.py +496 -0
- streamlit/web/server/starlette/starlette_server_config.py +55 -0
- streamlit/web/server/starlette/starlette_static_routes.py +181 -0
- streamlit/web/server/starlette/starlette_websocket.py +560 -0
- streamlit/web/server/stats_request_handler.py +116 -0
- streamlit/web/server/upload_file_request_handler.py +158 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_data_editor_plus-0.1.0.dist-info/METADATA +76 -0
- streamlit_data_editor_plus-0.1.0.dist-info/RECORD +456 -0
- streamlit_data_editor_plus-0.1.0.dist-info/WHEEL +5 -0
- streamlit_data_editor_plus-0.1.0.dist-info/entry_points.txt +2 -0
- streamlit_data_editor_plus-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
# NOTE: We won't always be able to import from snowflake.connector.connection so need the
|
|
16
|
+
# `type: ignore` comment below, but that comment will explode if `warn-unused-ignores` is
|
|
17
|
+
# turned on when the package is available. Unfortunately, mypy doesn't provide a good
|
|
18
|
+
# way to configure this at a per-line level :(
|
|
19
|
+
# mypy: no-warn-unused-ignores
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
from typing import TYPE_CHECKING, Any
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from collections.abc import Collection
|
|
28
|
+
|
|
29
|
+
SNOWSQL_CONNECTION_FILE = "~/.snowsql/config"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def extract_from_dict(
|
|
33
|
+
keys: Collection[str], source_dict: dict[str, Any]
|
|
34
|
+
) -> dict[str, Any]:
|
|
35
|
+
"""Extract the specified keys from source_dict and return them in a new dict.
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
keys : Collection[str]
|
|
40
|
+
The keys to extract from source_dict.
|
|
41
|
+
source_dict : Dict[str, Any]
|
|
42
|
+
The dict to extract keys from. Note that this function mutates source_dict.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
Dict[str, Any]
|
|
47
|
+
A new dict containing the keys/values extracted from source_dict.
|
|
48
|
+
"""
|
|
49
|
+
d = {}
|
|
50
|
+
|
|
51
|
+
for k in keys:
|
|
52
|
+
if k in source_dict:
|
|
53
|
+
d[k] = source_dict.pop(k)
|
|
54
|
+
|
|
55
|
+
return d
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def load_from_snowsql_config_file(connection_name: str) -> dict[str, Any]:
|
|
59
|
+
"""Loads the dictionary from snowsql config file."""
|
|
60
|
+
snowsql_config_file = os.path.expanduser(SNOWSQL_CONNECTION_FILE)
|
|
61
|
+
if not os.path.exists(snowsql_config_file):
|
|
62
|
+
return {}
|
|
63
|
+
|
|
64
|
+
# Lazy-load config parser for better import / startup performance
|
|
65
|
+
import configparser
|
|
66
|
+
|
|
67
|
+
config = configparser.ConfigParser(inline_comment_prefixes="#")
|
|
68
|
+
config.read(snowsql_config_file)
|
|
69
|
+
|
|
70
|
+
if f"connections.{connection_name}" in config:
|
|
71
|
+
raw_conn_params = config[f"connections.{connection_name}"]
|
|
72
|
+
elif "connections" in config:
|
|
73
|
+
raw_conn_params = config["connections"]
|
|
74
|
+
else:
|
|
75
|
+
return {}
|
|
76
|
+
|
|
77
|
+
conn_params = {
|
|
78
|
+
k.replace("name", ""): v.strip('"') for k, v in raw_conn_params.items()
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if "db" in conn_params:
|
|
82
|
+
conn_params["database"] = conn_params["db"]
|
|
83
|
+
del conn_params["db"]
|
|
84
|
+
|
|
85
|
+
return conn_params
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def running_in_sis() -> bool:
|
|
89
|
+
"""Return whether this app is running in SiS."""
|
|
90
|
+
try:
|
|
91
|
+
from snowflake.snowpark._internal.utils import ( # type: ignore[import] # isort: skip
|
|
92
|
+
is_in_stored_procedure,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
return is_in_stored_procedure() # type: ignore
|
|
96
|
+
except ModuleNotFoundError:
|
|
97
|
+
return False
|
streamlit/cursor.py
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
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, Any, Generic, TypeVar
|
|
18
|
+
|
|
19
|
+
from streamlit import util
|
|
20
|
+
from streamlit.proto.Element_pb2 import Element
|
|
21
|
+
from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from collections.abc import Iterator
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def make_delta_path(
|
|
28
|
+
root_container: int, parent_path: tuple[int, ...], index: int
|
|
29
|
+
) -> list[int]:
|
|
30
|
+
delta_path = [root_container]
|
|
31
|
+
delta_path.extend(parent_path)
|
|
32
|
+
delta_path.append(index)
|
|
33
|
+
return delta_path
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_container_cursor(
|
|
37
|
+
root_container: int | None,
|
|
38
|
+
) -> RunningCursor | None:
|
|
39
|
+
"""Return the top-level RunningCursor for the given container.
|
|
40
|
+
This is the cursor that is used when user code calls something like
|
|
41
|
+
`st.foo` (which uses the main container) or `st.sidebar.foo` (which uses
|
|
42
|
+
the sidebar container).
|
|
43
|
+
"""
|
|
44
|
+
if root_container is None:
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
ctx = get_script_run_ctx()
|
|
48
|
+
|
|
49
|
+
if ctx is None:
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
if root_container in ctx.cursors:
|
|
53
|
+
return ctx.cursors[root_container]
|
|
54
|
+
|
|
55
|
+
cursor = RunningCursor(root_container=root_container)
|
|
56
|
+
ctx.cursors[root_container] = cursor
|
|
57
|
+
return cursor
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
T = TypeVar("T")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class SparseList(Generic[T]):
|
|
64
|
+
"""A list-like data structure that only stores non-empty items."""
|
|
65
|
+
|
|
66
|
+
def __init__(self) -> None:
|
|
67
|
+
self._data: dict[int, T] = {}
|
|
68
|
+
|
|
69
|
+
def __setitem__(self, index: int, value: T) -> None:
|
|
70
|
+
if not isinstance(index, int) or index < 0:
|
|
71
|
+
raise IndexError("SparseList indices must be non-negative integers")
|
|
72
|
+
|
|
73
|
+
self._data[index] = value
|
|
74
|
+
|
|
75
|
+
def __getitem__(self, index: int) -> T:
|
|
76
|
+
if index not in self._data:
|
|
77
|
+
raise KeyError(f"Index {index} is empty")
|
|
78
|
+
|
|
79
|
+
return self._data[index]
|
|
80
|
+
|
|
81
|
+
def __delitem__(self, index: int) -> None:
|
|
82
|
+
if index in self._data:
|
|
83
|
+
del self._data[index]
|
|
84
|
+
else:
|
|
85
|
+
raise KeyError(f"Index {index} is empty")
|
|
86
|
+
|
|
87
|
+
def __iter__(self) -> Iterator[T]:
|
|
88
|
+
# Iterate in index order.
|
|
89
|
+
for index in sorted(self._data):
|
|
90
|
+
yield self._data[index]
|
|
91
|
+
|
|
92
|
+
def __len__(self) -> int:
|
|
93
|
+
# number of filled items
|
|
94
|
+
return len(self._data)
|
|
95
|
+
|
|
96
|
+
def items(self) -> Iterator[tuple[int, T]]:
|
|
97
|
+
"""Iterate through (index, value) for filled entries."""
|
|
98
|
+
for index in sorted(self._data):
|
|
99
|
+
yield index, self._data[index]
|
|
100
|
+
|
|
101
|
+
def __contains__(self, index: int) -> bool:
|
|
102
|
+
return index in self._data
|
|
103
|
+
|
|
104
|
+
def __repr__(self) -> str:
|
|
105
|
+
items = ", ".join(f"{i}: {v}" for i, v in self.items())
|
|
106
|
+
return f"SparseList({{{items}}})"
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class Cursor:
|
|
110
|
+
"""A pointer to a delta location in the app.
|
|
111
|
+
|
|
112
|
+
When adding an element to the app, you should always call
|
|
113
|
+
get_locked_cursor() on that element's respective Cursor.
|
|
114
|
+
|
|
115
|
+
Parameters
|
|
116
|
+
----------
|
|
117
|
+
transient_index: int | None
|
|
118
|
+
The running index of the transient elements.
|
|
119
|
+
transient_elements: SparseList[Element] | None
|
|
120
|
+
The list of active transient elements.
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
def __init__(
|
|
124
|
+
self,
|
|
125
|
+
transient_index: int | None = None,
|
|
126
|
+
transient_elements: SparseList[Element] | None = None,
|
|
127
|
+
) -> None:
|
|
128
|
+
self._transient_index: int | None = transient_index
|
|
129
|
+
self._transient_elements = transient_elements or SparseList[Element]()
|
|
130
|
+
|
|
131
|
+
def __repr__(self) -> str:
|
|
132
|
+
return util.repr_(self)
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def root_container(self) -> int:
|
|
136
|
+
"""The top-level container this cursor lives within - either
|
|
137
|
+
RootContainer.MAIN or RootContainer.SIDEBAR.
|
|
138
|
+
"""
|
|
139
|
+
raise NotImplementedError()
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def parent_path(self) -> tuple[int, ...]:
|
|
143
|
+
"""The cursor's parent's path within its container."""
|
|
144
|
+
raise NotImplementedError()
|
|
145
|
+
|
|
146
|
+
@property
|
|
147
|
+
def index(self) -> int:
|
|
148
|
+
"""The index of the Delta within its parent block."""
|
|
149
|
+
raise NotImplementedError()
|
|
150
|
+
|
|
151
|
+
@property
|
|
152
|
+
def delta_path(self) -> list[int]:
|
|
153
|
+
"""The complete path of the delta pointed to by this cursor - its
|
|
154
|
+
container, parent path, and index.
|
|
155
|
+
"""
|
|
156
|
+
return make_delta_path(self.root_container, self.parent_path, self.index)
|
|
157
|
+
|
|
158
|
+
@property
|
|
159
|
+
def is_locked(self) -> bool:
|
|
160
|
+
raise NotImplementedError()
|
|
161
|
+
|
|
162
|
+
@property
|
|
163
|
+
def transient_elements(self) -> SparseList[Element]:
|
|
164
|
+
return self._transient_elements
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def transient_index(self) -> int:
|
|
168
|
+
return 0 if self._transient_index is None else self._transient_index
|
|
169
|
+
|
|
170
|
+
def get_locked_cursor(self, **props: Any) -> LockedCursor:
|
|
171
|
+
raise NotImplementedError()
|
|
172
|
+
|
|
173
|
+
def get_transient_cursor(self) -> Cursor:
|
|
174
|
+
if self._transient_index is None:
|
|
175
|
+
self._transient_index = 0
|
|
176
|
+
else:
|
|
177
|
+
self._transient_index += 1
|
|
178
|
+
|
|
179
|
+
return self
|
|
180
|
+
|
|
181
|
+
@property
|
|
182
|
+
def props(self) -> Any:
|
|
183
|
+
"""Other data in this cursor. This is a temporary measure that will go
|
|
184
|
+
away when we implement improved return values for elements.
|
|
185
|
+
|
|
186
|
+
This is only implemented in LockedCursor.
|
|
187
|
+
"""
|
|
188
|
+
raise NotImplementedError()
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class RunningCursor(Cursor):
|
|
192
|
+
def __init__(
|
|
193
|
+
self,
|
|
194
|
+
root_container: int,
|
|
195
|
+
parent_path: tuple[int, ...] = (),
|
|
196
|
+
transient_index: int | None = None,
|
|
197
|
+
transient_elements: SparseList[Element] | None = None,
|
|
198
|
+
) -> None:
|
|
199
|
+
"""A moving pointer to a delta location in the app.
|
|
200
|
+
|
|
201
|
+
RunningCursors auto-increment to the next available location when you
|
|
202
|
+
call get_locked_cursor() on them.
|
|
203
|
+
|
|
204
|
+
Parameters
|
|
205
|
+
----------
|
|
206
|
+
root_container: int
|
|
207
|
+
The root container this cursor lives in.
|
|
208
|
+
parent_path: tuple of ints
|
|
209
|
+
The full path of this cursor, consisting of the IDs of all ancestors.
|
|
210
|
+
The 0th item is the topmost ancestor.
|
|
211
|
+
transient_index: int | None
|
|
212
|
+
The running index of the transient elements.
|
|
213
|
+
transient_elements: SparseList[Element]
|
|
214
|
+
The list of active transient elements.
|
|
215
|
+
|
|
216
|
+
"""
|
|
217
|
+
super().__init__(transient_index, transient_elements)
|
|
218
|
+
self._root_container = root_container
|
|
219
|
+
self._parent_path = parent_path
|
|
220
|
+
self._index = 0
|
|
221
|
+
|
|
222
|
+
@property
|
|
223
|
+
def root_container(self) -> int:
|
|
224
|
+
return self._root_container
|
|
225
|
+
|
|
226
|
+
@property
|
|
227
|
+
def parent_path(self) -> tuple[int, ...]:
|
|
228
|
+
return self._parent_path
|
|
229
|
+
|
|
230
|
+
@property
|
|
231
|
+
def index(self) -> int:
|
|
232
|
+
return self._index
|
|
233
|
+
|
|
234
|
+
@property
|
|
235
|
+
def is_locked(self) -> bool:
|
|
236
|
+
return False
|
|
237
|
+
|
|
238
|
+
def get_locked_cursor(self, **props: Any) -> LockedCursor:
|
|
239
|
+
locked_cursor = LockedCursor(
|
|
240
|
+
root_container=self._root_container,
|
|
241
|
+
parent_path=self._parent_path,
|
|
242
|
+
index=self._index,
|
|
243
|
+
**props,
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
self._index += 1
|
|
247
|
+
self._transient_index = None
|
|
248
|
+
self._transient_elements = SparseList[Element]()
|
|
249
|
+
|
|
250
|
+
return locked_cursor
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
class LockedCursor(Cursor):
|
|
254
|
+
def __init__(
|
|
255
|
+
self,
|
|
256
|
+
root_container: int,
|
|
257
|
+
parent_path: tuple[int, ...] = (),
|
|
258
|
+
index: int = 0,
|
|
259
|
+
transient_index: int | None = None,
|
|
260
|
+
transient_elements: SparseList[Element] | None = None,
|
|
261
|
+
**props: Any,
|
|
262
|
+
) -> None:
|
|
263
|
+
"""A locked pointer to a location in the app.
|
|
264
|
+
|
|
265
|
+
LockedCursors always point to the same location, even when you call
|
|
266
|
+
get_locked_cursor() on them.
|
|
267
|
+
|
|
268
|
+
Parameters
|
|
269
|
+
----------
|
|
270
|
+
root_container: int
|
|
271
|
+
The root container this cursor lives in.
|
|
272
|
+
parent_path: tuple of ints
|
|
273
|
+
The full path of this cursor, consisting of the IDs of all ancestors. The
|
|
274
|
+
0th item is the topmost ancestor.
|
|
275
|
+
index: int
|
|
276
|
+
transient_index: int | None
|
|
277
|
+
The running index of the transient elements.
|
|
278
|
+
transient_elements: SparseList[Element]
|
|
279
|
+
The list of active transient elements.
|
|
280
|
+
**props: any
|
|
281
|
+
Anything else you want to store in this cursor. This is a temporary
|
|
282
|
+
measure that will go away when we implement improved return values
|
|
283
|
+
for elements.
|
|
284
|
+
|
|
285
|
+
"""
|
|
286
|
+
super().__init__(transient_index, transient_elements)
|
|
287
|
+
self._root_container = root_container
|
|
288
|
+
self._index = index
|
|
289
|
+
self._parent_path = parent_path
|
|
290
|
+
self._props = props
|
|
291
|
+
|
|
292
|
+
@property
|
|
293
|
+
def root_container(self) -> int:
|
|
294
|
+
return self._root_container
|
|
295
|
+
|
|
296
|
+
@property
|
|
297
|
+
def parent_path(self) -> tuple[int, ...]:
|
|
298
|
+
return self._parent_path
|
|
299
|
+
|
|
300
|
+
@property
|
|
301
|
+
def index(self) -> int:
|
|
302
|
+
return self._index
|
|
303
|
+
|
|
304
|
+
@property
|
|
305
|
+
def is_locked(self) -> bool:
|
|
306
|
+
return True
|
|
307
|
+
|
|
308
|
+
@property
|
|
309
|
+
def props(self) -> Any:
|
|
310
|
+
return self._props
|
|
311
|
+
|
|
312
|
+
def get_locked_cursor(self, **props: Any) -> LockedCursor:
|
|
313
|
+
self._props = props
|
|
314
|
+
return self
|