This is an automated email from the ASF dual-hosted git repository.
aminghadersohi pushed a change to branch
sc-121713-column-suggestions-placeholder
in repository https://gitbox.apache.org/repos/asf/superset.git
from 96e506713f4 fix(mcp): rank hinted saved metrics in error context and
name metrics in saved-metric errors
add 4ae8fe71225 fix: size 'Drill to detail' table header correctly (#44807)
add 2c72d4d4fee fix(mcp): use DEFAULT_PAGE_SIZE constant in list_charts
test (#44786)
add 446853004a4 fix(mcp): keep a bubble chart's colors and row limit
across updates (#44618)
add 217e4c0223f fix(frontend): use html2canvas for chart image export on
Safari (#44529)
add c82f97b69d6 chore(deps): bump deck.gl and luma.gl from 9.2.5 to 9.4.0
in /superset-frontend (#42608)
add abdf2e6c702 fix(home): redirect users without an ID before rendering
(#44456)
add 3f6d4cd6896 chore(deps-dev): update google-cloud-storage requirement
from >=1.37 to >=3.14.1 (#44693)
add 6a832cb2102 fix(mcp): enforce dashboard filter scope on dataset, SQL
and chart tool calls (#44800)
add e7702020344 fix(postprocessing): preserve NULL index values through
pivot() (#43547) (#43693)
add f7badeb095b fix(mcp): execute_sql request limit caps, never raises, an
explicit SQL LIMIT (#44604)
add db56168a861 ci: require babel-extract to pass before merging master
(#44543)
add 342a8f1e4e0 fix(mcp): report a chart's live dataset id and name
(#44681)
add 21b937b59d7 fix(retention): skip models without purge policies before
scanning (#44874)
add 6d97cde59a6 fix(semantic-layers): export/import semantic-view charts
by typed reference (#44396)
add b94f88ffbb4 fix(semantic-layer): require explicit member identity
reselection (#44370)
add 9c7c96fe057 fix(logging): register LogRestApi only once (#44732)
add edc91b86e5c chore(deps-dev): bump baseline-browser-mapping from
2.11.25 to 2.11.26 in /superset-frontend (#44890)
add 338e640df93 chore(deps): bump dompurify from 3.4.15 to 3.4.16 in
/superset-frontend (#44889)
add 4a199486599 chore(deps): bump dom-to-image-more from 3.10.2 to 3.11.0
in /superset-frontend (#44888)
add 6559b483f28 chore(deps): bump maplibre-gl from 6.8.0 to 6.11.2 in
/superset-frontend (#44887)
add dfccc2e1e9c chore(deps-dev): bump minimizer-webpack-plugin from 5.11.0
to 5.12.0 in /superset-frontend (#44886)
add c43770e12da chore(deps-dev): bump webpack-sources from 3.5.1 to 3.5.3
in /superset-frontend (#44885)
add 95faf3a6a04 chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to
7.0.2003 in /docs (#44883)
add 27c9213cca2 chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to
7.0.2003 in /superset-websocket (#44882)
add 25956d6c448 chore(superset-ui-chart-controls): forward-compat fixes
for TypeScript 6.0 (#44877)
add ba3500e0e9a feat(export/import): add annotation layer export/import
support for charts and dashboards (#43232)
add 1b0a37cf223 fix(users): stop update_me setting self-referential
changed_by_fk (#44866)
add 7bb29649416 chore(deps): bump dawidd6/action-download-artifact from 24
to 25 (#44884)
add 005edd74234 chore(build): de-vendor `helm/chart-testing-action` GHA
(#44722)
add 10d06859b83 fix(ci): floor pyfakefs at 5.7.4 to fix Python 3.13
pytest-cov crash (#44853)
add 0fdfd6660e0 docs(databases): add ClickHouse Managed Postgres (#44870)
add e0483898728 test(explore): cover time range frames, comparison labels,
and metric popover state (#44847)
add c1bb129c218 fix(change-detector): classify changed files by language,
not directory (#44895)
add e606cadff7c chore(mcp): fix malformed tool and prompt docstrings
(#44572)
add ef64bacbaa0 feat(chart): cross-filter by x-axis label on charts with
dimensions (#44869)
add b0ac9ef61f6 test(explore): cover color scheme selection, BigNumber
subheader/trendline, and WorldMap bubbles (#44846)
add 8d25777b995 test(plugin-chart-table): cover server-side sort, query
mode controls, and sort ordering (#44845)
add 8849542bda1 test(explore): cover viz switch and control dependency
logic (#44842)
add 03b61cc2d89 test(explore): add fetchTopNValues unit tests (#44841)
add e32493c9d93 test(explore): add saveModalReducer unit tests (#44839)
add f6155b9e9ea fix(dashboard): show the configured refresh warning
alongside the limit error (#44836)
add 240a4267f85 test(explore): add datasourcesReducer unit tests (#44840)
add bc3698b5d64 test(explore): port remaining deleted Cypress explore
specs to RTL (#44838)
add 2872d16ee65 test(frontend): await the userEvent calls that needed
restructuring (#44799)
add 7fea33761b8 fix(chart): wrap raw pandas TypeError/DataError from
post-processing as QueryObjectValidationError (#44463)
add 3f7d01aaafc fix(reports): catch TypeError when validating non-string
extra.dashboard.anchor (#44404)
add ece8b8bd7b2 fix(import): avoid UnboundLocalError when load_yaml fails
during load_configs (SC-121288) (#44390)
add 47ba8fc8014 fix(api): return 401 not 500 for auth errors in
CurrentUserRestApi (SC-120417) (#44213)
add ef2c05c0900 fix(security): guard is_guest_user against
NoAuthorizationError on unauthenticated error paths (#43826)
add f9d67e1a118 fix: downgrade deprecated query_object field warnings to
info (#43520)
add 396030d87e0 docs: remove stale Selenium references after
Playwright-only switch (#44243)
add 3fa06db85b6 fix(mcp): include feature_availability in
instance://metadata resource (#44891)
add af9ec3ead2f Merge remote-tracking branch 'origin/master' into
sc-121713-column-suggestions-placeholder
add dd796c7319b fix(import): drop duplicate config annotation in
load_configs
No new revisions were added by this update.
Summary of changes:
.asf.yaml | 1 +
.github/actions/change-detector/action.yml | 5 +
.github/actions/chart-testing-action | 1 -
.github/workflows/superset-docs-deploy.yml | 4 +-
.github/workflows/superset-docs-verify.yml | 2 +-
.github/workflows/superset-helm-lint-test.yml | 19 +-
.github/workflows/superset-translations.yml | 2 +
.gitmodules | 3 -
UPDATING.md | 94 ++
docs/admin_docs/configuration/alerts-reports.mdx | 57 +-
docs/admin_docs/configuration/cache.mdx | 37 +-
.../configuration/dashboard-performance.mdx | 4 +-
.../importing-exporting-datasources.mdx | 32 +
docs/admin_docs/configuration/mcp-server.mdx | 134 ++
.../contributing/development-setup.md | 4 +-
docs/developer_docs/testing/backend-testing.md | 3 +-
docs/docs/quickstart.mdx | 3 +
docs/docs/using-superset/recently-archived.mdx | 10 +
.../using-superset/semantic-member-selections.mdx | 62 +
docs/package.json | 2 +-
docs/src/data/databases.json | 19 +
docs/static/resources/openapi.json | 23 +-
docs/yarn.lock | 78 +-
pyproject.toml | 14 +-
requirements/development.txt | 2 +-
scripts/change_detector.py | 60 +
superset-core/src/superset_core/queries/types.py | 3 +
.../src/superset_core/semantic_layers/types.py | 1 +
.../src/superset_core/semantic_layers/view.py | 14 +
superset-frontend/jest.config.js | 12 +-
superset-frontend/package-lock.json | 953 ++++++------
superset-frontend/package.json | 63 +-
.../src/sections/sections.tsx | 7 +
.../superset-ui-chart-controls/src/types.ts | 1 +
.../src/utils/getColorFormatters.ts | 84 +-
.../src/components/Table/VirtualTable.test.tsx | 83 ++
.../src/components/Table/VirtualTable.tsx | 20 +-
.../superset-ui-core/src/query/extractExtras.ts | 22 +
.../packages/superset-ui-core/src/query/index.ts | 2 +
.../src/query/semanticSelection.ts} | 35 +-
.../superset-ui-core/src/query/types/Dashboard.ts | 1 +
.../superset-ui-core/src/query/types/Query.ts | 1 +
.../src/query/types/QueryFormData.ts | 12 +-
.../test/query/extractExtras.test.ts | 62 +
.../src/BigNumber/BigNumberViz.test.tsx | 57 +
.../BigNumberWithTrendline/transformProps.test.ts | 72 +
.../src/Timeseries/EchartsTimeseries.test.tsx | 116 +-
.../src/Timeseries/EchartsTimeseries.tsx | 29 +-
.../src/Timeseries/transformProps.ts | 7 +-
.../src/Timeseries/transformers.ts | 6 +-
.../plugins/plugin-chart-echarts/src/constants.ts | 4 +
.../test/Timeseries/EchartsTimeseries.test.tsx | 13 +-
.../test/Timeseries/transformProps.test.ts | 31 +
.../test/Timeseries/transformers.test.ts | 17 +
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../src/MapLibre.tsx | 62 +-
.../test/MapLibre.test.tsx | 31 +
.../plugin-chart-table/test/TableChart.test.tsx | 88 ++
.../plugin-chart-table/test/buildQuery.test.ts | 42 +
.../plugin-chart-table/test/controlPanel.test.ts | 55 +
.../plugin-chart-world-map/test/WorldMap.test.ts | 14 +
.../plugins/preset-chart-deckgl/package.json | 27 +-
.../src/DeckGLContainer.test.tsx | 95 +-
.../preset-chart-deckgl/src/DeckGLContainer.tsx | 17 +-
.../src/components/DeckGLOverlayMapLibre.test.tsx | 80 ++
.../src/components/DeckGLOverlayMapLibre.tsx | 8 +-
.../src/layers/Contour/Contour.tsx | 2 +-
.../SqlEditorTabHeader/SqlEditorTabHeader.test.tsx | 28 +-
.../src/components/Chart/ChartRenderer.test.tsx | 52 +-
.../src/components/Chart/ChartRenderer.tsx | 23 +-
.../RowCountLabel/RowCountLabel.test.tsx | 16 +-
.../components/RefreshIntervalModal.test.tsx | 37 +
.../dashboard/components/RefreshIntervalModal.tsx | 2 +-
.../FilterBar/FilterControls/FilterValue.test.tsx | 42 +-
.../FilterBar/FilterControls/FilterValue.tsx | 70 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 147 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 103 +-
.../transformers/buildTarget.test.ts | 44 +-
.../FiltersConfigModal/transformers/buildTarget.ts | 37 +-
.../transformers/customizationTransformer.ts | 10 +-
.../transformers/filterTransformer.ts | 10 +-
.../nativeFilters/FiltersConfigModal/types.ts | 2 +
.../components/nativeFilters/utils.test.ts | 27 +
.../dashboard/components/nativeFilters/utils.ts | 13 +
.../util/charts/getFormDataWithExtraFilters.ts | 163 ++-
.../util/getFormDataWithExtraFilters.test.ts | 412 +++++-
superset-frontend/src/dataMask/reducer.test.ts | 58 +
superset-frontend/src/dataMask/reducer.ts | 18 +
.../src/explore/actions/exploreActions.ts | 10 +
.../components/ControlPanelsContainer.test.tsx | 265 +++-
.../explore/components/ControlPanelsContainer.tsx | 44 +-
.../controls/AnnotationLayerControl/index.test.tsx | 84 +-
.../ColorSchemeControl/ColorSchemeControl.test.tsx | 76 +
.../controls/ComparisonRangeLabel.test.tsx | 252 ++++
.../DateFilterControl/tests/CommonFrame.test.tsx | 72 +
.../tests/DateFilterLabel.test.tsx | 193 +++
.../DateFilterControl/tests/DateLabel.test.tsx | 73 +
.../DndMetricSelect.test.tsx | 90 ++
.../AdhocFilterControl/AdhocFilterControl.test.tsx | 102 +-
.../AdhocFilterEditPopover.test.tsx | 55 +-
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 17 +
.../index.tsx | 27 +-
.../MatrixifyControl/utils/fetchTopNValues.test.ts | 165 +++
.../controls/MatrixifyDimensionControl.test.tsx | 139 +-
.../controls/MatrixifyDimensionControl.tsx | 26 +-
.../AdhocMetricPopoverTrigger.test.tsx | 278 ++++
.../components/controls/SelectControl.test.tsx | 55 +
.../src/explore/controlPanels/sections.tsx | 7 +
.../controlUtils/getSectionsToRender.test.ts | 179 +++
.../explore/reducers/datasourcesReducer.test.ts | 171 +++
.../src/explore/reducers/exploreReducer.test.ts | 269 +++-
.../src/explore/reducers/exploreReducer.ts | 29 +-
.../src/explore/reducers/saveModalReducer.test.ts | 184 +++
.../datasets/AddDataset/Footer/Footer.test.tsx | 5 +-
superset-frontend/src/pages/Home/Home.test.tsx | 47 +-
superset-frontend/src/pages/Home/index.tsx | 20 +-
.../src/utils/downloadAsImage.test.ts | 276 ++++
superset-frontend/src/utils/downloadAsImage.tsx | 113 +-
.../src/utils/semanticViewStructure.test.ts | 13 +
.../src/utils/semanticViewStructure.ts | 15 +-
superset-websocket/package-lock.json | 56 +-
superset-websocket/package.json | 2 +-
superset/annotation_layers/schemas.py | 21 +
superset/charts/api.py | 3 +
superset/charts/schemas.py | 21 +-
superset/commands/annotation_layer/exceptions.py | 5 +
superset/commands/annotation_layer/export.py | 109 ++
.../annotation_layer/importers}/__init__.py | 0
.../importers/dispatcher.py | 20 +-
.../annotation_layer/importers/v1/__init__.py | 54 +
.../annotation_layer/importers/v1/utils.py | 73 +
superset/commands/chart/export.py | 251 +++-
superset/commands/chart/importers/v1/__init__.py | 99 +-
superset/commands/chart/importers/v1/utils.py | 381 ++++-
superset/commands/dashboard/export.py | 8 +-
superset/commands/dashboard/export_example.py | 31 +
.../commands/dashboard/importers/v1/__init__.py | 89 +-
superset/commands/export/assets.py | 10 +-
superset/commands/importers/v1/__init__.py | 10 +-
superset/commands/importers/v1/assets.py | 74 +-
superset/commands/importers/v1/examples.py | 19 +
superset/commands/importers/v1/utils.py | 7 +-
superset/commands/report/base.py | 10 +-
superset/common/query_context_processor.py | 14 +-
superset/common/query_object.py | 49 +-
superset/common/tabular_query.py | 8 +-
superset/dashboards/api.py | 13 +-
superset/datasource/api.py | 52 +-
superset/datasource/schemas.py | 9 +
superset/db_engine_specs/bigquery.py | 35 +-
superset/db_engine_specs/postgres.py | 34 +
superset/initialization/__init__.py | 1 -
superset/mcp_service/app.py | 2 +
superset/mcp_service/auth.py | 22 +-
superset/mcp_service/caching.py | 37 +-
superset/mcp_service/chart/plugins/bubble.py | 2 +-
.../chart/prompts/create_chart_guided.py | 4 +-
superset/mcp_service/chart/schemas.py | 61 +-
superset/mcp_service/chart/tool/get_chart_info.py | 18 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 5 +-
superset/mcp_service/chart/tool/list_charts.py | 118 +-
superset/mcp_service/common/schema_discovery.py | 2 +-
superset/mcp_service/dashboard/schemas.py | 29 +-
superset/mcp_service/dashboard_scope.py | 1365 ++++++++++++++++++
superset/mcp_service/dashboard_scope_sql.py | 516 +++++++
superset/mcp_service/privacy.py | 1 +
superset/mcp_service/semantic_layer/schemas.py | 9 +
.../semantic_layer/tool/get_compatible_metrics.py | 3 +
.../mcp_service/semantic_layer/tool/get_table.py | 51 +-
.../semantic_layer/tool/list_metrics.py | 3 +
superset/mcp_service/sql_lab/schemas.py | 10 +-
superset/mcp_service/sql_lab/tool/execute_sql.py | 1 +
superset/mcp_service/system/prompts/quickstart.py | 4 +-
.../system/resources/instance_metadata.py | 37 +-
superset/mcp_service/system/system_utils.py | 33 +-
.../mcp_service/system/tool/get_instance_info.py | 38 +-
superset/mcp_service/system/tool/get_schema.py | 7 +-
superset/mcp_service/system/tool/health_check.py | 5 +-
superset/migrations/shared/utils.py | 2 +-
..._add_uuid_to_annotation_layer_and_annotation.py | 144 ++
superset/models/annotations.py | 19 +-
superset/models/core.py | 16 +-
superset/models/helpers.py | 2 +
superset/result_set.py | 3 +
superset/security/manager.py | 25 +-
superset/semantic_layers/api.py | 3 +
.../semantic_layers/bundle_schemas.py | 24 +-
superset/semantic_layers/import_export.py | 240 ++++
superset/semantic_layers/mapper.py | 6 +
superset/semantic_layers/models.py | 3 +
superset/sql/execution/celery_task.py | 1 +
superset/sql/execution/executor.py | 109 +-
superset/sql/parse.py | 101 +-
superset/superset_typing.py | 11 +
superset/tasks/deletion_retention.py | 55 +-
superset/translations/messages.pot | 68 +
superset/utils/core.py | 36 +
superset/utils/dict_import_export.py | 7 +
superset/utils/pandas_postprocessing/pivot.py | 51 +-
superset/utils/rls.py | 4 +-
superset/views/users/api.py | 22 +-
.../annotation_layers/commands_tests.py | 750 ++++++++++
tests/integration_tests/charts/commands_tests.py | 1515 ++++++++++++++++++++
tests/integration_tests/commands_test.py | 58 +
.../integration_tests/dashboards/commands_tests.py | 585 ++++++++
tests/integration_tests/fixtures/importexport.py | 104 ++
.../charts/commands/importers/v1/import_test.py | 32 +-
.../charts/commands/importers/v1/utils_test.py | 28 +-
.../commands/chart/semantic_export_test.py | 127 ++
.../dashboard/export_example_semantic_test.py | 175 +++
tests/unit_tests/commands/export_test.py | 51 +
.../commands/importers/v1/assets_test.py | 4 +-
.../unit_tests/commands/importers/v1/utils_test.py | 34 +
tests/unit_tests/commands/report/create_test.py | 36 +
.../common/test_query_context_processor.py | 33 +
tests/unit_tests/connectors/sqla/utils_test.py | 34 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 87 +-
tests/unit_tests/initialization/init_views_test.py | 113 ++
.../mcp_service/chart/test_chart_utils.py | 55 +
.../chart/test_live_chart_datasource.py | 709 +++++++++
.../mcp_service/chart/tool/test_list_charts.py | 4 +-
.../dashboard/test_dashboard_schemas.py | 18 +
.../tool/test_get_compatible_metrics.py | 14 +-
.../semantic_layer/tool/test_get_table.py | 39 +
.../semantic_layer/tool/test_list_metrics.py | 10 +-
.../mcp_service/sql_lab/tool/test_execute_sql.py | 22 +-
.../system/resources/test_instance_metadata.py | 144 ++
.../system/tool/test_get_current_user.py | 6 +-
.../unit_tests/mcp_service/test_dashboard_scope.py | 1502 +++++++++++++++++++
.../mcp_service/test_dashboard_scope_sql.py | 674 +++++++++
.../unit_tests/mcp_service/test_mcp_docstrings.py | 128 ++
.../unit_tests/mcp_service/test_tool_inventory.py | 4 +-
tests/unit_tests/mcp_service/test_worker.py | 6 +-
tests/unit_tests/models/core_test.py | 62 +
tests/unit_tests/models/helpers_test.py | 51 +
.../unit_tests/pandas_postprocessing/test_pivot.py | 339 +++++
tests/unit_tests/scripts/change_detector_test.py | 77 +
tests/unit_tests/security/manager_test.py | 27 +
.../test_superset_user_api_subject_sync.py | 23 +
tests/unit_tests/semantic_layers/api_test.py | 10 +-
.../semantic_layers/import_export_test.py | 921 ++++++++++++
tests/unit_tests/semantic_layers/mapper_test.py | 5 +
tests/unit_tests/semantic_layers/models_test.py | 2 +
.../semantic_layers/selection_identity_test.py | 293 ++++
.../semantic_layers/values_endpoint_test.py | 21 +-
tests/unit_tests/sql/execution/conftest.py | 3 +
tests/unit_tests/sql/execution/test_celery_task.py | 2 +
tests/unit_tests/sql/execution/test_executor.py | 850 ++++++++++-
tests/unit_tests/sql/parse_tests.py | 107 ++
tests/unit_tests/tasks/test_deletion_retention.py | 171 ++-
tests/unit_tests/views/test_current_user_api.py | 23 +
.../views/test_current_user_auth_errors.py | 122 ++
252 files changed, 21521 insertions(+), 1183 deletions(-)
delete mode 160000 .github/actions/chart-testing-action
create mode 100644 docs/docs/using-superset/semantic-member-selections.mdx
copy superset-frontend/{src/views/ScrollToTop.tsx =>
packages/superset-ui-core/src/query/semanticSelection.ts} (50%)
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/components/DeckGLOverlayMapLibre.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ComparisonRangeLabel.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/DateFilterControl/tests/CommonFrame.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/DateFilterControl/tests/DateLabel.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/MatrixifyControl/utils/fetchTopNValues.test.ts
create mode 100644
superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricPopoverTrigger.test.tsx
create mode 100644
superset-frontend/src/explore/controlUtils/getSectionsToRender.test.ts
create mode 100644
superset-frontend/src/explore/reducers/datasourcesReducer.test.ts
create mode 100644
superset-frontend/src/explore/reducers/saveModalReducer.test.ts
create mode 100644 superset/commands/annotation_layer/export.py
copy {scripts => superset/commands/annotation_layer/importers}/__init__.py
(100%)
copy superset/commands/{chart => annotation_layer}/importers/dispatcher.py
(82%)
create mode 100644 superset/commands/annotation_layer/importers/v1/__init__.py
create mode 100644 superset/commands/annotation_layer/importers/v1/utils.py
create mode 100644 superset/mcp_service/dashboard_scope.py
create mode 100644 superset/mcp_service/dashboard_scope_sql.py
create mode 100644
superset/migrations/versions/2026-08-17_18-38_884a2115ebd3_add_uuid_to_annotation_layer_and_annotation.py
copy tests/unit_tests/utils/db.py =>
superset/semantic_layers/bundle_schemas.py (56%)
create mode 100644 superset/semantic_layers/import_export.py
create mode 100644 tests/integration_tests/annotation_layers/commands_tests.py
create mode 100644 tests/unit_tests/commands/chart/semantic_export_test.py
create mode 100644
tests/unit_tests/commands/dashboard/export_example_semantic_test.py
create mode 100644 tests/unit_tests/initialization/init_views_test.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_live_chart_datasource.py
create mode 100644
tests/unit_tests/mcp_service/system/resources/test_instance_metadata.py
create mode 100644 tests/unit_tests/mcp_service/test_dashboard_scope.py
create mode 100644 tests/unit_tests/mcp_service/test_dashboard_scope_sql.py
create mode 100644 tests/unit_tests/mcp_service/test_mcp_docstrings.py
create mode 100644 tests/unit_tests/semantic_layers/import_export_test.py
create mode 100644 tests/unit_tests/semantic_layers/selection_identity_test.py
create mode 100644 tests/unit_tests/views/test_current_user_auth_errors.py