This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch remove-legacy-viz-pipeline
in repository https://gitbox.apache.org/repos/asf/superset.git
discard 50b1caeefa5 chore: drop unused feature_flag_manager import after rebase
discard ad7d88d5e2d docs(embedded): document the iframe session cookie race in
the pivot spec
discard 10327ff3b43 test(embedded): store a query_context on the pivot
collapse fixture chart
discard 5ade216a2a0 test(charts): update warm-up cache assertions for the
actionable message
discard e189de7c240 style: prettier formatting for UPDATING.md and
SavedQueries test
discard d70eb0aac90 fix(time-table): escape backslashes in flattened labels;
actionable null-query-context errors
discard 1fc9366a15b feat(bullet): rebuild the Bullet Chart on ECharts (#42225)
discard 4224c6a7e1f feat(time-pivot): rebuild Time-series Period Pivot on
ECharts (#42245)
discard fd6b9e6a365 feat(timeseries): percent-change rebasing with a draggable
baseline (#42247)
discard 76e270ae119 fix: cast Arc test color accessors through unknown for tsc
discard e4390456a7f fix: repair type errors from removed useLegacyApi metadata
field
discard 9580a5bf78d fix(deck-arc): default missing layer colors instead of
crashing
discard 2161e67aeb9 feat(deck-multi): surface layer load failures in the chart
discard f1180dcda30 test(plugins): cover the migrated
calendar/chord/country-map registration
discard bfb19fce449 fix(deck-multi): query layers against their real
datasource, not stale params
discard 6bb18cc5c31 fix(deck-multi): correct the points-collection typing to
unblock tsc
discard 9cedbfe08d3 fix(deck-multi): autozoom to layer data in the v1 fetch
path
discard 137eca1c7a6 chore(paired-t-test): drop the unused prop-types dependency
discard 83fb70c8361 fix(paired-t-test): bound the scroll container to the
chart height
discard 13538da7349 refactor(paired-t-test): use the antd Table and drop the
reactable dependency
discard 6e72487d882 fix(paired-t-test): scroll the chart when tables overflow
its height
discard f903ea40395 fix(paired-t-test): render the table without the reactable
dependency
discard d968b63b8f4 fix(tests): drop removed useLegacyApi prop from
ChartRenderer test metadata
discard 65627b361cb test(paired-t-test): prove the v1 pipeline renders table
rows end-to-end
discard 0484e5123f5 fix(explore): honor chart enableNoResults metadata in
ChartRenderer
discard 8b504405e50 test(plugins): regression guards from the migration bug
sweep
discard dd47295dcfd test(paired-t-test): mock the statistics module instead of
removed distributions
discard 6a145deef0e fix(nvd3,controls): time-pivot x-axis number format +
single-line async multiselect
discard 9d43992be29 fix(paired-t-test): compute p-values without the Node-only
distributions dep
discard edeb937b885 fix(deck-multi): render the map instead of the no-results
empty state
discard 16b991fe3d8 fix(paired-t-test): restore the datetime column control
discard 67ae57b11b1 fix: rebase bubble-chart migration onto master's current
alembic head
discard 1866cd72a92 fix: resolve oxlint unused-var/param errors and remove
orphaned legacy test
discard c8a1ee93922 fix: point bubble-chart migration at master's actual
alembic head
discard a93096a2569 fix: resolve alembic multiple-heads conflict in migration
chain
discard a29ba53ddc6 fix: format Multi.tsx and update Multi.color.test.tsx for
registry-based layer loading
discard de440e6425c fix: repair stale package-lock.json and alembic migration
branch
discard 904d4db12e1 fix: restore OAuth2RedirectError import after rebase
discard 4c0e6242921 docs: add UPDATING.md entries for the legacy viz pipeline
removal and drop the working trackers
discard da7b1cea23c chore(viz)!: remove explore_json endpoints, viz.py and the
legacy chart data pipeline (#41750)
discard 4b4da9eb285 chore(viz): drop the legacy- prefix from migrated chart
plugin packages (#41751)
discard 5a0c7c7f74e chore(viz): update SCOPE tracker — all charts migrated,
phases 2-3 in review
discard 6de0070dfe7 feat(compare): migrate compare charts to
echarts_timeseries_line and drop the legacy plugin (#41738)
discard fdb08023975 feat(deck-multi): migrate deck_multi chart to the v1 chart
data API (#41730)
discard 3a22a04623b feat(bubble): migrate saved bubble charts to bubble_v2 and
drop the legacy plugin (#41728)
discard 8feed985937 fix(legacy-viz): restore line-engine default ordering for
horizon and rose (#41732)
discard 755b229fdfa feat(partition): migrate partition chart to v1 chart data
API (#41729)
discard d3055ef0859 chore(viz): update SCOPE tracker after tier 2 completion
discard 53b1262e300 feat(time-pivot): migrate time_pivot chart to v1 chart
data API (#41727)
discard 0137d510a45 feat(rose): migrate rose chart to v1 chart data API
(#41726)
discard d6f28c2c215 feat(horizon): migrate horizon chart to v1 chart data API
(#41725)
discard 2aeeb5f65bb chore(viz): update SCOPE tracker after tier 1-2 merges
discard 7492ee282e2 feat(time-table): migrate time_table chart to v1 chart
data API (#41723)
discard 36007f2add5 feat(world-map): migrate world_map chart to v1 chart data
API (#41720)
discard a18ac1eb37b feat(calendar): migrate cal_heatmap chart to v1 chart data
API (#41724)
discard 1ea5f7b42be feat(paired-t-test): migrate paired_ttest chart to v1
chart data API (#41721)
discard caf1280bf5f feat(chord): migrate chord chart to v1 chart data API
(#41719)
discard 6d8e18a12e1 chore(viz): update SCOPE tracker after phase 0 + tier 1
merges
discard 9d806fca937 feat(bullet): migrate bullet chart to v1 chart data API
(#41718)
discard 43743a7ab15 feat(parallel-coordinates): migrate para chart to v1 chart
data API (#41716)
discard 6df3202a751 feat(country-map): migrate country_map chart to v1 chart
data API (#41717)
discard dffc3a1c1a4 chore(viz): phase 0 — remove orphaned viz.py classes and
nvd3 BoxPlot leftovers (#41715)
discard cff4c989948 chore(viz): add SCOPE/UPDATES trackers for legacy viz
pipeline removal
add 34ebe3d22ad feat(extensions): add a Storage API for extensions (#39171)
add e5c418a1878 fix(mcp): normalize bracket-shorthand time ranges in
query_dataset (#42144)
add b97a7f5f945 chore(deps-dev): bump fast-uri from 3.1.2 to 3.1.4 in
/superset-embedded-sdk (#42282)
add cfac7855416 chore(deps): bump fuse.js from 7.4.2 to 7.5.0 in
/superset-frontend (#42262)
add c95c8086f5b chore(deps-dev): bump webpack-bundle-analyzer from 5.3.0
to 5.3.1 in /superset-frontend (#42261)
add 8329481c2e9 chore(deps-dev): bump the typescript-eslint group across 1
directory with 2 updates (#42258)
add 1b882c1f47d test(explore): cover annotation layer link app-root prefix
in subdire… (#41997)
add ab8e23d8749 chore(deps-dev): bump svgo from 3.3.3 to 3.3.4 in
/superset-frontend (#42285)
add 15d7d365804 chore: remove deprecated from_dttm and to_dttm jinja vars
(#42279)
add 2ddea33bb68 fix(models): inline calculated column expression in
raw-records queries (#34784) (#42040)
add d62dbdb6940 fix(chat): prevent main content reload when toggling chat
panel (#42143)
add 8b1ef3a4cba feat(helm): Add annotations to secrets manifests (#40803)
add 072ff014062 fix: disable recaptcha for LDAP authentication (#36857)
add 9c08240fdc8 chore(deps): bump dompurify from 3.4.11 to 3.4.12 in /docs
(#42287)
add cae61b51e12 fix(cache): QueryCacheManager.get() should fail open on
cache backend errors (#42252)
add 37ef2f381ec chore(deps): bump fast-uri from 3.1.3 to 3.1.4 in /docs
(#42294)
add 936b8a84ae7 chore(deps): bump fast-uri from 3.1.3 to 3.1.4 in
/superset-frontend (#42293)
add db1959b9b61 chore(deps): bump fast-uri from 3.1.2 to 3.1.4 in
/superset-frontend/cypress-base (#42292)
add 60a7c18204b chore(deps): bump svgo from 3.3.3 to 3.3.4 in /docs
(#42286)
add 788165b5bbb fix(frontend): jest testRegex matches Windows path
separators (#41863)
add a086b2eae9b fix(clickhouse): retry adhoc column type probe with
comment-safe SQL (#42298)
add 1392fbc9b24 fix(sql): validate Custom SQL metric has an aggregate
under GROUP BY (#42199)
add b71b58e8214 fix(explore): render stopped state when a chart query is
cancelled (#42270)
add 46c5e30533d chore(deps-dev): bump oxlint from 1.73.0 to 1.74.0 in
/superset-frontend (#42304)
add 248f6e10640 chore(deps): bump zizmorcore/zizmor-action from 0.5.7 to
0.6.0 (#42302)
add 6e1954fd51c chore(deps): bump ws from 8.21.0 to 8.21.1 in
/superset-websocket (#42301)
add b8f3b768d4f fix(sqllab): Fall back to empty editor tab when linked
query no longer exists (#42241)
add 1c0f259e380 refactor(mcp): dedupe list-tool schemas and delete dead
middleware (#41923)
add 10ff4707021 fix(ag-grid-table): respect row limit with server
pagination (#41346)
add c5935b6904d feat(table/pivot-table): correct non-additive
totals/subtotals via DB rollup [SIP-216] (#41184)
add 8c5d465a658 feat(datasets): add RLS filter indicator badge to dataset
list and explore view (#38807)
add be5744c4317 fix(chart): updates counties of kenya map (#38019)
add f50b7b71542 chore(deps): bump actions/setup-go from 6.5.0 to 7.0.0
(#42303)
add ac41f61d4ab chore(deps): bump nanoid from 5.0.9 to 6.0.0 in
/superset-frontend (#42230)
add 49b42431292 test(dashboard): migrate dashboard load smoke test to
Playwright (#41432)
add 894c0191d64 fix(superset_app_root): when used with oauth (#38033)
add 19159d58c80 refactor: engine enforce SQLAlchemy 2.0 (#42277)
add 40d9e7d0485 fix(ag-grid-table): avoid ambiguous build query import
(#42313)
add 641713f6237 fix: Revert "chore(deps): bump echarts from 5.6.0 to 6.1.0
in /superset-frontend" (#42314)
add 8d034ef65ca fix(plugin-chart-echarts): import the -obj locale build so
time axes render (#42317)
add e075133a833 fix(pandas_postprocessing): avoid FutureWarning for
max/min in boxplot MINMAX (#42272)
add 32937f24d25 fix(heatmap): correct tooltip axis value lookup and
percentage calculations and add tests (#41864)
add 17bd286ae9b fix(forecast): resolve time grain robustly for Prophet
forecasting (#42145)
add 3ed8889a010 fix: Added PostgreSQL 17.X to the supported database
versions table in (#42280)
add ef459c21e82 fix(helm): add MCP HTTPRoute configuration (#42219)
add b5df673d211 chore(viz): add SCOPE/UPDATES trackers for legacy viz
pipeline removal
add bcc58d27f84 chore(viz): phase 0 — remove orphaned viz.py classes and
nvd3 BoxPlot leftovers (#41715)
add 45b232cba0d feat(country-map): migrate country_map chart to v1 chart
data API (#41717)
add 4e93b58a610 feat(parallel-coordinates): migrate para chart to v1 chart
data API (#41716)
add 7e0de356d42 feat(bullet): migrate bullet chart to v1 chart data API
(#41718)
add 0f8e2a274d8 chore(viz): update SCOPE tracker after phase 0 + tier 1
merges
add deb6cacea72 feat(chord): migrate chord chart to v1 chart data API
(#41719)
add 5722b962808 feat(paired-t-test): migrate paired_ttest chart to v1
chart data API (#41721)
add 759457264dd feat(calendar): migrate cal_heatmap chart to v1 chart data
API (#41724)
add 66e911eeeab feat(world-map): migrate world_map chart to v1 chart data
API (#41720)
add df176cfa572 feat(time-table): migrate time_table chart to v1 chart
data API (#41723)
add ba2b0d6ea3e chore(viz): update SCOPE tracker after tier 1-2 merges
add 4f47eda5de1 feat(horizon): migrate horizon chart to v1 chart data API
(#41725)
add 32cbc4a7a60 feat(rose): migrate rose chart to v1 chart data API
(#41726)
add a9045296d9a feat(time-pivot): migrate time_pivot chart to v1 chart
data API (#41727)
add 8b2c07f5f32 chore(viz): update SCOPE tracker after tier 2 completion
add cd535f89e2b feat(partition): migrate partition chart to v1 chart data
API (#41729)
add 2a55ad77f40 fix(legacy-viz): restore line-engine default ordering for
horizon and rose (#41732)
add 68324050cdc feat(bubble): migrate saved bubble charts to bubble_v2 and
drop the legacy plugin (#41728)
add e17d49bec04 feat(deck-multi): migrate deck_multi chart to the v1 chart
data API (#41730)
add 2afa775db5a feat(compare): migrate compare charts to
echarts_timeseries_line and drop the legacy plugin (#41738)
add ae15dd883db chore(viz): update SCOPE tracker — all charts migrated,
phases 2-3 in review
add c8d6faf7e8b chore(viz): drop the legacy- prefix from migrated chart
plugin packages (#41751)
add 105f6d0bc76 chore(viz)!: remove explore_json endpoints, viz.py and the
legacy chart data pipeline (#41750)
add 3a03f0a820b docs: add UPDATING.md entries for the legacy viz pipeline
removal and drop the working trackers
add 45adb8429d7 fix: restore OAuth2RedirectError import after rebase
add 5942d570c3b fix: repair stale package-lock.json and alembic migration
branch
add 7d45b8ae7e4 fix: format Multi.tsx and update Multi.color.test.tsx for
registry-based layer loading
add bba2d5f8126 fix: resolve alembic multiple-heads conflict in migration
chain
add 935b4acdbdf fix: point bubble-chart migration at master's actual
alembic head
add a42c7e3be04 fix: resolve oxlint unused-var/param errors and remove
orphaned legacy test
add 573054346f6 fix: rebase bubble-chart migration onto master's current
alembic head
add 239e3a43236 fix(paired-t-test): restore the datetime column control
add 28eae5956ef fix(deck-multi): render the map instead of the no-results
empty state
add 4b3bbe19f62 fix(paired-t-test): compute p-values without the Node-only
distributions dep
add 2cd369d02a9 fix(nvd3,controls): time-pivot x-axis number format +
single-line async multiselect
add b887c305731 test(paired-t-test): mock the statistics module instead of
removed distributions
add 533f90e4c67 test(plugins): regression guards from the migration bug
sweep
add 387b742303f fix(explore): honor chart enableNoResults metadata in
ChartRenderer
add 3e9fdc4cdf0 test(paired-t-test): prove the v1 pipeline renders table
rows end-to-end
add b248c4d7c08 fix(tests): drop removed useLegacyApi prop from
ChartRenderer test metadata
add 28d977bc0cb fix(paired-t-test): render the table without the reactable
dependency
add 4483cb09f08 fix(paired-t-test): scroll the chart when tables overflow
its height
add dbac2448573 refactor(paired-t-test): use the antd Table and drop the
reactable dependency
add c9960002f18 fix(paired-t-test): bound the scroll container to the
chart height
add 00e95dcb874 chore(paired-t-test): drop the unused prop-types dependency
add a31210df087 fix(deck-multi): autozoom to layer data in the v1 fetch
path
add 4ce589dcda0 fix(deck-multi): correct the points-collection typing to
unblock tsc
add 89d64b89b86 fix(deck-multi): query layers against their real
datasource, not stale params
add 8f07ab48409 test(plugins): cover the migrated
calendar/chord/country-map registration
add 8dcb83fd3c1 feat(deck-multi): surface layer load failures in the chart
add 792d0fd2b68 fix(deck-arc): default missing layer colors instead of
crashing
add ae93dc2041b fix: repair type errors from removed useLegacyApi metadata
field
add e5b3ba9efc3 fix: cast Arc test color accessors through unknown for tsc
add 3256ee4fbb9 feat(timeseries): percent-change rebasing with a draggable
baseline (#42247)
add b4f8d87a490 feat(time-pivot): rebuild Time-series Period Pivot on
ECharts (#42245)
add fff5351a334 feat(bullet): rebuild the Bullet Chart on ECharts (#42225)
add a585a0901ee fix(time-table): escape backslashes in flattened labels;
actionable null-query-context errors
add 07a6406d975 style: prettier formatting for UPDATING.md and
SavedQueries test
add c6f8706aa11 test(charts): update warm-up cache assertions for the
actionable message
add 9f39fe3e10b test(embedded): store a query_context on the pivot
collapse fixture chart
add a4f74b09bb6 docs(embedded): document the iframe session cookie race in
the pivot spec
add 6dfae09cc5f chore: drop unused feature_flag_manager import after rebase
add 4e715f66dc8 chore(migrations): re-id compare-chart migration and
re-point bubble migration after rebase
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 (50b1caeefa5)
\
N -- N -- N refs/heads/remove-legacy-viz-pipeline (4e715f66dc8)
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/workflows/github-action-validator.yml | 2 +-
.github/workflows/pre-commit.yml | 2 +-
UPDATING.md | 42 +
.../configuration/configuring-superset.mdx | 8 +-
docs/admin_docs/configuration/sql-templating.mdx | 80 +-
docs/developer_docs/extensions/architecture.md | 36 +-
docs/developer_docs/extensions/overview.md | 21 +-
docs/developer_docs/extensions/quick-start.md | 13 +-
docs/developer_docs/extensions/storage.md | 465 ++++++++
docs/docs/using-superset/sql-templating.mdx | 18 +-
docs/sidebarTutorials.js | 2 +
docs/yarn.lock | 18 +-
helm/superset/Chart.yaml | 2 +-
helm/superset/README.md | 12 +-
helm/superset/templates/httproute.yaml | 12 +
helm/superset/templates/secret-env.yaml | 3 +
.../superset/templates/secret-superset-config.yaml | 3 +
helm/superset/templates/secret-ws.yaml | 3 +
helm/superset/tests/httproute_test.yaml | 92 ++
helm/superset/values.yaml | 18 +-
scripts/benchmark_migration.py | 2 +-
.../src/superset_core/extensions/context.py | 119 ++
.../superset_core/extensions/storage/__init__.py | 79 ++
.../src/superset_core/extensions/storage/dao.py | 70 ++
.../superset_core/extensions/storage/ephemeral.py | 162 +++
.../src/superset_core/extensions/storage/models.py | 74 ++
.../superset_core/extensions/storage/persistent.py | 243 +++++
.../src/superset_core/extensions/types.py | 12 +-
superset-embedded-sdk/package-lock.json | 6 +-
.../src/superset_extensions_cli/cli.py | 4 -
.../templates/frontend/webpack.config.js.j2 | 8 +-
superset-frontend/cypress-base/package-lock.json | 34 +-
superset-frontend/cypress-base/package.json | 2 +-
superset-frontend/jest.config.js | 4 +-
superset-frontend/package-lock.json | 708 ++++++++----
superset-frontend/package.json | 14 +-
superset-frontend/packages/superset-core/README.md | 1 +
.../packages/superset-core/package.json | 6 +-
.../packages/superset-core/src/common/index.ts | 2 -
.../packages/superset-core/src/extensions/index.ts | 71 ++
.../packages/superset-core/src/index.ts | 1 +
.../packages/superset-core/src/storage/index.ts | 218 ++++
.../src/operators/prophetOperator.ts | 31 +-
.../test/operators/prophetOperator.test.ts | 105 ++
.../packages/superset-ui-core/package.json | 2 +-
.../src/components/RlsBadge/RlsBadge.test.tsx | 121 +++
.../src/components/RlsBadge/index.tsx | 108 ++
.../superset-ui-core/src/components/index.ts | 5 +
.../playwright/helpers/api/dashboard.ts | 85 ++
.../playwright/pages/DashboardPage.ts | 9 +
.../tests/dashboard/clear-all-filters.spec.ts | 41 +-
.../tests/dashboard/dashboard-load.spec.ts | 257 +++++
.../tests/dashboard/delete-display-control.spec.ts | 41 +-
.../tests/dashboard/gauge-interval-colors.spec.ts | 38 +-
.../mixed-chart-dashboard-filters.spec.ts | 41 +-
.../tests/embedded/pivot-collapse-state.spec.ts | 37 +-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 68 +-
.../test/buildQuery.test.ts | 250 ++++-
.../scripts/Country Map GeoJSON Generator.ipynb | Bin 11681332 -> 11683742
bytes
.../src/countries/kenya.geojson | Bin 190196 -> 160739
bytes
.../src/Heatmap/transformProps.ts | 11 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 73 +-
.../test/Heatmap/transformProps.test.ts | 165 +++
.../test/components/Echart.test.tsx | 17 +
.../src/PivotTableChart.tsx | 109 +-
.../src/plugin/buildQuery.ts | 68 +-
.../src/plugin/controlPanel.tsx | 45 +-
.../src/plugin/transformProps.ts | 74 +-
.../src/plugin/utilities.ts | 242 +++++
.../src/react-pivottable/TableRenderers.tsx | 20 +-
.../src/react-pivottable/utilities.ts | 194 ++--
.../plugins/plugin-chart-pivot-table/src/types.ts | 22 +-
.../test/PivotTableChart.test.tsx | 50 +-
.../test/plugin/buildQuery.test.ts | 60 +-
.../test/plugin/transformProps.test.ts | 153 ++-
.../test/plugin/utilities.test.ts | 466 ++++++++
.../react-pivottable/nonAdditiveTotals.test.ts | 69 ++
.../test/react-pivottable/tableRenders.test.tsx | 138 ++-
.../plugin-chart-table/test/buildQuery.test.ts | 17 +
.../src/SqlLab/actions/sqlLab.test.ts | 60 +-
.../components/PopEditorTab/PopEditorTab.test.tsx | 23 +-
.../src/SqlLab/components/PopEditorTab/index.tsx | 46 +-
.../src/components/Chart/Chart.test.tsx | 21 +-
superset-frontend/src/components/Chart/Chart.tsx | 24 +
.../src/components/PanelToolbar/index.tsx | 2 +-
.../core/extensions/index.test.ts} | 12 +-
superset-frontend/src/core/extensions/index.ts | 12 +-
superset-frontend/src/core/index.ts | 1 +
.../src/core/storage/binaryCodec.test.ts | 109 ++
superset-frontend/src/core/storage/binaryCodec.ts | 65 ++
.../src/core/storage/ephemeralState.test.ts | 170 +++
.../src/core/storage/ephemeralState.ts | 100 ++
.../types.ts => src/core/storage/index.ts} | 17 +-
.../src/core/storage/localState.test.ts | 96 ++
superset-frontend/src/core/storage/localState.ts | 67 ++
.../src/core/storage/persistentState.test.ts | 261 +++++
.../src/core/storage/persistentState.ts | 143 +++
.../AnnotationLayer.subdirectory.test.tsx | 87 ++
.../controls/DatasourceControl/index.tsx | 6 +
.../src/extensions/ExtensionContext.test.ts | 60 +
.../src/extensions/ExtensionContext.ts | 78 ++
.../src/extensions/ExtensionsLoader.test.ts | 267 ++++-
.../src/extensions/ExtensionsLoader.ts | 123 ++-
.../src/extensions/webpackFederation.d.ts | 63 ++
superset-frontend/src/features/home/RightMenu.tsx | 4 +-
.../src/pages/DatasetList/DatasetList.test.tsx | 34 +
.../pages/DatasetList/DatasetList.testHelpers.tsx | 31 +
superset-frontend/src/pages/DatasetList/index.tsx | 7 +
superset-frontend/src/pages/Login/Login.test.tsx | 281 ++++-
superset-frontend/src/pages/Login/index.tsx | 5 +-
.../src/pages/Register/Register.test.tsx | 105 +-
superset-frontend/src/utils/pathUtils.test.ts | 18 +
superset-frontend/src/views/App.tsx | 57 +-
superset-frontend/webpack.config.js | 4 +
superset-websocket/package-lock.json | 8 +-
superset-websocket/package.json | 2 +-
superset/app.py | 8 +
superset/charts/schemas.py | 11 +
superset/cli/test_db.py | 3 +
superset/commands/datasource/list.py | 23 +
superset/commands/explore/get.py | 21 +
superset/common/grouping_sets.py | 117 ++
superset/common/query_context_processor.py | 81 +-
superset/common/query_object.py | 4 +
superset/common/utils/query_cache_manager.py | 11 +-
superset/config.py | 36 +
superset/connectors/sqla/utils.py | 15 +
superset/core/api/core_api_injection.py | 56 +-
superset/core/mcp/core_mcp_injection.py | 6 +-
superset/daos/dataset.py | 358 +++++-
superset/datasets/api.py | 60 +
superset/db_engine_specs/base.py | 36 +
superset/db_engine_specs/bigquery.py | 1 +
superset/db_engine_specs/clickhouse.py | 12 +
superset/db_engine_specs/gsheets.py | 1 +
superset/db_engine_specs/hive.py | 5 +
superset/db_engine_specs/postgres.py | 1 +
superset/db_engine_specs/presto.py | 6 +
superset/db_engine_specs/snowflake.py | 1 +
superset/db_engine_specs/trino.py | 1 +
superset/explore/schemas.py | 35 +
superset/extensions/context.py | 136 ++-
.../common => extensions/storage}/__init__.py | 14 +-
superset/extensions/storage/api.py | 744 +++++++++++++
superset/extensions/storage/codecs.py | 68 ++
superset/extensions/storage/ephemeral.py | 141 +++
superset/extensions/storage/ephemeral_dao.py | 161 +++
superset/extensions/storage/filters.py | 45 +
superset/extensions/storage/persistent.py | 244 +++++
superset/extensions/storage/persistent_dao.py | 655 +++++++++++
superset/extensions/storage/persistent_model.py | 139 +++
superset/extensions/storage/utils.py | 112 ++
superset/initialization/__init__.py | 2 +
superset/jinja_context.py | 43 +-
superset/key_value/types.py | 17 +
superset/mcp_service/annotation_layer/schemas.py | 167 +--
superset/mcp_service/chart/schemas.py | 133 +--
superset/mcp_service/chart/tool/generate_chart.py | 11 +-
superset/mcp_service/chart/tool/list_charts.py | 9 -
superset/mcp_service/common/pagination_schemas.py | 182 ++++
superset/mcp_service/dashboard/schemas.py | 133 +--
superset/mcp_service/database/schemas.py | 126 +--
superset/mcp_service/dataset/schemas.py | 163 ++-
superset/mcp_service/middleware.py | 495 +--------
superset/mcp_service/query/schemas.py | 109 +-
superset/mcp_service/report/schemas.py | 122 +--
superset/mcp_service/rls/schemas.py | 89 +-
superset/mcp_service/role/schemas.py | 109 +-
superset/mcp_service/saved_query/schemas.py | 131 +--
superset/mcp_service/tag/schemas.py | 103 +-
superset/mcp_service/task/schemas.py | 103 +-
superset/mcp_service/theme/schemas.py | 100 +-
superset/mcp_service/user/schemas.py | 109 +-
superset/mcp_service/utils/permissions_utils.py | 289 +----
...13_10-20_4451805bbaa1_remove_double_percents.py | 58 +-
...d4e5f6a7b8c9_migrate_bubble_chart_to_echarts.py | 4 +-
...360afb61ed_migrate_compare_chart_to_echarts.py} | 4 +-
...-00_e5f6a7b8c9d0_add_extension_storage_table.py | 109 ++
superset/models/core.py | 2 +
superset/models/helpers.py | 120 +-
superset/sql/parse.py | 25 +
superset/superset_typing.py | 2 +
superset/tasks/decorators.py | 4 +-
superset/utils/cache_manager.py | 28 +-
superset/utils/encrypt.py | 87 ++
superset/utils/pandas_postprocessing/boxplot.py | 10 +-
superset/utils/pandas_postprocessing/prophet.py | 2 +-
superset/views/base.py | 4 +-
tests/integration_tests/dao/conftest.py | 1 +
tests/integration_tests/datasets/api_tests.py | 2 +
tests/integration_tests/fixtures/datasource.py | 4 +-
.../composite_pk_association_tables__tests.py | 4 +-
.../migrations/composite_pk_round_trip__tests.py | 6 +-
.../integration_tests/non_additive_totals_tests.py | 315 ++++++
tests/unit_tests/charts/test_filters.py | 3 +-
.../unit_tests/charts/test_non_additive_totals.py | 136 +++
tests/unit_tests/commands/datasource/list_test.py | 60 +-
.../commands/explore/test_get_explore_rls.py | 123 +++
tests/unit_tests/common/test_grouping_sets.py | 112 ++
.../unit_tests/common/test_query_cache_manager.py | 57 +
.../common/test_query_context_processor.py | 105 ++
tests/unit_tests/conftest.py | 2 +-
tests/unit_tests/connectors/sqla/models_test.py | 10 +-
tests/unit_tests/connectors/sqla/utils_test.py | 103 +-
tests/unit_tests/dao/dataset_rls_test.py | 496 +++++++++
tests/unit_tests/databases/filters_test.py | 4 +-
.../unit_tests/db_engine_specs/test_clickhouse.py | 50 +
.../test_grouping_sets_capability.py | 59 +
tests/unit_tests/db_engine_specs/test_gsheets.py | 2 +
tests/unit_tests/db_engine_specs/test_sqlite.py | 2 +-
.../unit_tests/extensions/storage}/__init__.py | 0
tests/unit_tests/extensions/storage/conftest.py | 64 ++
tests/unit_tests/extensions/storage/test_api.py | 1146 ++++++++++++++++++++
tests/unit_tests/extensions/storage/test_codecs.py | 94 ++
.../unit_tests/extensions/storage/test_context.py | 124 +++
.../extensions/storage/test_ephemeral.py | 276 +++++
.../extensions/storage/test_ephemeral_dao.py | 323 ++++++
.../unit_tests/extensions/storage/test_filters.py | 78 ++
.../extensions/storage/test_persistent.py | 318 ++++++
.../extensions/storage/test_persistent_dao.py | 957 ++++++++++++++++
tests/unit_tests/extensions/storage/test_utils.py | 219 ++++
tests/unit_tests/extensions/test_sqlalchemy.py | 12 +-
tests/unit_tests/key_value/codec_test.py | 14 +
.../mcp_service/dataset/test_dataset_schemas.py | 15 +
.../mcp_service/dataset/tool/test_query_dataset.py | 321 ++++++
.../mcp_service/utils/test_permissions_utils.py | 107 --
.../composite_pk_association_tables_test.py | 2 +-
.../test_add_deleted_at_to_dashboards.py | 2 +-
.../migrations/test_add_deleted_at_to_slices.py | 2 +-
.../migrations/test_add_deleted_at_to_tables.py | 2 +-
...rip_metricsqlexpressions_from_ag_grid_params.py | 2 +-
tests/unit_tests/models/core_test.py | 6 +-
tests/unit_tests/models/helpers_test.py | 512 +++++++++
.../models/owner_association_tables_test.py | 2 +-
.../pandas_postprocessing/test_boxplot.py | 22 +
.../pandas_postprocessing/test_prophet.py | 34 +
tests/unit_tests/queries/query_object_test.py | 1 +
.../security/exclude_users_filter_test.py | 2 +-
.../unit_tests/semantic_layers/decorators_test.py | 4 +-
tests/unit_tests/sql/parse_tests.py | 27 +
tests/unit_tests/utils/filters_test.py | 9 +-
.../utils/pandas_sqlalchemy_compat_test.py | 2 +-
tests/unit_tests/versioning/test_listener.py | 2 +-
tests/unit_tests/views/test_bootstrap_auth.py | 49 +-
244 files changed, 17707 insertions(+), 3664 deletions(-)
create mode 100644 docs/developer_docs/extensions/storage.md
create mode 100644 helm/superset/tests/httproute_test.yaml
create mode 100644 superset-core/src/superset_core/extensions/context.py
create mode 100644
superset-core/src/superset_core/extensions/storage/__init__.py
create mode 100644 superset-core/src/superset_core/extensions/storage/dao.py
create mode 100644
superset-core/src/superset_core/extensions/storage/ephemeral.py
create mode 100644 superset-core/src/superset_core/extensions/storage/models.py
create mode 100644
superset-core/src/superset_core/extensions/storage/persistent.py
create mode 100644
superset-frontend/packages/superset-core/src/storage/index.ts
create mode 100644
superset-frontend/packages/superset-ui-core/src/components/RlsBadge/RlsBadge.test.tsx
create mode 100644
superset-frontend/packages/superset-ui-core/src/components/RlsBadge/index.tsx
create mode 100644
superset-frontend/playwright/tests/dashboard/dashboard-load.spec.ts
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/src/plugin/utilities.ts
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/test/plugin/utilities.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/test/react-pivottable/nonAdditiveTotals.test.ts
copy
superset-frontend/{packages/superset-ui-core/src/components/Flex/Flex.test.tsx
=> src/core/extensions/index.test.ts} (76%)
create mode 100644 superset-frontend/src/core/storage/binaryCodec.test.ts
create mode 100644 superset-frontend/src/core/storage/binaryCodec.ts
create mode 100644 superset-frontend/src/core/storage/ephemeralState.test.ts
create mode 100644 superset-frontend/src/core/storage/ephemeralState.ts
copy
superset-frontend/{packages/superset-ui-core/src/components/AsyncEsmComponent/types.ts
=> src/core/storage/index.ts} (75%)
create mode 100644 superset-frontend/src/core/storage/localState.test.ts
create mode 100644 superset-frontend/src/core/storage/localState.ts
create mode 100644 superset-frontend/src/core/storage/persistentState.test.ts
create mode 100644 superset-frontend/src/core/storage/persistentState.ts
create mode 100644
superset-frontend/src/explore/components/controls/AnnotationLayerControl/AnnotationLayer.subdirectory.test.tsx
create mode 100644 superset-frontend/src/extensions/ExtensionContext.test.ts
create mode 100644 superset-frontend/src/extensions/ExtensionContext.ts
create mode 100644 superset-frontend/src/extensions/webpackFederation.d.ts
create mode 100644 superset/common/grouping_sets.py
copy superset/{mcp_service/common => extensions/storage}/__init__.py (73%)
create mode 100644 superset/extensions/storage/api.py
create mode 100644 superset/extensions/storage/codecs.py
create mode 100644 superset/extensions/storage/ephemeral.py
create mode 100644 superset/extensions/storage/ephemeral_dao.py
create mode 100644 superset/extensions/storage/filters.py
create mode 100644 superset/extensions/storage/persistent.py
create mode 100644 superset/extensions/storage/persistent_dao.py
create mode 100644 superset/extensions/storage/persistent_model.py
create mode 100644 superset/extensions/storage/utils.py
create mode 100644 superset/mcp_service/common/pagination_schemas.py
rename
superset/migrations/versions/{2026-07-02_21-30_e5f6a7b8c9d0_migrate_compare_chart_to_echarts.py
=> 2026-07-02_21-30_88360afb61ed_migrate_compare_chart_to_echarts.py} (97%)
create mode 100644
superset/migrations/versions/2026-07-07_12-00_e5f6a7b8c9d0_add_extension_storage_table.py
create mode 100644 tests/integration_tests/non_additive_totals_tests.py
create mode 100644 tests/unit_tests/charts/test_non_additive_totals.py
create mode 100644 tests/unit_tests/commands/explore/test_get_explore_rls.py
create mode 100644 tests/unit_tests/common/test_grouping_sets.py
create mode 100644 tests/unit_tests/common/test_query_cache_manager.py
create mode 100644 tests/unit_tests/dao/dataset_rls_test.py
create mode 100644
tests/unit_tests/db_engine_specs/test_grouping_sets_capability.py
copy {scripts => tests/unit_tests/extensions/storage}/__init__.py (100%)
create mode 100644 tests/unit_tests/extensions/storage/conftest.py
create mode 100644 tests/unit_tests/extensions/storage/test_api.py
create mode 100644 tests/unit_tests/extensions/storage/test_codecs.py
create mode 100644 tests/unit_tests/extensions/storage/test_context.py
create mode 100644 tests/unit_tests/extensions/storage/test_ephemeral.py
create mode 100644 tests/unit_tests/extensions/storage/test_ephemeral_dao.py
create mode 100644 tests/unit_tests/extensions/storage/test_filters.py
create mode 100644 tests/unit_tests/extensions/storage/test_persistent.py
create mode 100644 tests/unit_tests/extensions/storage/test_persistent_dao.py
create mode 100644 tests/unit_tests/extensions/storage/test_utils.py
delete mode 100644 tests/unit_tests/mcp_service/utils/test_permissions_utils.py