This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch mobile-dashboard-support
in repository https://gitbox.apache.org/repos/asf/superset.git
discard 2bb7aaab579 feat(mobile): consumption-only mobile experience behind
MOBILE_CONSUMPTION_MODE
add 515dfef9554 fix(dashboard import): Importing existing dashboard via UI
won't update charts and datasets (#34880)
add f03a66db9c9 fix(dataset): apply HOURS OFFSET to all temporal columns,
not just the time column (#41489)
add 3a3f087869c fix(native-filters): support double-quote escaping for
comma in filte… (#39068)
add 1f81b700c13 chore(ci): upgrade GHA runner image to Ubuntu 26.04
(#42191)
add e0d0eb6d020 fix(build): deterministic echarts locale imports;
fingerprint loaded config (#42154)
add 15bc73facf4 test(table): add regression test for pagination reset on
cell click (#42155)
add 9178faf9b1b refactor: set cascade_backrefs=False for Query (#42210)
add 48faca5b8de refactor: set cascade_backrefs=False for SqlaTable (#42213)
add d65a816b398 chore(lint): toggle `import/no-named-as-default` to error
level + fix all violations (#42214)
add 940e2c34a25 fix(Calendar Heatmap): Add Back chart options for Calendar
Heatmap (#26230)
add 64053271e87 fix(views): remove stray space in @deprecated new_target
log message (#42218)
add 590357731b2 feat(ci): cancel CI runs when hold label applied, re-run
on removal (#40387)
add 158e3219922 chore(deps): bump axios from 1.16.0 to 1.18.1 in
/superset-frontend (#42251)
add b3757870cce fix(sqllab): apply SQL_QUERY_MUTATOR in SQL Lab when
MUTATE_AFTER_SPLIT is set (#41127)
add abd6dc8e448 refactor: set cascade_backrefs=False for SavedQuery
(#42212)
add 034823e99b6 chore: replace deprecated
datetime.utcnow()/utcfromtimestamp() (#41502)
add b4529c2654f feat: add distance unit (#24444)
add 4b659da5c4c fix(reports): positive per-tile chart readiness check for
tiled screenshots (#42119)
add 8296fe8ce46 fix(home): restore navigation for saved query cards
(#41912)
add e4005f02c6b fix(sqla): render Jinja templates in calculated columns
used via orderby adhoc metrics (#41870)
add 2d3cbc162e4 fix(db_engine_specs): map var_string to STRING for
MySQL/StarRocks (#41868)
add a1d4cda0cb6 chore(deps-dev): bump typescript-eslint from 8.63.0 to
8.64.0 in /docs in the typescript-eslint group (#42259)
add bafe5ad9ba3 chore(deps): bump actions/setup-java from 5.5.0 to 5.6.0
(#42260)
add f7517168675 fix(trino): quote nested ROW field paths per-segment in
physical column expressions (#41946)
add 6c58afe6ac4 refactor: do not cascade to TableColumn (#42222)
add 00cb3037e76 feat(dashboard): export dashboard chart data to Excel
(async, S3 + email) (#41133)
add 5efbd5b157a chore(deps-dev): bump brace-expansion from 5.0.6 to 5.0.7
in /superset-websocket (#42267)
add 7f4d151a37d chore(deps): bump body-parser from 2.2.1 to 2.3.0 in
/superset-websocket/utils/client-ws-app (#42264)
add 3fa7cc59862 chore(deps): bump react-diff-viewer-continued from 4.3.0
to 4.4.0 in /superset-frontend (#42263)
add 666b6805c40 test(sql): prove Oracle GROUP BY stays explicit for
virtual-dataset charts (#42255)
add b362d360193 chore: remove deck.gl JavaScript tooltip controls and
ENABLE_JAVASCRIPT_CONTROLS (#42126)
add df34b5d2775 fix(drill-detail): paginate Elasticsearch samples via
engine cursor (#39509)
add 1a862476e1e fix(dashboard): add cacheKey, dashboardId, and format
context to screenshot download error logs (#42121)
add f999afaac01 fix(mcp): coerce float rowcount to int in ChartData to
prevent PydanticSerializationError (#42140)
add e1a265447f6 fix(charts): use chart name in CSV/XLSX/zip export
filenames (#42193)
add f9378baba8d test(sqla): add the jinja orderby calculated column to the
session (#42274)
add 706a65cb028 fix(docs): allow *.run.app in CSP for the Kapa widget
backend (#42276)
add f2967264d28 fix(ci): diff pre-commit changed files against the live
base branch tip (#42152)
add 40a13883ea6 refactor: do not cascade to SqlMetric (#42221)
add 0dd06f3b7b3 fix: dashboard filter regress (#35218)
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 fdfe7ee7d26 feat(mobile): consumption-only mobile experience behind
MOBILE_CONSUMPTION_MODE
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 (2bb7aaab579)
\
N -- N -- N refs/heads/mobile-dashboard-support (fdfe7ee7d26)
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/bump-python-package.yml | 2 +-
.github/workflows/check-python-deps.yml | 2 +-
.github/workflows/check_db_migration_confict.yml | 2 +-
.github/workflows/codeql-analysis.yml | 4 +-
.github/workflows/dependency-review.yml | 4 +-
.github/workflows/docker.yml | 8 +-
.github/workflows/embedded-sdk-release.yml | 2 +-
.github/workflows/embedded-sdk-test.yml | 2 +-
.github/workflows/generate-FOSSA-report.yml | 6 +-
.github/workflows/github-action-validator.yml | 4 +-
.github/workflows/hold-label-ci-gate.yml | 115 ++
.github/workflows/issue_creation.yml | 2 +-
.github/workflows/labeler.yml | 2 +-
.github/workflows/latest-release-tag.yml | 2 +-
.github/workflows/license-check.yml | 4 +-
.github/workflows/no-hold-label.yml | 2 +-
.github/workflows/pr-lint.yml | 2 +-
.github/workflows/pre-commit.yml | 24 +-
.github/workflows/release.yml | 4 +-
.../workflows/scheduled-docker-image-refresh.yml | 6 +-
.github/workflows/superset-app-cli.yml | 2 +-
.github/workflows/superset-docs-deploy.yml | 6 +-
.github/workflows/superset-docs-verify.yml | 4 +-
.github/workflows/superset-e2e.yml | 11 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 12 +-
.github/workflows/superset-helm-lint-test.yml | 2 +-
.github/workflows/superset-helm-release.yml | 2 +-
.github/workflows/superset-playwright.yml | 15 +-
.../workflows/superset-python-integrationtest.yml | 10 +-
.github/workflows/superset-python-presto-hive.yml | 6 +-
.github/workflows/superset-python-unittest.yml | 6 +-
.../workflows/superset-translations-comment.yml | 2 +-
.github/workflows/superset-translations.yml | 4 +-
.github/workflows/superset-websocket.yml | 2 +-
.github/workflows/supersetbot.yml | 2 +-
.github/workflows/tag-release.yml | 6 +-
.github/workflows/tech-debt.yml | 4 +-
.github/workflows/welcome-new-users.yml | 2 +-
UPDATING.md | 107 ++
docker/pythonpath_dev/superset_config.py | 1 +
.../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 ++++++++
.../using-superset/exporting-dashboard-data.mdx | 99 ++
docs/docs/using-superset/sql-templating.mdx | 18 +-
docs/package.json | 2 +-
docs/sidebarTutorials.js | 2 +
docs/static/.htaccess | 3 +-
docs/static/feature-flags.json | 6 -
docs/yarn.lock | 138 +--
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 +-
pyproject.toml | 4 +
pytest.ini | 10 +-
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/.storybook/main.mjs | 2 +-
superset-frontend/cypress-base/package-lock.json | 34 +-
superset-frontend/cypress-base/package.json | 2 +-
superset-frontend/jest.config.js | 6 +-
superset-frontend/oxlint.json | 7 +-
superset-frontend/package-lock.json | 900 ++++++++++-----
superset-frontend/package.json | 18 +-
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 +-
.../src/shared-controls/dndControls.tsx | 4 +-
.../src/utils/D3Formatting.ts | 3 +
.../test/operators/prophetOperator.test.ts | 105 ++
.../packages/superset-ui-core/package.json | 2 +-
.../src/components/DesignSystem.stories.tsx | 6 +-
.../DropdownContainer/Overview.stories.tsx | 6 +-
.../MetadataBar/MetadataBarOverview.stories.tsx | 46 +-
.../src/components/PageHeaderWithActions/index.tsx | 20 +-
.../src/components/RlsBadge/RlsBadge.test.tsx | 121 +++
.../src/components/RlsBadge/index.tsx | 108 ++
.../src/components/Select/AsyncSelect.test.tsx | 22 +
.../src/components/Select/AsyncSelect.tsx | 188 +++-
.../src/components/Select/Select.test.tsx | 107 ++
.../src/components/Select/Select.tsx | 212 ++--
.../src/components/Select/utils.test.ts | 140 +++
.../src/components/Select/utils.tsx | 75 +-
.../src/components/Table/TableOverview.stories.tsx | 34 +-
.../ActionCell/ActionCell.overview.tsx | 6 +-
.../superset-ui-core/src/components/index.ts | 5 +
...NDigitFormatter.ts => createLengthFormatter.ts} | 32 +-
.../superset-ui-core/src/number-format/index.ts | 1 +
.../superset-ui-core/src/utils/featureFlags.ts | 2 -
.../factories/createLengthFormatter.test.ts | 68 ++
.../test/number-format/index.test.ts | 2 +
.../packages/superset-ui-switchboard/src/index.ts | 4 +-
superset-frontend/playwright.config.ts | 18 +
.../generators/docs/mobile-screenshots.spec.ts | 3 +-
.../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 +-
.../legacy-plugin-chart-calendar/src/Calendar.ts | 16 +-
.../src/controlPanel.ts | 37 +-
.../src/transformProps.ts | 4 +
.../scripts/Country Map GeoJSON Generator.ipynb | Bin 11681332 -> 11683742
bytes
.../src/countries/kenya.geojson | Bin 190196 -> 160739
bytes
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 68 +-
.../test/buildQuery.test.ts | 250 ++++-
.../src/Heatmap/transformProps.ts | 11 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 71 +-
.../test/Heatmap/transformProps.test.ts | 165 +++
.../test/components/Echart.test.tsx | 17 +
.../plugin-chart-echarts/types/external.d.ts | 8 +
.../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 ++-
.../plugins/plugin-chart-table/src/index.ts | 4 +-
.../plugin-chart-table/test/TableChart.test.tsx | 93 ++
.../plugin-chart-table/test/buildQuery.test.ts | 59 +-
.../plugins/preset-chart-deckgl/package.json | 2 -
.../src/CategoricalDeckGLContainer.tsx | 7 -
.../src/layers/Arc/buildQuery.ts | 16 +-
.../src/layers/Arc/controlPanel.ts | 13 -
.../src/layers/Arc/stories/Arc.stories.tsx | 4 -
.../src/layers/Arc/transformProps.ts | 17 +-
.../src/layers/Contour/Contour.tsx | 16 +-
.../src/layers/Contour/controlPanel.ts | 13 -
.../src/layers/Geojson/Geojson.test.tsx | 44 -
.../src/layers/Geojson/Geojson.tsx | 114 +-
.../src/layers/Geojson/buildQuery.ts | 14 +-
.../src/layers/Geojson/controlPanel.ts | 145 +--
.../preset-chart-deckgl/src/layers/Grid/Grid.tsx | 16 +-
.../src/layers/Grid/controlPanel.ts | 13 -
.../src/layers/Grid/stories/Grid.stories.tsx | 4 -
.../src/layers/Heatmap/Heatmap.tsx | 18 +-
.../src/layers/Heatmap/controlPanel.ts | 13 -
.../preset-chart-deckgl/src/layers/Hex/Hex.tsx | 17 +-
.../src/layers/Hex/controlPanel.ts | 13 -
.../src/layers/Hex/stories/Hex.stories.tsx | 4 -
.../preset-chart-deckgl/src/layers/Path/Path.tsx | 13 +-
.../src/layers/Path/buildQuery.test.ts | 2 -
.../src/layers/Path/buildQuery.ts | 9 -
.../src/layers/Path/controlPanel.ts | 13 -
.../src/layers/Path/stories/Path.stories.tsx | 4 -
.../src/layers/Path/transformProps.ts | 15 +-
.../src/layers/Polygon/Polygon.tsx | 9 +-
.../src/layers/Polygon/buildQuery.test.ts | 29 +-
.../src/layers/Polygon/buildQuery.ts | 9 -
.../src/layers/Polygon/controlPanel.ts | 12 +-
.../src/layers/Polygon/stories/Polygon.stories.tsx | 4 -
.../src/layers/Polygon/transformProps.ts | 6 +-
.../src/layers/Scatter/buildQuery.test.ts | 17 -
.../src/layers/Scatter/buildQuery.ts | 20 +-
.../src/layers/Scatter/controlPanel.ts | 13 -
.../src/layers/Scatter/stories/Scatter.stories.tsx | 4 -
.../src/layers/Scatter/transformProps.ts | 5 +-
.../src/layers/Screengrid/Screengrid.tsx | 16 +-
.../src/layers/Screengrid/controlPanel.ts | 13 -
.../Screengrid/stories/Screengrid.stories.tsx | 4 -
.../src/layers/buildQueryUtils.ts | 20 -
.../preset-chart-deckgl/src/layers/common.test.ts | 9 +-
.../preset-chart-deckgl/src/layers/common.tsx | 17 +-
.../src/layers/spatialUtils.test.ts | 19 +-
.../preset-chart-deckgl/src/layers/spatialUtils.ts | 48 +-
.../src/utilities/Shared_DeckGL.tsx | 87 --
.../src/utils/crossFiltersDataMask.test.ts | 46 -
.../src/utils/crossFiltersDataMask.ts | 8 +-
.../preset-chart-deckgl/src/utils/sandbox.ts | 65 --
.../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/ImportModal/index.tsx | 13 +-
.../src/components/ListView/ListView.test.tsx | 18 +-
.../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 +++
.../DashboardBuilder/DashboardWrapper.tsx | 8 +-
.../src/dashboard/components/SliceHeader/index.tsx | 8 +-
.../DownloadMenuItems/DownloadMenuItems.test.tsx | 148 ++-
.../components/menu/DownloadMenuItems/index.tsx | 71 +-
.../FilterBar/FilterBarSettings/index.tsx | 6 +-
.../FilterConfigurationLink.test.tsx | 21 +-
.../FilterBar/FilterControls/FilterControl.tsx | 10 +
.../components/nativeFilters/FilterBar/index.tsx | 3 +-
.../dashboard/hooks/useDownloadScreenshot.test.ts | 50 +
.../src/dashboard/hooks/useDownloadScreenshot.ts | 12 +-
.../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 | 18 +-
.../src/features/home/SavedQueries.test.tsx | 146 +++
.../src/features/home/SavedQueries.tsx | 24 +-
.../components/Select/SelectFilterPlugin.tsx | 8 +-
.../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/Home/index.tsx | 4 +-
superset-frontend/src/pages/Login/Login.test.tsx | 281 ++++-
superset-frontend/src/pages/Login/index.tsx | 5 +-
.../src/pages/Register/Register.test.tsx | 105 +-
.../src/setup/setupFormatters.test.ts | 1 +
superset-frontend/src/setup/setupFormatters.ts | 10 +
superset-frontend/src/utils/pathUtils.test.ts | 18 +
superset-frontend/src/views/App.tsx | 61 +-
superset-frontend/src/views/CRUD/hooks.ts | 4 +
superset-frontend/src/views/CRUD/utils.tsx | 3 +-
superset-frontend/webpack.config.js | 6 +-
superset-websocket/package-lock.json | 14 +-
superset-websocket/package.json | 2 +-
.../utils/client-ws-app/package-lock.json | 108 +-
superset/app.py | 8 +
superset/charts/data/api.py | 50 +-
superset/charts/data/dashboard_filter_context.py | 39 +-
superset/charts/schemas.py | 11 +
superset/cli/test_db.py | 3 +
.../commands/dashboard/importers/v1/__init__.py | 36 +-
superset/commands/dataset/duplicate.py | 11 +-
superset/commands/datasource/list.py | 23 +
superset/commands/explore/get.py | 21 +
superset/commands/logs/prune.py | 8 +-
superset/commands/report/execute.py | 73 +-
superset/commands/report/log_prune.py | 8 +-
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 | 108 +-
superset/connectors/sqla/models.py | 33 +-
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/daos/log.py | 4 +-
superset/daos/query.py | 6 +-
superset/dashboards/api.py | 152 +++
.../dashboards/excel_export}/__init__.py | 0
superset/dashboards/excel_export/email.py | 180 +++
superset/dashboards/excel_export/layout.py | 97 ++
superset/dashboards/excel_export/screenshot.py | 103 ++
superset/dashboards/schemas.py | 29 +-
superset/databases/schemas.py | 8 +
superset/datasets/api.py | 60 +
superset/db_engine_specs/base.py | 63 ++
superset/db_engine_specs/bigquery.py | 1 +
superset/db_engine_specs/clickhouse.py | 12 +
superset/db_engine_specs/elasticsearch.py | 146 ++-
superset/db_engine_specs/gsheets.py | 1 +
superset/db_engine_specs/hive.py | 5 +
superset/db_engine_specs/mysql.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/starrocks.py | 5 +
superset/db_engine_specs/trino.py | 8 +-
superset/examples/birth_names.py | 15 +-
.../examples/deckgl_demo/charts/Deck.gl_Path.yaml | 6 -
.../deckgl_demo/charts/Deck.gl_Polygons.yaml | 4 -
superset/examples/generic_loader.py | 11 +-
superset/examples/world_bank.py | 6 +-
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/chart_helpers.py | 4 -
superset/mcp_service/chart/schemas.py | 144 +--
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 +-
...-00_e5f6a7b8c9d0_add_extension_storage_table.py | 109 ++
superset/models/core.py | 2 +
superset/models/helpers.py | 185 +++-
superset/models/sql_lab.py | 25 +-
superset/security/manager.py | 6 +-
superset/sql/execution/celery_task.py | 44 +-
superset/sql/execution/executor.py | 117 +-
superset/sql/parse.py | 25 +
superset/sql_lab.py | 29 +-
superset/superset_typing.py | 8 +
superset/tasks/decorators.py | 4 +-
superset/tasks/export_dashboard_excel.py | 361 ++++++
superset/utils/cache.py | 10 +-
superset/utils/cache_manager.py | 28 +-
superset/utils/dates.py | 4 +-
superset/utils/encrypt.py | 87 ++
superset/utils/excel.py | 9 +-
superset/utils/excel_streaming.py | 250 +++++
superset/utils/pandas_postprocessing/boxplot.py | 10 +-
superset/utils/pandas_postprocessing/prophet.py | 2 +-
superset/utils/s3.py | 83 ++
superset/utils/screenshot_utils.py | 151 ++-
superset/utils/screenshots.py | 9 +-
superset/utils/webdriver.py | 22 +-
superset/views/base.py | 7 +-
superset/views/datasource/utils.py | 85 +-
superset/views/utils.py | 21 +-
tests/integration_tests/charts/commands_tests.py | 4 -
tests/integration_tests/conftest.py | 84 +-
tests/integration_tests/dao/conftest.py | 1 +
tests/integration_tests/dashboards/api_tests.py | 169 +++
tests/integration_tests/databases/api_tests.py | 8 +
tests/integration_tests/datasets/api_tests.py | 4 +
tests/integration_tests/datasource_tests.py | 15 +-
.../db_engine_specs/base_engine_spec_tests.py | 51 +-
.../db_engine_specs/bigquery_tests.py | 4 +-
.../db_engine_specs/datastore_tests.py | 4 +-
tests/integration_tests/fixtures/datasource.py | 5 +-
.../fixtures/deck_geojson_form_data.json | 6 -
.../fixtures/deck_path_form_data.json | 6 -
.../integration_tests/fixtures/energy_dashboard.py | 6 +-
tests/integration_tests/fixtures/importexport.py | 4 -
tests/integration_tests/import_export_tests.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/integration_tests/reports/commands_tests.py | 4 +-
tests/integration_tests/sqla_models_tests.py | 88 +-
tests/integration_tests/sqllab_tests.py | 6 +
tests/integration_tests/viz_tests.py | 5 +-
tests/unit_tests/charts/test_chart_data_api.py | 129 ++-
.../charts/test_dashboard_filter_context.py | 172 +++
tests/unit_tests/charts/test_filters.py | 3 +-
.../unit_tests/charts/test_non_additive_totals.py | 136 +++
.../commands/dashboard/importers/v1/assets_test.py | 215 ++++
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 | 97 +-
tests/unit_tests/connectors/sqla/utils_test.py | 103 +-
tests/unit_tests/dao/dataset_rls_test.py | 496 +++++++++
.../dashboards/test_excel_export_email.py | 157 +++
.../dashboards/test_excel_export_layout.py | 105 ++
.../dashboards/test_excel_export_screenshot.py | 164 +++
tests/unit_tests/databases/api_test.py | 2 +
tests/unit_tests/databases/filters_test.py | 4 +-
.../test_tdengine.py => databases/test_schemas.py} | 27 +-
tests/unit_tests/db_engine_specs/test_base.py | 23 +
.../unit_tests/db_engine_specs/test_clickhouse.py | 50 +
.../db_engine_specs/test_elasticsearch.py | 376 +++++++
.../test_grouping_sets_capability.py | 59 +
tests/unit_tests/db_engine_specs/test_gsheets.py | 2 +
tests/unit_tests/db_engine_specs/test_mysql.py | 1 +
tests/unit_tests/db_engine_specs/test_sqlite.py | 2 +-
tests/unit_tests/db_engine_specs/test_starrocks.py | 1 +
tests/unit_tests/db_engine_specs/test_trino.py | 5 +
.../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/chart/test_chart_helpers.py | 12 +-
.../mcp_service/chart/tool/test_get_chart_data.py | 58 +
.../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 | 49 +-
tests/unit_tests/models/helpers_test.py | 669 +++++++++++-
.../models/owner_association_tables_test.py | 2 +-
tests/unit_tests/models/test_helpers_offset.py | 125 +++
.../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/execution/conftest.py | 11 +
tests/unit_tests/sql/execution/test_celery_task.py | 199 +++-
tests/unit_tests/sql/execution/test_executor.py | 111 +-
tests/unit_tests/sql/parse_tests.py | 56 +
tests/unit_tests/sql_lab_test.py | 210 ++++
.../tasks/test_export_dashboard_excel.py | 401 +++++++
tests/unit_tests/utils/excel_streaming_tests.py | 267 +++++
tests/unit_tests/utils/filters_test.py | 9 +-
.../utils/pandas_sqlalchemy_compat_test.py | 2 +-
tests/unit_tests/utils/s3_tests.py | 95 ++
tests/unit_tests/utils/test_screenshot_utils.py | 207 +++-
tests/unit_tests/utils/webdriver_test.py | 1 +
tests/unit_tests/versioning/test_listener.py | 2 +-
{scripts => tests/unit_tests/views}/__init__.py | 0
tests/unit_tests/views/datasource/test_utils.py | 396 +++++++
tests/unit_tests/views/test_base.py | 19 +
tests/unit_tests/views/test_bootstrap_auth.py | 49 +-
tests/unit_tests/views/test_utils.py | 48 -
474 files changed, 26317 insertions(+), 5580 deletions(-)
create mode 100644 .github/workflows/hold-label-ci-gate.yml
create mode 100644 docs/developer_docs/extensions/storage.md
create mode 100644 docs/docs/using-superset/exporting-dashboard-data.mdx
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/packages/superset-ui-core/src/components/Select/utils.test.ts
copy
superset-frontend/packages/superset-ui-core/src/number-format/factories/{createSiAtMostNDigitFormatter.ts
=> createLengthFormatter.ts} (61%)
create mode 100644
superset-frontend/packages/superset-ui-core/test/number-format/factories/createLengthFormatter.test.ts
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
delete mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/utils/sandbox.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-frontend/src/features/home/SavedQueries.test.tsx
create mode 100644 superset/common/grouping_sets.py
copy {scripts => superset/dashboards/excel_export}/__init__.py (100%)
create mode 100644 superset/dashboards/excel_export/email.py
create mode 100644 superset/dashboards/excel_export/layout.py
create mode 100644 superset/dashboards/excel_export/screenshot.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
create mode 100644
superset/migrations/versions/2026-07-07_12-00_e5f6a7b8c9d0_add_extension_storage_table.py
create mode 100644 superset/tasks/export_dashboard_excel.py
create mode 100644 superset/utils/excel_streaming.py
create mode 100644 superset/utils/s3.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/dashboard/importers/v1/assets_test.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/dashboards/test_excel_export_email.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_layout.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_screenshot.py
copy tests/unit_tests/{db_engine_specs/test_tdengine.py =>
databases/test_schemas.py} (56%)
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
create mode 100644 tests/unit_tests/models/test_helpers_offset.py
create mode 100644 tests/unit_tests/tasks/test_export_dashboard_excel.py
create mode 100644 tests/unit_tests/utils/excel_streaming_tests.py
create mode 100644 tests/unit_tests/utils/s3_tests.py
copy {scripts => tests/unit_tests/views}/__init__.py (100%)
create mode 100644 tests/unit_tests/views/datasource/test_utils.py
delete mode 100644 tests/unit_tests/views/test_utils.py