You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by el...@apache.org on 2026/09/18 22:08:33 UTC
(superset) branch fix-mcp-get-chart-sql-detached-instance updated (252c780d337 -> 995c43b5b03)
This is an automated email from the ASF dual-hosted git repository.
eschutho pushed a change to branch fix-mcp-get-chart-sql-detached-instance
in repository https://gitbox.apache.org/repos/asf/superset.git
omit 252c780d337 fix(mcp): eagerly refresh chart after lookup in get_chart_sql (SC-121078)
add 2db9d6d51c8 fix(theme): do not suppress a dashboard theme when the forwarded config equals the workspace default (#44173)
add 8233b5e5ae0 chore(deps-dev): update teradatasql requirement from >=20.0.0.67 to >=20.0.0.68 (#44331)
add 55ee97bb36b chore(deps): bump holidays from 0.103 to 0.104 (#44325)
add 96d57a97349 chore(deps-dev): bump oxlint from 1.81.0 to 1.82.0 in /superset-frontend (#44301)
add 79ab1467b52 chore(deps-dev): bump the typescript-eslint group across 1 directory with 2 updates (#44293)
add 9df22ffad35 chore(deps): bump yeoman-generator from 8.3.1 to 8.4.0 in /superset-frontend (#44299)
add 134263e8d46 chore(deps-dev): bump ydb-sqlalchemy from 0.1.22 to 0.1.24 (#44329)
add 0db1b47de79 test(dashboard): migrate native filter URL key E2E to Playwright (#41435)
add a01f5076195 chore(deps-dev): bump @types/node from 26.4.1 to 26.5.0 in /superset-frontend (#44298)
add bd76e097a2d ci: pin codeql-action init to the same version as analyze (#44354)
add 637e19f0ca3 fix(embedded): report content height independent of iframe height (#44313)
add dca54da2421 feat(themes): add per-theme editors (Subject model) (#42404)
add 22cef7ef007 fix(chart-data): keep non-numeric columns out of contribution post-processing (#43203)
add 91c1135c054 fix(histogram): compare groupby membership using column labels (#43219)
add 40f5ab8d0c6 fix(mcp): downgrade synthetic tool ToolError log level to WARNING (SC-120340) (#44171)
add 2884e4815bd fix(datasets): catch MultipleResultsFound in get_or_create's schema-scoped lookup (#43725)
add c417e3b6ccf chore(deps-dev): bump yeoman-test from 11.8.1 to 11.8.2 in /superset-frontend (#44302)
add 7b6dd7597c4 chore(deps-dev): bump oxfmt from 0.66.0 to 0.67.0 in /superset-frontend (#44297)
add f47f1ced19b feat(semantic layers): derive Explore picker modes from declared semantic view features (#42540)
add 175c2f1f1cb fix(api): align sort and prophet option schemas with their operations (#43206)
add baccb68d3b4 fix(chart): include Decimal metrics in contribution totals (#43222)
add 461fdaa5b95 feat(native-filters): drive cascade dependencies from chart metadata (#43223)
add 181e9ad3e2b fix(themes): render brand spinner SVG via <img> data URI (#43504)
add f5c710d1625 refactor(explore): move optional icons outside label element (#43584)
add 187e7d4d804 fix(security): handle self-referential catalog qualifiers (#43974)
add 7ee33df6473 fix(rls): match the RLS predicate lookup on case-normalized table identifiers (#43993)
add ea8aac12739 fix(mcp): bound chart_ids length in the generate-dashboard request (#44071)
add 3d17fba3624 fix(db): honor connect_args returned by adjust_engine_params (#44078)
add 82df1ffa61a fix(jinja): escape current_username/current_user_email like sibling macros (#44081)
add fe7391e85ee fix(sqla): run column metadata probe statement exactly once (#44242)
add 4c77b0b924a fix(migrations): merge theme editors and purge audit heads (#44364)
add 2ef8e0c1dee fix(dashboard): require published for the read-gate's datasource fallback (#44093)
add a68503b84af chore(deps): bump zod from 4.5.4 to 4.6.1 in /superset-frontend (#44383)
add 5576b73646a chore(deps-dev): bump @types/node from 26.5.0 to 26.5.1 in /superset-websocket (#44374)
add bb5d138c50e chore(deps): bump apache/infrastructure-actions/allowlist-check from 1.0.2 to 1.0.3 (#44376)
add 68433b08b5b chore(deps): bump astral-sh/setup-uv from 10.0.1 to 10.1.0 (#44377)
add dedfe23a805 chore(deps-dev): bump @types/node from 26.5.0 to 26.5.1 in /superset-embedded-sdk (#44375)
add 91c917e199c feat(ci): flag chart metadata changes via labeler (#33180)
add 35768da1fdb fix(dashboard): keep Save enabled when the properties modal name is set (#44356)
add 66e64cc7d89 fix(time-format): stop reading short digit-only strings as epoch offsets (#44352)
add c28a8942b7e chore(deps): bump the rjsf group in /superset-frontend with 3 updates (#44378)
add ca0f5cfa8e6 chore(deps-dev): bump @types/node from 26.5.0 to 26.5.1 in /superset-frontend (#44379)
add 8f4a70cfdf4 chore(deps-dev): bump minimizer-webpack-plugin from 5.10.0 to 5.10.1 in /superset-frontend (#44380)
add 2ad0053642e chore(deps-dev): bump react-refresh from 0.18.0 to 0.19.0 in /superset-frontend (#44381)
add e8e10fb85c0 fix(charts): don't auto-migrate table charts to ag-grid-table on import unless enabled (#44151)
add c426186a2e6 fix(versioning): scope stream_results to the activity SELECTs instead of mutating the session connection (#44261)
add fc71d0f9e81 fix(dataset): lock the If-Match validator's transaction-id read (#44091)
add 77dbaafc2af chore(versioning): write-path latency metric for the capture finalizer (#44009)
add 4c3a890d8b6 chore(deps): bump flask-appbuilder from 5.2.2 to 5.2.3 (#44400)
add 00c2f22fae2 fix(dashboard): make system default/dark themes assignable to a dashboard (#44361)
add 678bfae8859 fix(charts): align week-grain time comparison offsets to whole weeks (#43936)
add 6b80fa7ec29 fix(mypy): narrow chart.uuid before RestoreChartVersionCommand in restore tests (#44394)
add 3abc3588fab fix(sqla): guard unprotected Jinja template rendering in ExploreMixin (#44172)
add da1cac85f4d fix(versioning): refuse a version restore whose child history was pruned (sc-120012) (#44251)
add 30e5745cd74 fix(mcp): return a structured Unsupported marker for semantic-view get_chart_sql (#44267)
add 795cdf2bf15 fix(mcp): include semantic views in get_dashboard_datasets (#44269)
add 22ae4405d4e fix(explore): anchor the add column/metric/filter popovers to their trigger (#44274)
add f1dc56607e2 fix(i18n): make module-level error constants lazy gettext (#44180)
add 944e92dd578 feat(soft-delete): translate unique collisions with soft-deleted rows into restore guidance (#44184)
add 20d7a3e9aea fix(table): preserve semantic temporal column references (#44369)
add 560828d620a fix(dashboard): resolve display-control and drill datasources by type, not id alone (#42539)
add fc80a14850e feat(mcp): apply native dashboard filters from an MCP client (#44096)
add 394bca55c79 fix(mcp): preserve dashboard filter values for restricted users (#44107)
add bd786e2bea2 feat(versioning): render the starting version as the oldest history row for charts and dashboards (#44258)
add a7dab4a5519 fix(presto): require PyHive 0.7 for SQLAlchemy 2 (#44285)
add b5ad3964165 fix(query): resolve sub-day "Last <unit>" time_range shorthand (#44254)
add b8f5b209285 test(frontend): await userEvent calls missed by the user-event v14 migration (#44335)
add 9bb5a95976a chore(deps-dev): bump the babel group in /superset-embedded-sdk with 3 updates (#44417)
add 4f1a34446df chore(deps): bump zod from 4.6.1 to 4.6.2 in /superset-frontend (#44419)
add 282bcb0edd8 chore(deps-dev): bump baseline-browser-mapping from 2.11.21 to 2.11.22 in /superset-frontend (#44421)
add 79af673bca5 chore(deps-dev): bump webpack-bundle-analyzer from 5.3.2 to 5.3.3 in /superset-frontend (#44422)
add 16090803bbc chore(deps): bump @googleapis/sheets from 14.0.0 to 17.0.0 in /superset-frontend (#44420)
add 0599cc2516b fix(mcp): accept a time grain in get_table on semantic views (#44270)
add b7f1bdd571c fix(mcp): keep the default list_metrics page under the response-token cap (#44266)
add 4bb51d76694 test(mcp): pin distinct cache keys for semantic-view get_table across time ranges (#44263)
add e4bbd3973a2 fix(charts): type-aware datasource access parity for the chart list (#43848)
add 8947d3b3763 fix(semantic-layers): mask nested and union secrets in layer configuration (#43827)
add 627f32ca625 fix(versioning): mount the dashboard version-history panel inside the content area, below the header (#44255)
add ae5d8d89a38 fix(datasets): return 400, not 500, for a body-less purge POST; point the database-delete refusal at the purge flow (#44264)
add 9d4db452551 fix(charts): allow saving charts on semantic views (create/update rejected non-table datasource types) (#44416)
add 43f85576d99 fix(semantic-layer): mapper honors the SemanticView ABC contract (#43886)
add 062bf948e59 fix(semantic-layer): preserve independent source permissions (#43887)
add 2e1cf8a72c4 fix(versioning): map the restore registry guard's LookupError to 422 instead of 500 (#44253)
add 63a28b37eee fix(mcp): eagerly refresh chart after lookup in get_chart_sql (SC-121078)
add 995c43b5b03 test: stub db.session.refresh for mocked chart objects in get_chart_sql tests
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (252c780d337)
\
N -- N -- N refs/heads/fix-mcp-get-chart-sql-detached-instance (995c43b5b03)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/labeler.yml | 12 +
.github/workflows/asf-allowlist-check.yml | 2 +-
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/codeql-analysis.yml | 2 +-
UPDATING.md | 66 ++
docs/admin_docs/configuration/mcp-server.mdx | 106 ++
.../extensions/contribution-types.md | 43 +
docs/docs/using-superset/exploring-data.mdx | 5 +
docs/docs/using-superset/version-history.mdx | 6 +
docs/src/data/databases.json | 1 +
docs/static/resources/openapi.json | 143 ++-
pyproject.toml | 10 +-
requirements/base.txt | 4 +-
requirements/development.txt | 6 +-
.../src/superset_core/semantic_layers/view.py | 6 +-
superset-embedded-sdk/package-lock.json | 262 +++--
superset-embedded-sdk/package.json | 8 +-
superset-frontend/package-lock.json | 653 +++++------
superset-frontend/package.json | 22 +-
.../packages/generator-superset/package.json | 4 +-
.../superset-ui-chart-controls/src/types.ts | 5 +
.../components/RadioButtonControl.test.tsx | 6 +-
.../packages/superset-ui-core/package.json | 2 +-
.../src/chart/models/ChartMetadata.ts | 9 +
.../superset-ui-core/src/query/types/Datasource.ts | 7 +
.../src/time-format/utils/stringifyTimeInput.ts | 21 +-
.../test/chart/models/ChartMetadata.test.ts | 20 +
.../time-format/utils/stringifyTimeInput.test.ts | 28 +
.../playwright/helpers/api/dashboard.ts | 23 +
.../playwright/helpers/embeddedAppServer.ts | 133 +++
.../playwright/pages/DashboardPage.ts | 39 +
.../dashboard-native-filter-url-key.spec.ts | 140 +++
.../tests/dashboard/dashboard-test-helpers.ts | 18 +-
.../dashboard/version-history-placement.spec.ts | 198 ++++
.../tests/embedded/embedded-dashboard.spec.ts | 132 +--
.../tests/embedded/embedded-iframe-sizing.spec.ts | 433 ++++++++
.../tests/embedded/pivot-collapse-state.spec.ts | 96 +-
.../plugins/plugin-chart-echarts/package.json | 2 +-
.../src/Histogram/transformProps.ts | 2 +-
.../test/Histogram/transformProps.test.ts | 112 ++
.../src/react-pivottable/TableRenderers.tsx | 15 +-
.../test/react-pivottable/tableRenders.test.tsx | 21 +
.../plugins/plugin-chart-table/src/buildQuery.ts | 6 +
.../plugin-chart-table/test/buildQuery.test.ts | 109 +-
.../test/ColorSchemeControl.test.tsx | 4 +-
.../QueryLimitSelect/QueryLimitSelect.test.tsx | 8 +-
.../SaveDatasetActionButton.test.tsx | 2 +-
.../ShareSqlLabQuery/ShareSqlLabQuery.test.tsx | 6 +-
.../SqlLab/components/SouthPane/SouthPane.test.tsx | 2 +-
.../SqlEditorLeftBar/SqlEditorLeftBar.test.tsx | 2 +-
.../SqlEditorTabHeader/SqlEditorTabHeader.test.tsx | 2 +-
.../DynamicGroupBy/DynamicGroupByPlugin.test.tsx | 2 +-
.../ChartContextMenu/ChartContextMenu.test.tsx | 100 +-
.../Chart/DrillBy/useResultsTableView.test.ts | 2 +-
.../Chart/DrillDetail/DrillDetailPane.test.tsx | 31 +
.../useDrillDetailMenuItems.test.tsx | 12 +-
.../CopyToClipboard/CopyToClipboard.test.tsx | 10 +-
.../DatabaseSelector/DatabaseSelector.test.tsx | 4 +-
.../tests/DatasourceEditorCurrency.test.tsx | 4 +-
.../src/components/MessageToasts/Toast.test.tsx | 34 +-
.../src/components/MessageToasts/Toast.tsx | 16 +-
.../src/components/MessageToasts/actions.ts | 2 +
.../src/components/MessageToasts/types.ts | 3 +
.../RowCountLabel/RowCountLabel.test.tsx | 4 +-
.../components/AddSliceCard/AddSliceCard.test.tsx | 2 +-
.../DashboardBuilder/DashboardBuilder.test.tsx | 240 +++-
.../DashboardBuilder/DashboardBuilder.tsx | 187 ++--
.../src/dashboard/components/DashboardGrid.tsx | 3 +-
.../PropertiesModal.lateFieldMount.test.tsx | 94 ++
.../PropertiesModal/PropertiesModal.test.tsx | 26 +
.../dashboard/components/PropertiesModal/index.tsx | 16 +-
.../URLShortLinkButton/URLShortLinkButton.test.tsx | 8 +-
.../ChartHolder/ChartHolder.test.tsx | 4 +-
.../gridComponents/Markdown/Markdown.test.tsx | 20 +-
.../FilterControls/FilterControlShared.test.tsx | 2 +-
.../FilterControls/FilterDivider.test.tsx | 2 +-
.../FilterControls/GroupByFilterCard.test.tsx | 330 +++++-
.../FilterBar/FilterControls/GroupByFilterCard.tsx | 192 ++--
.../nativeFilters/FilterBar/Vertical.tsx | 76 +-
.../components/nativeFilters/FilterBar/index.tsx | 16 +-
.../nativeFilters/FilterBar/utils.test.ts | 38 +
.../components/nativeFilters/FilterBar/utils.ts | 15 +
.../FiltersConfigForm/ColumnSelect.test.tsx | 4 +-
.../FiltersConfigForm/ColumnSelect.tsx | 27 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 38 +-
.../FiltersConfigForm/utils.test.ts | 78 ++
.../FiltersConfigModal/FiltersConfigForm/utils.ts | 52 +-
.../FiltersConfigModal/FiltersConfigModal.tsx | 4 +-
.../FiltersConfigModal/NativeFiltersModal.test.tsx | 9 +
.../FiltersConfigModal/hooks/index.ts | 5 +-
.../hooks/useFilterOperations.test.ts | 91 ++
.../hooks/useFilterOperations.ts | 36 +-
.../useDisplayControlDatasource.test.ts | 192 ++++
.../nativeFilters/useDisplayControlDatasource.ts | 181 +++
.../src/dashboard/containers/DashboardPage.tsx | 2 +
.../src/dashboard/useDashboardFilterSync.test.tsx | 272 +++++
.../src/dashboard/useDashboardFilterSync.ts | 118 ++
.../util/embeddedLayout.ts} | 21 +-
superset-frontend/src/dataMask/reducer.test.ts | 98 ++
superset-frontend/src/dataMask/reducer.ts | 15 +
superset-frontend/src/embedded/api.test.ts | 84 ++
superset-frontend/src/embedded/api.tsx | 65 +-
.../src/explore/actions/exploreActions.test.ts | 219 +++-
.../src/explore/actions/exploreActions.ts | 44 +-
.../src/explore/components/ControlHeader.test.tsx | 18 +
.../src/explore/components/ControlHeader.tsx | 37 +-
.../CopyToClipboardButton.test.tsx | 4 +-
.../DataTablesPane/test/DataTableControls.test.tsx | 6 +-
.../DataTablesPane/test/DataTablesPane.test.tsx | 18 +-
.../DataTablesPane/test/useResultsPane.test.tsx | 4 +-
.../DatasourcePanelDragOption.test.tsx | 65 +-
.../DatasourcePanel/DatasourcePanelItem.test.tsx | 16 +-
.../components/DatasourcePanel/compatibility.ts | 18 +-
.../ExploreViewContainer.test.tsx | 8 +-
.../AnnotationLayer.subdirectory.test.tsx | 2 +-
.../ColorBreakpointPopoverTrigger.tsx | 7 +-
.../ColorSchemeControl/ColorSchemeControl.test.tsx | 24 +-
.../ContourControl/ContourPopoverTrigger.tsx | 7 +-
.../ControlPopover/PopoverTriggerAnchors.test.tsx | 53 +
.../ColumnSelectPopover.test.tsx | 690 +++++++++++-
.../DndColumnSelectControl/ColumnSelectPopover.tsx | 323 +++++-
.../ColumnSelectPopoverTrigger.tsx | 28 +-
.../DndColumnMetricSelect.test.tsx | 177 ++-
.../DndColumnMetricSelect.tsx | 16 +-
.../DndColumnSelect.test.tsx | 181 +++
.../DndColumnSelectControl/DndColumnSelect.tsx | 20 +-
.../DndFilterSelect.test.tsx | 80 ++
.../utils/pickerCapabilities.test.ts | 101 ++
.../utils/pickerCapabilities.ts | 82 ++
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 52 +
.../AdhocFilterPopoverTrigger/index.tsx | 10 +-
.../AdhocMetricEditPopover.test.tsx | 58 +
.../MetricControl/AdhocMetricEditPopover/index.tsx | 7 +-
.../MetricControl/AdhocMetricPopoverTrigger.tsx | 10 +-
.../MetricControl/MetricDefinitionOption.test.tsx | 2 +-
.../src/explore/reducers/exploreReducer.test.ts | 47 +-
.../src/explore/reducers/exploreReducer.ts | 14 +-
.../src/explore/selectors/compatibility.test.ts | 67 ++
.../src/explore/selectors/compatibility.ts | 55 +
superset-frontend/src/explore/types.ts | 41 +-
.../alerts/components/AlertStatusIcon.test.tsx | 6 +-
.../datasets/AddDataset/Footer/Footer.test.tsx | 10 +-
.../src/features/home/ChartTable.test.tsx | 6 +-
.../src/features/home/LanguagePicker.test.tsx | 2 +-
superset-frontend/src/features/home/Menu.test.tsx | 18 +-
.../src/features/home/RightMenu.test.tsx | 12 +-
.../src/features/themes/ThemeModal.test.tsx | 177 +++
.../src/features/themes/ThemeModal.tsx | 179 ++-
superset-frontend/src/features/themes/types.ts | 3 +
.../versionHistory/RelatedUpdateRow.test.tsx | 12 +-
.../features/versionHistory/SaveGroupItem.test.tsx | 91 +-
.../src/features/versionHistory/SaveGroupItem.tsx | 26 +
.../src/features/versionHistory/display.test.ts | 27 +
.../src/features/versionHistory/display.ts | 18 +
.../src/features/versionHistory/grouping.test.ts | 36 +
.../src/features/versionHistory/grouping.ts | 7 +
.../src/features/versionHistory/types.ts | 14 +
.../src/filters/components/Range/index.ts | 1 +
.../src/filters/components/Select/index.ts | 1 +
.../src/filters/components/Time/index.ts | 1 +
.../src/filters/components/TimeColumn/index.ts | 1 +
.../src/filters/components/TimeGrain/index.ts | 1 +
superset-frontend/src/filters/utils.ts | 9 +-
.../src/hooks/apiResources/datasets.test.ts | 84 ++
.../src/hooks/apiResources/datasets.ts | 66 +-
.../DatabaseList.semanticLayerDelete.test.tsx | 139 ++-
superset-frontend/src/pages/DatabaseList/index.tsx | 166 +--
.../DatasetList.connectionPermissions.test.tsx | 70 ++
.../pages/DatasetList/DatasetList.testHelpers.tsx | 1 +
superset-frontend/src/pages/DatasetList/index.tsx | 6 +-
superset-frontend/src/pages/Home/Home.test.tsx | 2 +-
.../src/pages/ThemeList/ThemeList.test.tsx | 212 ++++
superset-frontend/src/pages/ThemeList/index.tsx | 48 +-
superset-frontend/src/theme/ThemeController.ts | 21 +-
.../src/theme/tests/ThemeController.test.ts | 105 +-
superset-frontend/src/utils/common.ts | 3 +
.../src/utils/semanticViewStructure.test.ts | 85 ++
.../src/utils/semanticViewStructure.ts | 129 +++
superset-websocket/package-lock.json | 8 +-
superset-websocket/package.json | 2 +-
superset/charts/api.py | 2 +
superset/charts/filters.py | 61 +-
superset/charts/schemas.py | 36 +-
superset/commands/chart/create.py | 18 +-
superset/commands/chart/importers/v1/utils.py | 12 +-
superset/commands/chart/update.py | 43 +-
superset/commands/chart/utils.py | 12 +
superset/commands/dashboard/create.py | 16 +
superset/commands/dashboard/exceptions.py | 26 +-
superset/commands/dashboard/update.py | 13 +
superset/commands/database/exceptions.py | 10 +-
superset/commands/dataset/update.py | 8 +
superset/commands/semantic_layer/create.py | 3 +-
superset/commands/semantic_layer/update.py | 63 +-
superset/commands/semantic_layer/utils.py | 56 +
superset/commands/soft_delete_collisions.py | 165 +++
.../commands/{annotation_layer => theme}/create.py | 40 +-
superset/commands/theme/delete.py | 8 +
superset/commands/theme/exceptions.py | 27 +-
superset/commands/theme/import_themes.py | 34 +-
superset/commands/theme/update.py | 25 +
superset/commands/version_restore.py | 17 +-
superset/common/query_context_processor.py | 22 +-
superset/config.py | 1 +
superset/connectors/sqla/models.py | 71 +-
superset/connectors/sqla/utils.py | 1 -
superset/constants.py | 4 +
superset/daos/version.py | 4 +
superset/dashboards/filters.py | 46 +-
superset/datasets/api.py | 149 ++-
superset/datasource/api.py | 4 +-
superset/db_engine_specs/base.py | 21 +
superset/db_engine_specs/mssql.py | 122 ++
superset/db_engine_specs/presto.py | 4 +
superset/exceptions.py | 21 +-
superset/explore/utils.py | 15 +
superset/jinja_context.py | 18 +-
superset/mcp_service/app.py | 7 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 51 +-
.../mcp_service/common/time_range_validation.py | 32 +-
superset/mcp_service/dashboard/permalink.py | 96 +-
superset/mcp_service/dashboard/schemas.py | 421 ++++++-
superset/mcp_service/dashboard/tool/__init__.py | 2 +
.../dashboard/tool/apply_dashboard_filters.py | 485 ++++++++
.../dashboard/tool/get_dashboard_datasets.py | 21 +-
.../dashboard/tool/get_dashboard_info.py | 15 +-
.../dashboard/tool/manage_native_filters.py | 4 +-
.../dataset/tool/update_dataset_metric.py | 5 +
superset/mcp_service/mcp_config.py | 1 +
superset/mcp_service/semantic_layer/schemas.py | 66 +-
.../mcp_service/semantic_layer/tool/get_table.py | 146 ++-
.../semantic_layer/tool/list_metrics.py | 9 +-
superset/mcp_service/server.py | 3 +-
superset/mcp_service/theme/tool/create_theme.py | 39 +-
superset/mcp_service/utils/response_utils.py | 9 +-
superset/migrations/shared/migrate_viz/base.py | 7 +
.../migrations/shared/migrate_viz/processors.py | 6 +
...4_00-00_f7e8d9c0b1a2_add_theme_editors_table.py | 142 +++
...339627c_merge_add_theme_editors_table_with_.py} | 12 +-
...655c0a6_merge_task_dependencies_with_theme_.py} | 12 +-
...1_merge_theme_editors_and_purge_audit_heads.py} | 12 +-
superset/models/core.py | 7 +
superset/models/dashboard.py | 30 +-
superset/models/helpers.py | 197 +++-
.../mcp => superset/realtime}/__init__.py | 1 +
superset/realtime/publish.py | 68 ++
superset/security/manager.py | 148 ++-
superset/semantic_layers/api.py | 81 +-
superset/semantic_layers/mapper.py | 31 +-
superset/semantic_layers/masking.py | 481 ++++++++
superset/semantic_layers/models.py | 23 +-
superset/sql/parse.py | 59 +
superset/sqllab/query_render.py | 9 +-
superset/subjects/models.py | 19 +
superset/superset_typing.py | 6 +
superset/tasks/async_queries.py | 3 +-
superset/tasks/manager.py | 19 +-
superset/templates/superset/spa.html | 13 +-
superset/themes/api.py | 87 +-
superset/themes/schemas.py | 14 +
superset/translations/messages.pot | 32 +-
superset/utils/core.py | 4 +-
superset/utils/date_parser.py | 42 +-
superset/utils/filters.py | 98 +-
.../utils/pandas_postprocessing/contribution.py | 48 +-
superset/utils/rls.py | 156 ++-
superset/versioning/activity/creation.py | 173 +++
superset/versioning/activity/orchestrator.py | 32 +
superset/versioning/activity/queries.py | 22 +-
superset/versioning/api_helpers.py | 40 +-
superset/versioning/baseline/__init__.py | 2 +
superset/versioning/baseline/insertion.py | 10 +
superset/versioning/baseline/shadow.py | 5 +
superset/versioning/changes/__init__.py | 4 +
superset/versioning/changes/listener.py | 233 +++-
superset/versioning/changes/shadow_queries.py | 11 +-
.../__init__.py => versioning/creation_kinds.py} | 21 +-
superset/versioning/db_errors.py | 75 ++
superset/versioning/metrics.py | 37 +-
superset/versioning/queries.py | 194 +++-
superset/versioning/restore.py | 223 +++-
superset/versioning/schemas.py | 19 +
superset/views/base.py | 21 +-
superset/views/base_api.py | 83 +-
superset/views/core.py | 16 +-
.../charts/semantic_save_tests.py | 140 +++
.../charts/version_restore_tests.py | 3 +
tests/integration_tests/dashboards/api_tests.py | 141 +++
.../dashboards/test_theme_integration.py | 6 +
tests/integration_tests/datasets/api_tests.py | 108 ++
.../security/row_level_security_tests.py | 33 +
tests/integration_tests/sqllab_tests.py | 13 +-
tests/integration_tests/themes/api_tests.py | 7 +
.../integration_tests/themes/test_theme_editors.py | 291 +++++
.../versioning/activity_write_after_read_tests.py | 131 +++
.../versioning/conditional_token_lock_tests.py | 363 ++++++
.../versioning/creation_row_tests.py | 307 +++++
.../versioning/restore_fails_closed_tests.py | 621 +++++++++++
.../charts/commands/importers/v1/utils_test.py | 69 ++
.../charts/semantic_view_chart_filter_test.py | 481 ++++++++
tests/unit_tests/charts/test_schemas.py | 78 ++
tests/unit_tests/commands/chart/create_test.py | 54 +-
tests/unit_tests/commands/chart/update_test.py | 72 +-
.../commands/dashboard/slug_collision_test.py | 246 ++++
tests/unit_tests/commands/dataset/update_test.py | 45 +
.../commands/semantic_layer/create_test.py | 17 +-
.../commands/semantic_layer/update_test.py | 64 +-
.../commands/test_base_restore_version_command.py | 52 +
.../common/test_query_context_processor.py | 117 ++
tests/unit_tests/common/test_tabular_query.py | 74 ++
tests/unit_tests/common/test_time_shifts.py | 318 +++++-
tests/unit_tests/connectors/sqla/models_test.py | 212 ++++
tests/unit_tests/connectors/sqla/utils_test.py | 56 +-
.../dashboards/semantic_view_access_test.py | 264 ++++-
tests/unit_tests/databases/commands/delete_test.py | 21 +-
tests/unit_tests/datasets/api_tests.py | 216 +++-
tests/unit_tests/db_engine_specs/test_base.py | 18 +
tests/unit_tests/db_engine_specs/test_mssql.py | 438 ++++++++
tests/unit_tests/db_engine_specs/test_presto.py | 14 +-
tests/unit_tests/explore/utils_test.py | 65 ++
tests/unit_tests/jinja_context_test.py | 41 +
.../mcp_service/chart/tool/test_get_chart_sql.py | 173 +++
.../common/test_time_range_validation.py | 41 +-
.../dashboard/test_dashboard_schemas.py | 236 ++++
.../mcp_service/dashboard/test_permalink.py | 123 +-
.../dashboard/tool/test_apply_dashboard_filters.py | 1174 ++++++++++++++++++++
.../dashboard/tool/test_dashboard_tools.py | 102 +-
.../dashboard/tool/test_get_dashboard_datasets.py | 331 +++++-
.../dataset/tool/test_update_dataset_metric.py | 39 +
.../semantic_layer/tool/test_get_table.py | 432 ++++++-
.../semantic_layer/tool/test_list_metrics.py | 235 +++-
.../mcp_service/test_mcp_tool_registration.py | 2 +
.../mcp_service/test_rbac_tool_enforcement.py | 8 +-
.../mcp_service/test_tool_search_transform.py | 40 +
.../mcp_service/theme/tool/test_create_theme.py | 89 +-
.../mcp_service/utils/test_response_utils.py | 24 +
.../migrations/test_add_theme_editors.py | 166 +++
tests/unit_tests/models/core_test.py | 23 +
.../pandas_postprocessing/test_contribution.py | 106 ++
tests/unit_tests/security/manager_test.py | 633 +++++++++++
.../security/test_guest_token_empty_filter.py | 115 ++
tests/unit_tests/semantic_layers/api_test.py | 352 +++++-
.../semantic_layers/connections_access_test.py | 402 +++++++
.../fixtures/snowflake_configuration.json | 172 +++
tests/unit_tests/semantic_layers/mapper_test.py | 213 ++--
tests/unit_tests/semantic_layers/masking_test.py | 870 +++++++++++++++
tests/unit_tests/semantic_layers/models_test.py | 123 ++
.../semantic_layers/provider_masking_test.py | 107 ++
tests/unit_tests/sql/parse_tests.py | 50 +
tests/unit_tests/sql_lab_test.py | 105 ++
.../subjects/test_report_executor_remediation.py | 148 +++
tests/unit_tests/tasks/test_async_queries.py | 43 +
tests/unit_tests/test_realtime_publish.py | 124 +++
tests/unit_tests/themes/api_test.py | 6 +
tests/unit_tests/themes/commands_test.py | 22 +-
tests/unit_tests/utils/date_parser_tests.py | 107 ++
tests/unit_tests/utils/filters_test.py | 43 +-
tests/unit_tests/versioning/test_activity.py | 208 +++-
tests/unit_tests/versioning/test_db_errors.py | 205 +++-
tests/unit_tests/versioning/test_listener.py | 565 +++++++++-
tests/unit_tests/versioning/test_restore.py | 245 +++-
.../unit_tests/versioning/test_retention_races.py | 4 +
.../versioning/test_version_info_locking.py | 108 ++
tests/unit_tests/views/test_base_theme_helpers.py | 62 ++
tests/unit_tests/views/test_i18n_constants.py | 640 +++++++++++
365 files changed, 27764 insertions(+), 2415 deletions(-)
create mode 100644 superset-frontend/playwright/helpers/embeddedAppServer.ts
create mode 100644 superset-frontend/playwright/tests/dashboard/dashboard-native-filter-url-key.spec.ts
create mode 100644 superset-frontend/playwright/tests/dashboard/version-history-placement.spec.ts
create mode 100644 superset-frontend/playwright/tests/embedded/embedded-iframe-sizing.spec.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Histogram/transformProps.test.ts
create mode 100644 superset-frontend/src/dashboard/components/PropertiesModal/PropertiesModal.lateFieldMount.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useFilterOperations.test.ts
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/useDisplayControlDatasource.test.ts
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/useDisplayControlDatasource.ts
create mode 100644 superset-frontend/src/dashboard/useDashboardFilterSync.test.tsx
create mode 100644 superset-frontend/src/dashboard/useDashboardFilterSync.ts
copy superset-frontend/src/{visualizations/TimeTable/utils/rowProcessing/rowProcessing.ts => dashboard/util/embeddedLayout.ts} (61%)
create mode 100644 superset-frontend/src/explore/components/controls/ControlPopover/PopoverTriggerAnchors.test.tsx
create mode 100644 superset-frontend/src/explore/components/controls/DndColumnSelectControl/utils/pickerCapabilities.test.ts
create mode 100644 superset-frontend/src/explore/components/controls/DndColumnSelectControl/utils/pickerCapabilities.ts
create mode 100644 superset-frontend/src/explore/selectors/compatibility.test.ts
create mode 100644 superset-frontend/src/explore/selectors/compatibility.ts
create mode 100644 superset-frontend/src/pages/DatasetList/DatasetList.connectionPermissions.test.tsx
create mode 100644 superset-frontend/src/utils/semanticViewStructure.test.ts
create mode 100644 superset-frontend/src/utils/semanticViewStructure.ts
create mode 100644 superset/commands/semantic_layer/utils.py
create mode 100644 superset/commands/soft_delete_collisions.py
copy superset/commands/{annotation_layer => theme}/create.py (53%)
create mode 100644 superset/mcp_service/dashboard/tool/apply_dashboard_filters.py
create mode 100644 superset/migrations/versions/2026-07-24_00-00_f7e8d9c0b1a2_add_theme_editors_table.py
copy superset/migrations/versions/{2016-09-19_17-22_b347b202819b_.py => 2026-09-04_19-03_aa5fa339627c_merge_add_theme_editors_table_with_.py} (76%)
copy superset/migrations/versions/{2016-09-19_17-22_b347b202819b_.py => 2026-09-09_00-00_0884f655c0a6_merge_task_dependencies_with_theme_.py} (79%)
copy superset/migrations/versions/{2026-09-15_06-50_e2f3a1b9c640_merge_purge_audit_and_username_index_heads.py => 2026-09-16_22-55_60f94cd6cd11_merge_theme_editors_and_purge_audit_heads.py} (81%)
copy {superset-core/src/superset_core/mcp => superset/realtime}/__init__.py (94%)
create mode 100644 superset/realtime/publish.py
create mode 100644 superset/semantic_layers/masking.py
create mode 100644 superset/versioning/activity/creation.py
copy superset/{extensions/storage/__init__.py => versioning/creation_kinds.py} (64%)
create mode 100644 tests/integration_tests/charts/semantic_save_tests.py
create mode 100644 tests/integration_tests/themes/test_theme_editors.py
create mode 100644 tests/integration_tests/versioning/activity_write_after_read_tests.py
create mode 100644 tests/integration_tests/versioning/conditional_token_lock_tests.py
create mode 100644 tests/integration_tests/versioning/creation_row_tests.py
create mode 100644 tests/integration_tests/versioning/restore_fails_closed_tests.py
create mode 100644 tests/unit_tests/charts/semantic_view_chart_filter_test.py
create mode 100644 tests/unit_tests/commands/dashboard/slug_collision_test.py
create mode 100644 tests/unit_tests/mcp_service/dashboard/tool/test_apply_dashboard_filters.py
create mode 100644 tests/unit_tests/migrations/test_add_theme_editors.py
create mode 100644 tests/unit_tests/security/test_guest_token_empty_filter.py
create mode 100644 tests/unit_tests/semantic_layers/connections_access_test.py
create mode 100644 tests/unit_tests/semantic_layers/fixtures/snowflake_configuration.json
create mode 100644 tests/unit_tests/semantic_layers/masking_test.py
create mode 100644 tests/unit_tests/semantic_layers/provider_masking_test.py
create mode 100644 tests/unit_tests/subjects/test_report_executor_remediation.py
create mode 100644 tests/unit_tests/test_realtime_publish.py
create mode 100644 tests/unit_tests/versioning/test_version_info_locking.py
create mode 100644 tests/unit_tests/views/test_i18n_constants.py