This is an automated email from the ASF dual-hosted git repository.
hughhhh pushed a change to branch hughhhh/pfm-6-explore-indicator
in repository https://gitbox.apache.org/repos/asf/superset.git
from ad1c88876c6 Merge branch 'hughhhh/pfm-5-editor-ui' into
hughhhh/pfm-6-explore-indicator
add ee39954adb6 fix(oauth2): refresh a token rejected when a connection
opens (#44765)
add e5ec22ab3e9 feat(table): add multi-level column header groups (#43938)
add a12d1b8e127 fix(mcp): enforce tool deadlines without blocking the
server (#44581)
add 0a0a1974c50 test(playwright): select existing dashboards without
creating duplicates (#44856)
add 33292f249da feat(mcp): support tab-scoped dashboard layouts (#44797)
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 dbdc586ad2d Merge branch 'master' into hughhhh/pfm-6-explore-indicator
No new revisions were added by this update.
Summary of changes:
.asf.yaml | 1 +
.github/workflows/superset-translations.yml | 2 +
UPDATING.md | 94 ++
.../importing-exporting-datasources.mdx | 32 +
docs/admin_docs/configuration/mcp-server.mdx | 238 ++++
docs/developer_docs/api.mdx | 5 +
docs/docs/quickstart.mdx | 3 +
.../creating-your-first-dashboard.mdx | 20 +
docs/docs/using-superset/recently-archived.mdx | 10 +
.../using-superset/semantic-member-selections.mdx | 62 +
docs/package.json | 2 +-
docs/static/resources/openapi.json | 23 +-
docs/yarn.lock | 78 +-
pyproject.toml | 2 +-
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 | 2 +
.../src/utils/headerGroups.test.ts | 1065 ++++++++++++++
.../src/utils/headerGroups.ts | 903 ++++++++++++
.../superset-ui-chart-controls/src/utils/index.ts | 1 +
.../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 +
.../playwright/components/core/Select.ts | 8 +-
.../playwright/components/modals/SaveChartModal.ts | 32 +-
.../explore/cross-referenced-dashboards.spec.ts | 23 +-
.../playwright/tests/explore/explore-save.spec.ts | 6 +-
.../tests/mobile/mobile-dashboard.spec.ts | 49 +-
.../src/AgGridTable/components/CustomHeader.tsx | 3 +-
.../src/AgGridTable/index.tsx | 118 +-
.../src/AgGridTableChart.tsx | 7 +-
.../src/controlPanel.tsx | 33 +-
.../src/styles/index.tsx | 28 +
.../src/transformProps.ts | 24 +-
.../plugin-chart-ag-grid-table/src/types.ts | 3 +
.../src/utils/formatValue.ts | 3 +-
.../src/utils/getCellStyle.ts | 8 +-
.../src/utils/mainComparison.ts} | 30 +-
.../src/utils/useColDefs.ts | 23 +-
.../test/AgGridTableChart.test.tsx | 175 +++
.../test/controlPanel.test.ts | 107 +-
.../test/controlPanel.test.tsx | 32 +-
.../test/transformProps.test.ts | 198 ++-
.../test/utils/getCellStyle.test.ts | 15 +
.../test/utils/mainComparison.test.ts | 43 +
.../test/utils/useColDefs.test.ts | 40 +
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../src/MapLibre.tsx | 62 +-
.../test/MapLibre.test.tsx | 31 +
.../plugin-chart-table/src/DataTable/DataTable.tsx | 11 +-
.../plugins/plugin-chart-table/src/Styles.tsx | 5 +
.../plugins/plugin-chart-table/src/TableChart.tsx | 210 ++-
.../plugin-chart-table/src/controlPanel.tsx | 38 +-
.../plugin-chart-table/src/transformProps.ts | 41 +-
.../plugins/plugin-chart-table/src/types.ts | 5 +
.../plugin-chart-table/src/utils/headerGroups.ts} | 20 +-
.../test/DataTable/DataTable.test.tsx | 64 +-
.../plugin-chart-table/test/TableChart.test.tsx | 326 +++++
.../plugin-chart-table/test/controlPanel.test.ts | 144 +-
.../plugin-chart-table/test/controlPanel.test.tsx | 32 +-
.../plugin-chart-table/test/headerGroups.test.ts | 301 ++++
.../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 +-
.../src/components/Chart/ChartRenderer.test.tsx | 52 +-
.../src/components/Chart/ChartRenderer.tsx | 23 +-
.../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 +
.../src/explore/components/Control.test.tsx | 36 +-
.../src/explore/components/Control.tsx | 3 +-
.../components/ControlPanelsContainer.test.tsx | 274 +++-
.../explore/components/ControlPanelsContainer.tsx | 112 +-
.../ColumnConfigControl.test.tsx | 86 ++
.../ColumnConfigControl/ColumnConfigControl.tsx | 24 +-
.../controls/ColumnConfigControl/constants.tsx | 3 +-
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 17 +
.../index.tsx | 27 +-
.../HeaderGroupsControl/HeaderGroupEditor.tsx | 567 ++++++++
.../HeaderGroupsControl.test.tsx | 906 ++++++++++++
.../HeaderGroupsControl/HeaderGroupsControl.tsx | 289 ++++
.../controls/HeaderGroupsControl/index.ts} | 12 +-
.../controls/HeaderGroupsControl/types.ts} | 42 +-
.../controls/HeaderGroupsControl/utils.test.ts | 388 +++++
.../controls/HeaderGroupsControl/utils.ts | 215 +++
.../controls/MatrixifyDimensionControl.test.tsx | 139 +-
.../controls/MatrixifyDimensionControl.tsx | 26 +-
.../src/explore/components/controls/index.ts | 2 +
.../src/explore/controlPanels/sections.tsx | 7 +
.../src/explore/reducers/exploreReducer.test.ts | 52 +
.../src/explore/reducers/exploreReducer.ts | 29 +-
superset-frontend/src/pages/Home/Home.test.tsx | 45 +-
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/charts/api.py | 3 +
superset/charts/schemas.py | 21 +-
superset/commands/chart/export.py | 6 +-
superset/commands/chart/importers/v1/__init__.py | 29 +-
superset/commands/dashboard/export.py | 3 +
superset/commands/dashboard/export_example.py | 31 +
.../commands/dashboard/importers/v1/__init__.py | 26 +-
superset/commands/importers/v1/assets.py | 32 +-
superset/commands/importers/v1/examples.py | 19 +
superset/common/query_object.py | 37 +-
superset/common/tabular_query.py | 8 +-
superset/core/mcp/core_mcp_injection.py | 24 +-
superset/dashboards/api.py | 13 +-
superset/datasource/api.py | 52 +-
superset/datasource/schemas.py | 9 +
superset/db_engine_specs/base.py | 6 +
superset/db_engine_specs/bigquery.py | 35 +-
superset/db_engine_specs/trino.py | 18 +
superset/initialization/__init__.py | 1 -
superset/mcp_service/app.py | 2 +
superset/mcp_service/auth.py | 105 +-
superset/mcp_service/caching.py | 37 +-
superset/mcp_service/chart/plugins/bubble.py | 2 +-
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/composite_token_verifier.py | 26 +-
superset/mcp_service/dashboard/schemas.py | 132 +-
.../dashboard/tool/get_dashboard_layout.py | 161 ++-
superset/mcp_service/dashboard_scope.py | 1365 ++++++++++++++++++
superset/mcp_service/dashboard_scope_sql.py | 516 +++++++
superset/mcp_service/mcp_config.py | 25 +
superset/mcp_service/middleware.py | 180 ++-
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/server.py | 36 +-
superset/mcp_service/sql_lab/schemas.py | 10 +-
superset/mcp_service/sql_lab/tool/execute_sql.py | 1 +
superset/mcp_service/utils/response_size_utils.py | 176 +++
superset/mcp_service/worker.py | 897 ++++++++++++
.../migrations/shared/migrate_viz/processors.py | 6 +-
superset/models/core.py | 220 ++-
superset/result_set.py | 3 +
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/cancellation.py | 170 +++
superset/sql/execution/celery_task.py | 1 +
superset/sql/execution/executor.py | 134 +-
superset/sql/parse.py | 101 +-
superset/superset_typing.py | 11 +
superset/tasks/deletion_retention.py | 55 +-
superset/tasks/query_cancel.py | 9 +-
superset/translations/ar/LC_MESSAGES/messages.po | 123 +-
superset/translations/ca/LC_MESSAGES/messages.po | 123 +-
superset/translations/cs/LC_MESSAGES/messages.po | 123 +-
superset/translations/de/LC_MESSAGES/messages.po | 123 +-
superset/translations/en/LC_MESSAGES/messages.po | 123 +-
superset/translations/es/LC_MESSAGES/messages.po | 123 +-
superset/translations/fa/LC_MESSAGES/messages.po | 123 +-
superset/translations/fi/LC_MESSAGES/messages.po | 123 +-
superset/translations/fr/LC_MESSAGES/messages.po | 123 +-
superset/translations/it/LC_MESSAGES/messages.po | 123 +-
superset/translations/ja/LC_MESSAGES/messages.po | 123 +-
superset/translations/ko/LC_MESSAGES/messages.po | 123 +-
superset/translations/lv/LC_MESSAGES/messages.po | 123 +-
superset/translations/messages.pot | 103 +-
superset/translations/mi/LC_MESSAGES/messages.po | 123 +-
superset/translations/nl/LC_MESSAGES/messages.po | 123 +-
superset/translations/pl/LC_MESSAGES/messages.po | 123 +-
superset/translations/pt/LC_MESSAGES/messages.po | 123 +-
.../translations/pt_BR/LC_MESSAGES/messages.po | 123 +-
superset/translations/ro/LC_MESSAGES/messages.po | 123 +-
superset/translations/ru/LC_MESSAGES/messages.po | 123 +-
superset/translations/sk/LC_MESSAGES/messages.po | 123 +-
superset/translations/sl/LC_MESSAGES/messages.po | 123 +-
superset/translations/sr/LC_MESSAGES/messages.po | 123 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 123 +-
superset/translations/ta/LC_MESSAGES/messages.po | 123 +-
superset/translations/th/LC_MESSAGES/messages.po | 123 +-
superset/translations/tr/LC_MESSAGES/messages.po | 123 +-
superset/translations/uk/LC_MESSAGES/messages.po | 123 +-
superset/translations/zh/LC_MESSAGES/messages.po | 123 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 123 +-
superset/utils/oauth2.py | 136 +-
superset/utils/pandas_postprocessing/pivot.py | 51 +-
superset/utils/rls.py | 4 +-
.../commands/chart/semantic_export_test.py | 127 ++
.../dashboard/export_example_semantic_test.py | 175 +++
tests/unit_tests/conftest.py | 13 +-
tests/unit_tests/connectors/sqla/utils_test.py | 34 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 87 +-
tests/unit_tests/db_engine_specs/test_trino.py | 17 +
tests/unit_tests/initialization/init_views_test.py | 113 ++
.../mcp_service/catalog/tool/test_get_catalog.py | 13 +
.../mcp_service/chart/test_chart_examples.py | 3 +-
.../mcp_service/chart/test_chart_utils.py | 55 +
.../mcp_service/chart/test_gantt_chart.py | 21 +-
.../mcp_service/chart/test_gauge_chart.py | 3 +-
.../chart/test_live_chart_datasource.py | 709 +++++++++
.../mcp_service/chart/tool/test_list_charts.py | 4 +-
.../chart/tool/test_update_chart_preview.py | 21 +-
.../dashboard/test_dashboard_schemas.py | 18 +
.../dashboard/tool/test_get_dashboard_datasets.py | 13 +-
.../dashboard/tool/test_get_dashboard_layout.py | 744 +++++++++-
.../dataset/tool/test_dataset_metric_mutations.py | 13 +
.../mcp_service/dataset/tool/test_query_dataset.py | 12 +-
.../dataset/tool/test_update_dataset_metric.py | 13 +
.../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 +-
.../mcp_service/test_auth_user_resolution.py | 48 +-
.../mcp_service/test_composite_token_verifier.py | 105 +-
.../unit_tests/mcp_service/test_dashboard_scope.py | 1502 ++++++++++++++++++++
.../mcp_service/test_dashboard_scope_sql.py | 674 +++++++++
tests/unit_tests/mcp_service/test_middleware.py | 21 +
.../unit_tests/mcp_service/test_tool_inventory.py | 4 +-
tests/unit_tests/mcp_service/test_worker.py | 878 ++++++++++++
.../mcp_service/test_worker_metadata_pool.py | 1000 +++++++++++++
.../unit_tests/migrations/viz/table_v1_v2_test.py | 42 +
tests/unit_tests/models/core_test.py | 414 ++++++
.../unit_tests/pandas_postprocessing/test_pivot.py | 339 +++++
tests/unit_tests/semantic_layers/api_test.py | 10 +-
.../semantic_layers/import_export_test.py | 915 ++++++++++++
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 +
.../unit_tests/sql/execution/test_cancellation.py | 165 +++
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/utils/oauth2_tests.py | 190 +++
269 files changed, 29417 insertions(+), 1322 deletions(-)
create mode 100644 docs/docs/using-superset/semantic-member-selections.mdx
create mode 100644
superset-frontend/packages/superset-ui-chart-controls/src/utils/headerGroups.test.ts
create mode 100644
superset-frontend/packages/superset-ui-chart-controls/src/utils/headerGroups.ts
copy superset-frontend/{src/views/ScrollToTop.tsx =>
packages/superset-ui-core/src/query/semanticSelection.ts} (50%)
copy
superset-frontend/{packages/superset-ui-core/src/validator/legacyValidateNumber.ts
=> plugins/plugin-chart-ag-grid-table/src/utils/mainComparison.ts} (56%)
create mode 100644
superset-frontend/plugins/plugin-chart-ag-grid-table/test/utils/mainComparison.test.ts
copy
superset-frontend/{packages/superset-ui-core/src/components/Input/index.tsx =>
plugins/plugin-chart-table/src/utils/headerGroups.ts} (71%)
create mode 100644
superset-frontend/plugins/plugin-chart-table/test/headerGroups.test.ts
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/components/DeckGLOverlayMapLibre.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ColumnConfigControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/HeaderGroupsControl/HeaderGroupEditor.tsx
create mode 100644
superset-frontend/src/explore/components/controls/HeaderGroupsControl/HeaderGroupsControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/HeaderGroupsControl/HeaderGroupsControl.tsx
copy
superset-frontend/{packages/superset-ui-core/src/components/Input/index.tsx =>
src/explore/components/controls/HeaderGroupsControl/index.ts} (82%)
copy
superset-frontend/{plugins/preset-chart-deckgl/src/layers/Arc/buildQuery.test.ts
=> src/explore/components/controls/HeaderGroupsControl/types.ts} (57%)
create mode 100644
superset-frontend/src/explore/components/controls/HeaderGroupsControl/utils.test.ts
create mode 100644
superset-frontend/src/explore/components/controls/HeaderGroupsControl/utils.ts
create mode 100644 superset/mcp_service/dashboard_scope.py
create mode 100644 superset/mcp_service/dashboard_scope_sql.py
create mode 100644 superset/mcp_service/worker.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 superset/sql/execution/cancellation.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/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_worker.py
create mode 100644 tests/unit_tests/mcp_service/test_worker_metadata_pool.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/sql/execution/test_cancellation.py