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,529 @@
|
|
|
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 dataclasses import dataclass
|
|
18
|
+
from textwrap import dedent
|
|
19
|
+
from typing import TYPE_CHECKING, Any, Final, Literal, TypeAlias, cast
|
|
20
|
+
|
|
21
|
+
from streamlit.dataframe_util import OptionSequence, convert_anything_to_list
|
|
22
|
+
from streamlit.elements.lib.layout_utils import (
|
|
23
|
+
Height,
|
|
24
|
+
LayoutConfig,
|
|
25
|
+
Width,
|
|
26
|
+
validate_height,
|
|
27
|
+
validate_width,
|
|
28
|
+
)
|
|
29
|
+
from streamlit.elements.lib.policies import maybe_raise_label_warnings
|
|
30
|
+
from streamlit.elements.lib.utils import (
|
|
31
|
+
LabelVisibility,
|
|
32
|
+
get_label_visibility_proto_value,
|
|
33
|
+
)
|
|
34
|
+
from streamlit.errors import StreamlitAPIException, StreamlitValueError
|
|
35
|
+
from streamlit.proto.Metric_pb2 import Metric as MetricProto
|
|
36
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
|
37
|
+
from streamlit.string_util import AnyNumber, clean_text, from_number
|
|
38
|
+
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
from streamlit.delta_generator import DeltaGenerator
|
|
41
|
+
from streamlit.elements.lib.column_types import NumberFormat
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
Value: TypeAlias = AnyNumber | str | None
|
|
45
|
+
Delta: TypeAlias = AnyNumber | str | None
|
|
46
|
+
DeltaColor: TypeAlias = Literal[
|
|
47
|
+
"normal",
|
|
48
|
+
"inverse",
|
|
49
|
+
"off",
|
|
50
|
+
"red",
|
|
51
|
+
"orange",
|
|
52
|
+
"yellow",
|
|
53
|
+
"green",
|
|
54
|
+
"blue",
|
|
55
|
+
"violet",
|
|
56
|
+
"gray",
|
|
57
|
+
"grey",
|
|
58
|
+
"primary",
|
|
59
|
+
]
|
|
60
|
+
DeltaArrow: TypeAlias = Literal["auto", "up", "down", "off"]
|
|
61
|
+
|
|
62
|
+
# Mapping from delta_color string values to proto enum values
|
|
63
|
+
_DELTA_COLOR_TO_PROTO: Final[dict[str, MetricProto.MetricColor.ValueType]] = {
|
|
64
|
+
"red": MetricProto.MetricColor.RED,
|
|
65
|
+
"orange": MetricProto.MetricColor.ORANGE,
|
|
66
|
+
"yellow": MetricProto.MetricColor.YELLOW,
|
|
67
|
+
"green": MetricProto.MetricColor.GREEN,
|
|
68
|
+
"blue": MetricProto.MetricColor.BLUE,
|
|
69
|
+
"violet": MetricProto.MetricColor.VIOLET,
|
|
70
|
+
"gray": MetricProto.MetricColor.GRAY,
|
|
71
|
+
"grey": MetricProto.MetricColor.GRAY,
|
|
72
|
+
"primary": MetricProto.MetricColor.PRIMARY,
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Valid delta_color values for validation
|
|
76
|
+
_VALID_DELTA_COLORS: Final[set[str]] = {
|
|
77
|
+
"normal",
|
|
78
|
+
"inverse",
|
|
79
|
+
"off",
|
|
80
|
+
*_DELTA_COLOR_TO_PROTO.keys(),
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Mapping from delta_arrow string values to proto enum values
|
|
84
|
+
_DELTA_ARROW_TO_PROTO: Final[dict[str, MetricProto.MetricDirection.ValueType]] = {
|
|
85
|
+
"off": MetricProto.MetricDirection.NONE,
|
|
86
|
+
"up": MetricProto.MetricDirection.UP,
|
|
87
|
+
"down": MetricProto.MetricDirection.DOWN,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@dataclass(frozen=True)
|
|
92
|
+
class MetricColorAndDirection:
|
|
93
|
+
color: MetricProto.MetricColor.ValueType
|
|
94
|
+
direction: MetricProto.MetricDirection.ValueType
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class MetricMixin:
|
|
98
|
+
@gather_metrics("metric")
|
|
99
|
+
def metric(
|
|
100
|
+
self,
|
|
101
|
+
label: str,
|
|
102
|
+
value: Value,
|
|
103
|
+
delta: Delta = None,
|
|
104
|
+
delta_color: DeltaColor = "normal",
|
|
105
|
+
*,
|
|
106
|
+
help: str | None = None,
|
|
107
|
+
label_visibility: LabelVisibility = "visible",
|
|
108
|
+
border: bool = False,
|
|
109
|
+
width: Width = "stretch",
|
|
110
|
+
height: Height = "content",
|
|
111
|
+
chart_data: OptionSequence[Any] | None = None,
|
|
112
|
+
chart_type: Literal["line", "bar", "area"] = "line",
|
|
113
|
+
delta_arrow: DeltaArrow = "auto",
|
|
114
|
+
format: str | NumberFormat | None = None,
|
|
115
|
+
delta_description: str | None = None,
|
|
116
|
+
) -> DeltaGenerator:
|
|
117
|
+
r"""Display a metric in big bold font, with an optional indicator of how the metric changed.
|
|
118
|
+
|
|
119
|
+
Parameters
|
|
120
|
+
----------
|
|
121
|
+
label : str
|
|
122
|
+
The header or title for the metric. The label can optionally
|
|
123
|
+
contain GitHub-flavored Markdown of the following types: Bold, Italics,
|
|
124
|
+
Strikethroughs, Inline Code, Links, and Images. Images display like
|
|
125
|
+
icons, with a max height equal to the font height.
|
|
126
|
+
|
|
127
|
+
Unsupported Markdown elements are unwrapped so only their children
|
|
128
|
+
(text contents) render. Display unsupported elements as literal
|
|
129
|
+
characters by backslash-escaping them. E.g.,
|
|
130
|
+
``"1\. Not an ordered list"``.
|
|
131
|
+
|
|
132
|
+
See the ``body`` parameter of |st.markdown|_ for additional,
|
|
133
|
+
supported Markdown directives.
|
|
134
|
+
|
|
135
|
+
.. |st.markdown| replace:: ``st.markdown``
|
|
136
|
+
.. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
|
|
137
|
+
|
|
138
|
+
value : int, float, decimal.Decimal, str, or None
|
|
139
|
+
Value of the metric. ``None`` is rendered as a long dash.
|
|
140
|
+
|
|
141
|
+
The value can optionally contain GitHub-flavored Markdown, subject
|
|
142
|
+
to the same limitations described in the ``label`` parameter.
|
|
143
|
+
|
|
144
|
+
delta : int, float, decimal.Decimal, str, or None
|
|
145
|
+
Amount or indicator of change in the metric. An arrow is shown next
|
|
146
|
+
to the delta, oriented according to its sign:
|
|
147
|
+
|
|
148
|
+
- If the delta is ``None`` or an empty string, no arrow is shown.
|
|
149
|
+
- If the delta is a negative number or starts with a minus sign,
|
|
150
|
+
the arrow points down and the delta is red.
|
|
151
|
+
- Otherwise, the arrow points up and the delta is green.
|
|
152
|
+
|
|
153
|
+
You can modify the display, color, and orientation of the arrow
|
|
154
|
+
using the ``delta_color`` and ``delta_arrow`` parameters.
|
|
155
|
+
|
|
156
|
+
The delta can optionally contain GitHub-flavored Markdown, subject
|
|
157
|
+
to the same limitations described in the ``label`` parameter.
|
|
158
|
+
|
|
159
|
+
delta_color : str
|
|
160
|
+
The color of the delta and chart. This can be one of the following:
|
|
161
|
+
|
|
162
|
+
- ``"normal"`` (default): The color is red when the delta is
|
|
163
|
+
negative and green otherwise.
|
|
164
|
+
- ``"inverse"``: The color is green when the delta is negative and
|
|
165
|
+
red otherwise. This is useful when a negative change is
|
|
166
|
+
considered good, like a decrease in cost.
|
|
167
|
+
- ``"off"``: The color is gray regardless of the delta.
|
|
168
|
+
- A named color from the basic palette: The chart and delta are the
|
|
169
|
+
specified color regardless of their value. This can be one of the
|
|
170
|
+
following: ``"red"``, ``"orange"``, ``"yellow"``, ``"green"``,
|
|
171
|
+
``"blue"``, ``"violet"``, ``"gray"``/``"grey"``, or
|
|
172
|
+
``"primary"``.
|
|
173
|
+
|
|
174
|
+
help : str or None
|
|
175
|
+
A tooltip that gets displayed next to the metric label. Streamlit
|
|
176
|
+
only displays the tooltip when ``label_visibility="visible"``. If
|
|
177
|
+
this is ``None`` (default), no tooltip is displayed.
|
|
178
|
+
|
|
179
|
+
The tooltip can optionally contain GitHub-flavored Markdown,
|
|
180
|
+
including the Markdown directives described in the ``body``
|
|
181
|
+
parameter of ``st.markdown``.
|
|
182
|
+
|
|
183
|
+
label_visibility : "visible", "hidden", or "collapsed"
|
|
184
|
+
The visibility of the label. The default is ``"visible"``. If this
|
|
185
|
+
is ``"hidden"``, Streamlit displays an empty spacer instead of the
|
|
186
|
+
label, which can help keep the widget aligned with other widgets.
|
|
187
|
+
If this is ``"collapsed"``, Streamlit displays no label or spacer.
|
|
188
|
+
|
|
189
|
+
border : bool
|
|
190
|
+
Whether to show a border around the metric container. If this is
|
|
191
|
+
``False`` (default), no border is shown. If this is ``True``, a
|
|
192
|
+
border is shown.
|
|
193
|
+
|
|
194
|
+
height : "content", "stretch", or int
|
|
195
|
+
The height of the metric element. This can be one of the following:
|
|
196
|
+
|
|
197
|
+
- ``"content"`` (default): The height of the element matches the
|
|
198
|
+
height of its content.
|
|
199
|
+
- ``"stretch"``: The height of the element matches the height of
|
|
200
|
+
its content or the height of the parent container, whichever is
|
|
201
|
+
larger. If the element is not in a parent container, the height
|
|
202
|
+
of the element matches the height of its content.
|
|
203
|
+
- An integer specifying the height in pixels: The element has a
|
|
204
|
+
fixed height. If the content is larger than the specified
|
|
205
|
+
height, scrolling is enabled.
|
|
206
|
+
|
|
207
|
+
width : "stretch", "content", or int
|
|
208
|
+
The width of the metric element. This can be one of the following:
|
|
209
|
+
|
|
210
|
+
- ``"stretch"`` (default): The width of the element matches the
|
|
211
|
+
width of the parent container.
|
|
212
|
+
- ``"content"``: The width of the element matches the width of its
|
|
213
|
+
content, but doesn't exceed the width of the parent container.
|
|
214
|
+
- An integer specifying the width in pixels: The element has a
|
|
215
|
+
fixed width. If the specified width is greater than the width of
|
|
216
|
+
the parent container, the width of the element matches the width
|
|
217
|
+
of the parent container.
|
|
218
|
+
|
|
219
|
+
chart_data : Iterable or None
|
|
220
|
+
A sequence of numeric values to display as a sparkline chart. If
|
|
221
|
+
this is ``None`` (default), no chart is displayed. The sequence can
|
|
222
|
+
be anything supported by ``st.dataframe``, including a ``list`` or
|
|
223
|
+
``set``. If the sequence is dataframe-like, the first column will
|
|
224
|
+
be used. Each value will be cast to ``float`` internally by
|
|
225
|
+
default.
|
|
226
|
+
|
|
227
|
+
The chart uses the color of the delta indicator, which can be
|
|
228
|
+
modified using the ``delta_color`` parameter.
|
|
229
|
+
|
|
230
|
+
chart_type : "line", "bar", or "area"
|
|
231
|
+
The type of sparkline chart to display. This can be one of the
|
|
232
|
+
following:
|
|
233
|
+
|
|
234
|
+
- ``"line"`` (default): A simple sparkline.
|
|
235
|
+
- ``"area"``: A sparkline with area shading.
|
|
236
|
+
- ``"bar"``: A bar chart.
|
|
237
|
+
|
|
238
|
+
delta_arrow : "auto", "up", "down", or "off"
|
|
239
|
+
Controls the direction of the delta indicator arrow. This can be
|
|
240
|
+
one of the following strings:
|
|
241
|
+
|
|
242
|
+
- ``"auto"`` (default): The arrow direction follows the sign of
|
|
243
|
+
``delta``.
|
|
244
|
+
- ``"up"`` or ``"down"``: The arrow is forced to point in the
|
|
245
|
+
specified direction.
|
|
246
|
+
- ``"off"``: No arrow is shown, but the delta value remains
|
|
247
|
+
visible.
|
|
248
|
+
|
|
249
|
+
format : str or None
|
|
250
|
+
A format string controlling how numbers are displayed for ``value``
|
|
251
|
+
and ``delta``. The format is only applied if the value or delta is
|
|
252
|
+
numeric. If the value or delta is a string with non-numeric
|
|
253
|
+
characters, the format is ignored. The format can be one of the
|
|
254
|
+
following values:
|
|
255
|
+
|
|
256
|
+
- ``None`` (default): No formatting is applied.
|
|
257
|
+
- ``"plain"``: Show the full number without any formatting (e.g. "1234.567").
|
|
258
|
+
- ``"localized"``: Show the number in the default locale format (e.g. "1,234.567").
|
|
259
|
+
- ``"percent"``: Show the number as a percentage (e.g. "123456.70%").
|
|
260
|
+
- ``"dollar"``: Show the number as a dollar amount (e.g. "$1,234.57").
|
|
261
|
+
- ``"euro"``: Show the number as a euro amount (e.g. "€1,234.57").
|
|
262
|
+
- ``"yen"``: Show the number as a yen amount (e.g. "¥1,235").
|
|
263
|
+
- ``"accounting"``: Show the number in an accounting format (e.g. "1,234.00").
|
|
264
|
+
- ``"bytes"``: Show the number in a byte format (e.g. "1.2KB").
|
|
265
|
+
- ``"compact"``: Show the number in a compact format (e.g. "1.2K").
|
|
266
|
+
- ``"scientific"``: Show the number in scientific notation (e.g. "1.235E3").
|
|
267
|
+
- ``"engineering"``: Show the number in engineering notation (e.g. "1.235E3").
|
|
268
|
+
- printf-style format string: Format the number with a printf
|
|
269
|
+
specifier, like ``"%d"`` to show a signed integer (e.g. "1234") or
|
|
270
|
+
``"%.2f"`` to show a float with 2 decimal places. Use ``,`` for
|
|
271
|
+
thousand separators (e.g. ``"%,d"`` yields ``"1,234"``).
|
|
272
|
+
|
|
273
|
+
delta_description : str or None
|
|
274
|
+
A short description displayed next to the delta value, such as
|
|
275
|
+
"month over month" or "vs. last quarter". If this is ``None``
|
|
276
|
+
(default), no description is shown. The description is displayed
|
|
277
|
+
in a smaller, muted font style similar to ``st.caption``.
|
|
278
|
+
|
|
279
|
+
Examples
|
|
280
|
+
--------
|
|
281
|
+
**Example 1: Show a metric**
|
|
282
|
+
|
|
283
|
+
>>> import streamlit as st
|
|
284
|
+
>>>
|
|
285
|
+
>>> st.metric(label="Temperature", value="70 °F", delta="1.2 °F")
|
|
286
|
+
|
|
287
|
+
.. output::
|
|
288
|
+
https://doc-metric-example1.streamlit.app/
|
|
289
|
+
height: 210px
|
|
290
|
+
|
|
291
|
+
**Example 2: Create a row of metrics**
|
|
292
|
+
|
|
293
|
+
``st.metric`` looks especially nice in combination with ``st.columns``.
|
|
294
|
+
|
|
295
|
+
>>> import streamlit as st
|
|
296
|
+
>>>
|
|
297
|
+
>>> col1, col2, col3 = st.columns(3)
|
|
298
|
+
>>> col1.metric("Temperature", "70 °F", "1.2 °F")
|
|
299
|
+
>>> col2.metric("Wind", "9 mph", "-8%")
|
|
300
|
+
>>> col3.metric("Humidity", "86%", "4%")
|
|
301
|
+
|
|
302
|
+
.. output::
|
|
303
|
+
https://doc-metric-example2.streamlit.app/
|
|
304
|
+
height: 210px
|
|
305
|
+
|
|
306
|
+
**Example 3: Modify the delta indicator**
|
|
307
|
+
|
|
308
|
+
The delta indicator color can also be inverted or turned off.
|
|
309
|
+
|
|
310
|
+
>>> import streamlit as st
|
|
311
|
+
>>>
|
|
312
|
+
>>> st.metric(
|
|
313
|
+
... label="Gas price", value=4, delta=-0.5, delta_color="inverse"
|
|
314
|
+
... )
|
|
315
|
+
>>>
|
|
316
|
+
>>> st.metric(
|
|
317
|
+
... label="Active developers",
|
|
318
|
+
... value=123,
|
|
319
|
+
... delta=123,
|
|
320
|
+
... delta_color="off",
|
|
321
|
+
... )
|
|
322
|
+
|
|
323
|
+
.. output::
|
|
324
|
+
https://doc-metric-example3.streamlit.app/
|
|
325
|
+
height: 320px
|
|
326
|
+
|
|
327
|
+
**Example 4: Create a grid of metric cards**
|
|
328
|
+
|
|
329
|
+
Add borders to your metrics to create a dashboard look.
|
|
330
|
+
|
|
331
|
+
>>> import streamlit as st
|
|
332
|
+
>>>
|
|
333
|
+
>>> a, b = st.columns(2)
|
|
334
|
+
>>> c, d = st.columns(2)
|
|
335
|
+
>>>
|
|
336
|
+
>>> a.metric("Temperature", "30°F", "-9°F", border=True)
|
|
337
|
+
>>> b.metric("Wind", "4 mph", "2 mph", border=True)
|
|
338
|
+
>>>
|
|
339
|
+
>>> c.metric("Humidity", "77%", "5%", border=True)
|
|
340
|
+
>>> d.metric("Pressure", "30.34 inHg", "-2 inHg", border=True)
|
|
341
|
+
|
|
342
|
+
.. output::
|
|
343
|
+
https://doc-metric-example4.streamlit.app/
|
|
344
|
+
height: 350px
|
|
345
|
+
|
|
346
|
+
**Example 5: Show sparklines**
|
|
347
|
+
|
|
348
|
+
To show trends over time, add sparklines.
|
|
349
|
+
|
|
350
|
+
>>> import streamlit as st
|
|
351
|
+
>>> from numpy.random import default_rng as rng
|
|
352
|
+
>>>
|
|
353
|
+
>>> changes = list(rng(4).standard_normal(20))
|
|
354
|
+
>>> data = [sum(changes[:i]) for i in range(20)]
|
|
355
|
+
>>> delta = round(data[-1], 2)
|
|
356
|
+
>>>
|
|
357
|
+
>>> row = st.container(horizontal=True)
|
|
358
|
+
>>> with row:
|
|
359
|
+
>>> st.metric(
|
|
360
|
+
... "Line", 10, delta, chart_data=data, chart_type="line", border=True
|
|
361
|
+
... )
|
|
362
|
+
>>> st.metric(
|
|
363
|
+
... "Area", 10, delta, chart_data=data, chart_type="area", border=True
|
|
364
|
+
... )
|
|
365
|
+
>>> st.metric(
|
|
366
|
+
... "Bar", 10, delta, chart_data=data, chart_type="bar", border=True
|
|
367
|
+
... )
|
|
368
|
+
|
|
369
|
+
.. output::
|
|
370
|
+
https://doc-metric-example5.streamlit.app/
|
|
371
|
+
height: 300px
|
|
372
|
+
|
|
373
|
+
"""
|
|
374
|
+
maybe_raise_label_warnings(label, label_visibility)
|
|
375
|
+
|
|
376
|
+
metric_proto = MetricProto()
|
|
377
|
+
metric_proto.body = _parse_value(value)
|
|
378
|
+
metric_proto.label = _parse_label(label)
|
|
379
|
+
metric_proto.delta = _parse_delta(delta)
|
|
380
|
+
metric_proto.show_border = border
|
|
381
|
+
if help is not None:
|
|
382
|
+
metric_proto.help = dedent(help)
|
|
383
|
+
|
|
384
|
+
color_and_direction = _determine_delta_color_and_direction(
|
|
385
|
+
cast("DeltaColor", clean_text(delta_color)), delta
|
|
386
|
+
)
|
|
387
|
+
metric_proto.color = color_and_direction.color
|
|
388
|
+
metric_proto.direction = color_and_direction.direction
|
|
389
|
+
parsed_delta_arrow = _parse_delta_arrow(
|
|
390
|
+
cast("DeltaArrow", clean_text(delta_arrow))
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
if parsed_delta_arrow in _DELTA_ARROW_TO_PROTO:
|
|
394
|
+
metric_proto.direction = _DELTA_ARROW_TO_PROTO[parsed_delta_arrow]
|
|
395
|
+
metric_proto.label_visibility.value = get_label_visibility_proto_value(
|
|
396
|
+
label_visibility
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
if chart_data is not None:
|
|
400
|
+
prepared_data: list[float] = []
|
|
401
|
+
for val in convert_anything_to_list(chart_data):
|
|
402
|
+
try:
|
|
403
|
+
prepared_data.append(float(val))
|
|
404
|
+
except Exception as ex: # noqa: PERF203
|
|
405
|
+
raise StreamlitAPIException(
|
|
406
|
+
"Only numeric values are supported for chart data sequence. The "
|
|
407
|
+
f"value '{val}' is of type {type(val)} and "
|
|
408
|
+
"cannot be converted to float."
|
|
409
|
+
) from ex
|
|
410
|
+
if len(prepared_data) > 0:
|
|
411
|
+
metric_proto.chart_data.extend(prepared_data)
|
|
412
|
+
|
|
413
|
+
metric_proto.chart_type = _parse_chart_type(chart_type)
|
|
414
|
+
|
|
415
|
+
if format is not None:
|
|
416
|
+
metric_proto.format = format
|
|
417
|
+
|
|
418
|
+
if delta_description is not None:
|
|
419
|
+
metric_proto.delta_description = delta_description
|
|
420
|
+
|
|
421
|
+
validate_height(height, allow_content=True)
|
|
422
|
+
validate_width(width, allow_content=True)
|
|
423
|
+
layout_config = LayoutConfig(width=width, height=height)
|
|
424
|
+
|
|
425
|
+
return self.dg._enqueue("metric", metric_proto, layout_config=layout_config)
|
|
426
|
+
|
|
427
|
+
@property
|
|
428
|
+
def dg(self) -> DeltaGenerator:
|
|
429
|
+
return cast("DeltaGenerator", self)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def _parse_chart_type(
|
|
433
|
+
chart_type: Literal["line", "bar", "area"],
|
|
434
|
+
) -> MetricProto.ChartType.ValueType:
|
|
435
|
+
if chart_type == "bar":
|
|
436
|
+
return MetricProto.ChartType.BAR
|
|
437
|
+
if chart_type == "area":
|
|
438
|
+
return MetricProto.ChartType.AREA
|
|
439
|
+
# Use line as default chart:
|
|
440
|
+
return MetricProto.ChartType.LINE
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
def _parse_delta_arrow(delta_arrow: DeltaArrow) -> DeltaArrow:
|
|
444
|
+
if delta_arrow not in {"auto", "up", "down", "off"}:
|
|
445
|
+
raise StreamlitValueError("delta_arrow", ["auto", "up", "down", "off"])
|
|
446
|
+
return delta_arrow
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
def _parse_label(label: str) -> str:
|
|
450
|
+
if not isinstance(label, str):
|
|
451
|
+
raise TypeError(
|
|
452
|
+
f"'{label}' is of type {type(label)}, which is not an accepted type."
|
|
453
|
+
" label only accepts: str. Please convert the label to an accepted type."
|
|
454
|
+
)
|
|
455
|
+
return label
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
def _parse_value(value: Value) -> str:
|
|
459
|
+
if value is None:
|
|
460
|
+
return "—"
|
|
461
|
+
if isinstance(value, str):
|
|
462
|
+
return value
|
|
463
|
+
return from_number(value)
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
def _parse_delta(delta: Delta) -> str:
|
|
467
|
+
if delta is None or delta == "":
|
|
468
|
+
return ""
|
|
469
|
+
if isinstance(delta, str):
|
|
470
|
+
return dedent(delta)
|
|
471
|
+
return from_number(delta)
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def _determine_delta_color_and_direction(
|
|
475
|
+
delta_color: DeltaColor,
|
|
476
|
+
delta: Delta,
|
|
477
|
+
) -> MetricColorAndDirection:
|
|
478
|
+
if delta_color not in _VALID_DELTA_COLORS:
|
|
479
|
+
raise StreamlitAPIException(
|
|
480
|
+
f"'{delta_color}' is not an accepted value. delta_color only accepts: "
|
|
481
|
+
"'normal', 'inverse', 'off', or a color name ('red', 'orange', 'yellow', "
|
|
482
|
+
"'green', 'blue', 'violet', 'gray'/'grey', 'primary')"
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
if delta is None or delta == "":
|
|
486
|
+
return MetricColorAndDirection(
|
|
487
|
+
color=MetricProto.MetricColor.GRAY,
|
|
488
|
+
direction=MetricProto.MetricDirection.NONE,
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
# Determine direction based on delta sign
|
|
492
|
+
cd_direction = (
|
|
493
|
+
MetricProto.MetricDirection.DOWN
|
|
494
|
+
if _is_negative_delta(delta)
|
|
495
|
+
else MetricProto.MetricDirection.UP
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
# Handle explicit color names
|
|
499
|
+
if delta_color in _DELTA_COLOR_TO_PROTO:
|
|
500
|
+
return MetricColorAndDirection(
|
|
501
|
+
color=_DELTA_COLOR_TO_PROTO[delta_color],
|
|
502
|
+
direction=cd_direction,
|
|
503
|
+
)
|
|
504
|
+
|
|
505
|
+
# Handle "normal", "inverse", "off" modes
|
|
506
|
+
is_negative = cd_direction == MetricProto.MetricDirection.DOWN
|
|
507
|
+
if delta_color == "normal":
|
|
508
|
+
cd_color = (
|
|
509
|
+
MetricProto.MetricColor.RED
|
|
510
|
+
if is_negative
|
|
511
|
+
else MetricProto.MetricColor.GREEN
|
|
512
|
+
)
|
|
513
|
+
elif delta_color == "inverse":
|
|
514
|
+
cd_color = (
|
|
515
|
+
MetricProto.MetricColor.GREEN
|
|
516
|
+
if is_negative
|
|
517
|
+
else MetricProto.MetricColor.RED
|
|
518
|
+
)
|
|
519
|
+
else: # "off"
|
|
520
|
+
cd_color = MetricProto.MetricColor.GRAY
|
|
521
|
+
|
|
522
|
+
return MetricColorAndDirection(
|
|
523
|
+
color=cd_color,
|
|
524
|
+
direction=cd_direction,
|
|
525
|
+
)
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
def _is_negative_delta(delta: Delta) -> bool:
|
|
529
|
+
return dedent(str(delta)).startswith("-")
|