This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a change to branch codex/fix-slack-v1-private-channel-reports
in repository https://gitbox.apache.org/repos/asf/superset.git
discard ed38d87a3d0 fix(reports): harden Slack fallback delivery
discard 7d0c7384d72 test(reports): use bound state in send error tests
discard a27d7d2066f fix(reports): address Slack fallback review feedback
discard 5429cea13bb fix(reports): harden Slack v1 fallback delivery
discard d9f9fb107ea test(reports): align Slack v1 fallback integration coverage
discard b27d58d28b5 fix(reports): preserve Slack v1 private-channel text
delivery
add eef3dac72f8 fix(nav): prevent top navbar from flashing to vertical
layout on load (#40781)
add f8cfa459efb fix(presto): fix latest_sub_partition guard bypass +
escape partition filter values (#41877)
add a99c98c6fee feat(mcp): waterfall chart type plugin (#42070)
add 5b837e844e9 fix(sqla): cast native UUID columns to string for
LIKE/ILIKE filters (#41804)
add c84a154b524 feat(helm): support additive extra init containers (#42114)
add 5750d82426c fix(pandas_postprocessing): avoid FutureWarning for
mean/median in boxplot (#42004)
add 5bf26f77f82 fix(label): restore spacing between icon and label text
(#42141)
add 6a330c251b3 chore(deps): bump redis from 5.3.1 to 8.0.1 (#41813)
add 91f814abead feat(pie): add the ability to make half a donut (#35459)
add 68297886d42 fix(ci): stop concurrency cancellation from bricking
required checks on approval-gated PRs (#42148)
add ce8d4397cdd test(jinja): prove current_user_* macros produce
collision-free cache keys (#42122)
add 25f6c6c80bc fix(pivot-table): add bottom border to last grouped row
(#36081)
add b432f8c9175 fix(docs): use modern driver package for CrateDB (#42125)
add 0f61d9a3fb8 fix(bigquery): ensure BigQuery client uses project from
engine URI (#41975)
add 45354994a62 build(deps): update @rjsf deps to v6 (#41955)
add bda62cb28df chore(deps-dev): bump hdbcli from 2.29.23 to 2.29.25
(#42170)
add e495fd80f62 chore(deps-dev): bump eslint from 10.6.0 to 10.7.0 in
/superset-frontend (#42188)
add cce77b42f64 chore(deps-dev): bump @formatjs/intl-durationformat from
0.10.16 to 0.10.17 in /superset-frontend (#42184)
add f6acf68dfaa chore(deps): bump react-intersection-observer from 10.0.3
to 10.1.0 in /superset-frontend (#42181)
add 8299e7f87c0 chore(deps-dev): bump storybook from 10.4.6 to 10.5.0 in
/superset-frontend (#42185)
add dab5f308425 chore(deps): bump @docusaurus/faster from 3.10.1 to 3.10.2
in /docs (#42179)
add a58012fc0f2 chore(deps): bump the docusaurus-openapi group in /docs
with 2 updates (#42195)
add 79eff6b6f12 chore(deps): bump greenlet from 3.5.1 to 3.5.3 (#42166)
add b6ce28ff729 chore(deps): bump typing-extensions from 4.15.0 to 4.16.0
(#42165)
add 3c233946759 chore(deps-dev): bump eslint from 10.6.0 to 10.7.0 in
/superset-websocket (#42159)
add 74703906df3 chore(deps): bump dom-to-image-more from 3.10.0 to 3.10.2
in /superset-frontend (#42180)
add 42e5640f609 chore(deps-dev): update nzalchemy requirement from
<11.2,>=11.0.2 to >=11.1.2,<11.2 (#42164)
add 2ada286ee92 chore(deps-dev): update pydynamodb requirement from
>=0.4.2 to >=0.8.2 (#42162)
add 023b60c8f01 chore(deps-dev): bump pandas-gbq from 0.19.1 to 0.35.0
(#42161)
add ff1cf5f24ed fix(table): hide search dropdown when search box is
disabled (#41772)
add 3e0f9e60c0e fix(charts): preserve minute/second precision in X-axis
time labels f… (#41505)
add 0a66e4ea2d7 fix(helm): support initContainers in supersetWebsockets
(#42201)
add fb29db61192 fix(sqllab): preserve database state on SET_DATABASES
(#41281)
add b9ede492b7e chore(lint): toggle import/named and import/export lint
rules to error level (#42189)
add 6c13ab66574 feat(ci): optimize Storybook testing in CI by replacing
`http-server` with Python3 static server (#41956)
add a83171bce6b fix(database): capture result metadata after fetch (#42127)
add caf017bd0b3 feat(versioning): cross-entity version activity view
(#41076)
add 5ee4a81906e feat(helm): add Superset MCP server templates (#40507)
add 4e098b6f385 fix(ag-grid-table): use t('Main') for time comparison
column keys to fix i18n (#40681)
add 751f5eb663f fix(dashboard): disable Discard button when there are no
unsaved changes (#40832)
add cd045886d08 feat(helm): add Gateway API HTTPRoute support (#41073)
add c4d50472a9b fix(login): oauth and ldap login ignoring
superset_app_root (#34657)
add 42a2aede78d chore(deps): bump pandas from 2.1.4 to 2.3.3 (#42192)
add 9e9b7c4bbda feat(ci): run helm-unittest on pull requests (#42206)
add 36dbff091f4 refactor: do not cascade to TaggedObject (#42223)
add 3e40bebba86 fix(import): enforce write permission for objects created
by legacy import paths (#42205)
add 09148d0af6b fix(time-table): correctly sort computed columns (#41976)
add 8b415502cf7 chore(deps): bump chrono-node from 2.9.1 to 2.10.0 in
/superset-frontend (#42235)
add 19588826c8a chore(deps-dev): bump baseline-browser-mapping from
2.10.42 to 2.10.43 in /superset-frontend (#42233)
add 9e8b9ac8cf5 chore(deps-dev): bump tsx from 4.23.0 to 4.23.1 in
/superset-frontend (#42232)
add e044d7783a0 chore(deps): bump dompurify from 3.4.11 to 3.4.12 in
/superset-frontend (#42231)
add b5ae7cbd0d5 chore(deps): bump caniuse-lite from 1.0.30001803 to
1.0.30001805 in /docs (#42228)
add 7e63b29741a chore(deps): bump antd from 6.5.0 to 6.5.1 in /docs
(#42226)
add 277c814c5ac fix(i18n): review and complete Portuguese (pt_PT)
translation catalog (#42137)
add eed41b64359 chore(deps): bump actions/setup-node from 6.4.0 to 7.0.0
(#42229)
add ceffbe80f9b chore(deps): bump hot-shots from 16.0.0 to 17.0.0 in
/superset-websocket (#42236)
add 57dc3c0208b chore(deps): bump antd from 6.5.0 to 6.5.1 in
/superset-frontend (#42234)
add 19ca088de63 chore(deps): bump baseline-browser-mapping from 2.10.42 to
2.10.43 in /docs (#42227)
add c1e660fac84 fix(databases): reset import file entry after invalid file
error (#42240)
add 5a17ae12247 chore: drop Python 3.10 support, require Python 3.11+
(#42045)
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 67924ad35e1 fix(dashboard): offer Exit edit mode when there is nothing
to discard (#42208)
add 2926d6f6a9b chore(deps): bump actions/labeler from 6.2.0 to 7.0.0
(#42332)
add 1dd3103c246 chore(deps): bump github/codeql-action/analyze from 4.37.0
to 4.37.1 (#42331)
add 873da606ddf chore(deps): bump github/codeql-action/init from 4.37.0 to
4.37.1 (#42334)
add ab553c37ab9 chore(deps-dev): bump @formatjs/intl-durationformat from
0.10.17 to 0.10.18 in /superset-frontend (#42337)
add 66543184913 chore(deps): bump caniuse-lite from 1.0.30001805 to
1.0.30001806 in /docs (#42333)
add 2e72080a163 chore(deps): bump echarts to 6.1.0 with locale and
containLabel guards (#42315) (#42321)
add c5f6d33d211 docs: add pattern to the list of organisations using
superset (#42341)
add cc8edd22318 chore(deps): bump ag-grid from 36.0.0 to 36.0.1 in
/superset-frontend (#42338)
add cb319c9b817 fix(mcp): trust dataset is_dttm flag when applying
time_grain to VARCHAR temporal columns (#42288)
add f2848d951c4 chore(deps-dev): update taos-ws-py requirement from
>=0.6.9 to >=0.7.0 (#42344)
add 6b02a423ef8 chore(deps-dev): bump the storybook group in
/superset-frontend with 5 updates (#42355)
add fe5f8430017 fix(reports): preserve Slack v1 private-channel text
delivery
add 1c2e5e183ac test(reports): align Slack v1 fallback integration coverage
add 8154b15609e fix(reports): harden Slack v1 fallback delivery
add e066e36b5ab fix(reports): address Slack fallback review feedback
add a1a5d32da2d test(reports): use bound state in send error tests
add 1187b9f925d fix(reports): harden Slack fallback delivery
add c70aedbf1d5 fix(reports): harden Slack delivery retries
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 (ed38d87a3d0)
\
N -- N -- N
refs/heads/codex/fix-slack-v1-private-channel-reports (c70aedbf1d5)
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/ISSUE_TEMPLATE/bug-report.yml | 3 +-
.github/dependabot.yml | 43 +-
.github/workflows/bump-python-package.yml | 4 +-
.github/workflows/check-python-deps.yml | 2 +-
.github/workflows/check_db_migration_confict.yml | 2 +-
.github/workflows/codeql-analysis.yml | 8 +-
.github/workflows/dependency-review.yml | 4 +-
.github/workflows/docker.yml | 19 +-
.github/workflows/embedded-sdk-release.yml | 4 +-
.github/workflows/embedded-sdk-test.yml | 4 +-
.github/workflows/generate-FOSSA-report.yml | 6 +-
.github/workflows/github-action-validator.yml | 6 +-
.github/workflows/hold-label-ci-gate.yml | 115 +
.github/workflows/issue_creation.yml | 2 +-
.github/workflows/labeler.yml | 4 +-
.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 | 12 +-
.github/workflows/pre-commit.yml | 26 +-
.github/workflows/release.yml | 6 +-
.../workflows/scheduled-docker-image-refresh.yml | 10 +-
.github/workflows/superset-app-cli.yml | 2 +-
.github/workflows/superset-docs-deploy.yml | 8 +-
.github/workflows/superset-docs-verify.yml | 8 +-
.github/workflows/superset-e2e.yml | 15 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 14 +-
...t-helm-lint.yml => superset-helm-lint-test.yml} | 19 +-
.github/workflows/superset-helm-release.yml | 2 +-
.github/workflows/superset-playwright.yml | 6 +-
.../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 | 6 +-
.github/workflows/superset-websocket.yml | 4 +-
.github/workflows/supersetbot.yml | 2 +-
.github/workflows/tag-release.yml | 12 +-
.github/workflows/tech-debt.yml | 6 +-
.github/workflows/welcome-new-users.yml | 2 +-
.pre-commit-config.yaml | 7 +-
Makefile | 6 +-
RELEASING/Dockerfile.from_local_tarball | 2 +-
RELEASING/Dockerfile.from_svn_tarball | 2 +-
RELEASING/Dockerfile.make_docs | 2 +-
RELEASING/Dockerfile.make_tarball | 2 +-
RESOURCES/INTHEWILD.yaml | 5 +
UPDATING.md | 134 +-
docker-compose-light.yml | 2 +-
docker-compose-non-dev.yml | 2 +-
docker-compose.yml | 2 +-
docker/pythonpath_dev/superset_config.py | 1 +
.../configuration/configuring-superset.mdx | 8 +-
docs/admin_docs/configuration/mcp-server.mdx | 2 +-
docs/admin_docs/configuration/sql-templating.mdx | 80 +-
.../contributing/development-setup.md | 2 +-
.../developer_docs/contributing/issue-reporting.md | 4 +-
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/developer_docs/index.md | 2 +-
.../using-superset/exporting-dashboard-data.mdx | 99 +
docs/docs/using-superset/sql-templating.mdx | 18 +-
docs/package.json | 38 +-
docs/sidebarTutorials.js | 2 +
docs/src/data/databases.json | 2 +-
docs/static/.htaccess | 3 +-
docs/static/feature-flags.json | 6 -
docs/static/img/logos/pattern_logo.png | Bin 0 -> 7067 bytes
docs/yarn.lock | 941 +-
helm/superset/Chart.yaml | 2 +-
helm/superset/README.md | 78 +-
helm/superset/templates/_helpers.tpl | 6 +
helm/superset/templates/deployment-beat.yaml | 8 +-
helm/superset/templates/deployment-flower.yaml | 8 +-
...{deployment-worker.yaml => deployment-mcp.yaml} | 107 +-
helm/superset/templates/deployment-worker.yaml | 8 +-
helm/superset/templates/deployment-ws.yaml | 9 +
helm/superset/templates/deployment.yaml | 8 +-
helm/superset/templates/httproute.yaml | 95 +
helm/superset/templates/ingress.yaml | 9 +
helm/superset/templates/init-job.yaml | 8 +-
.../templates/{secret-ws.yaml => pdb-mcp.yaml} | 30 +-
helm/superset/templates/secret-env.yaml | 3 +
.../superset/templates/secret-superset-config.yaml | 3 +
helm/superset/templates/secret-ws.yaml | 3 +
helm/superset/templates/service-mcp.yaml | 46 +
helm/superset/tests/checksum_test.yaml | 22 +
helm/superset/tests/httproute_test.yaml | 92 +
helm/superset/tests/init_containers_test.yaml | 206 +
helm/superset/tests/labels_test.yaml | 119 +
helm/superset/values.yaml | 228 +
pyproject.toml | 31 +-
pytest.ini | 12 +-
requirements/base.txt | 11 +-
requirements/development.txt | 29 +-
scripts/benchmark_migration.py | 2 +-
scripts/check-env.py | 4 +-
superset-core/README.md | 2 +-
superset-core/pyproject.toml | 3 +-
.../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 +-
superset-extensions-cli/README.md | 2 +-
superset-extensions-cli/pyproject.toml | 3 +-
.../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 | 14 +-
superset-frontend/package-lock.json | 1658 ++--
superset-frontend/package.json | 49 +-
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 +
.../superset-core/src/translation/types/index.ts | 3 +-
.../src/operators/prophetOperator.ts | 31 +-
.../src/shared-controls/dndControls.tsx | 4 +-
.../src/shared-controls/index.ts | 3 +-
.../src/utils/D3Formatting.ts | 3 +
.../test/operators/prophetOperator.test.ts | 105 +
.../packages/superset-ui-core/package.json | 8 +-
.../packages/superset-ui-core/src/color/index.ts | 1 -
.../src/components/DesignSystem.stories.tsx | 6 +-
.../DropdownContainer/Overview.stories.tsx | 6 +-
.../src/components/Label/Label.test.tsx | 19 +
.../src/components/Label/index.tsx | 13 +
.../MetadataBar/MetadataBarOverview.stories.tsx | 46 +-
.../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 +
.../factories/createLengthFormatter.ts | 51 +
.../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 +-
.../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
.../plugins/legacy-preset-chart-nvd3/package.json | 2 +-
.../src/AgGridTable/index.tsx | 2 +-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 68 +-
.../src/transformProps.ts | 19 +-
.../src/utils/useColDefs.ts | 17 +-
.../test/AgGridTableChart.test.tsx | 113 +
.../test/buildQuery.test.ts | 250 +-
.../src/Heatmap/transformProps.ts | 11 +-
.../plugin-chart-echarts/src/Pie/controlPanel.tsx | 40 +
.../plugin-chart-echarts/src/Pie/transformProps.ts | 169 +-
.../plugins/plugin-chart-echarts/src/Pie/types.ts | 37 +
.../plugin-chart-echarts/src/components/Echart.tsx | 16 +-
.../src/components/echartsLocale.ts | 108 +
.../plugin-chart-echarts/src/utils/formatters.ts | 31 +-
.../test/Heatmap/transformProps.test.ts | 165 +
.../test/Pie/transformProps.test.ts | 255 +-
.../test/components/Echart.test.tsx | 17 +
.../test/components/echartsLocale.test.ts | 82 +
.../test/utils/formatters.test.ts | 53 +
.../plugin-chart-echarts/types/external.d.ts | 8 +
.../plugins/plugin-chart-pivot-table/package.json | 4 +
.../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/Styles.ts | 4 +
.../src/react-pivottable/TableRenderers.tsx | 30 +-
.../src/react-pivottable/utilities.ts | 194 +-
.../plugins/plugin-chart-pivot-table/src/types.ts | 22 +-
.../test/PivotTableChart.test.tsx | 50 +-
.../test/TableRenderer.test.tsx | 158 +
.../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-pivot-table/test/testData.ts | 232 +
.../test/testHelpers.tsx | 0
.../test/tsconfig.json | 0
.../plugin-chart-table/src/DataTable/DataTable.tsx | 2 +-
.../plugins/plugin-chart-table/src/index.ts | 4 +-
.../plugin-chart-table/test/TableChart.test.tsx | 143 +
.../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 -
superset-frontend/spec/helpers/testing-library.tsx | 14 +-
.../src/SqlLab/actions/sqlLab.test.ts | 60 +-
.../components/PopEditorTab/PopEditorTab.test.tsx | 23 +-
.../src/SqlLab/components/PopEditorTab/index.tsx | 46 +-
.../components/ScheduleQueryButton/index.tsx | 13 +-
.../src/SqlLab/reducers/sqlLab.test.ts | 35 +-
superset-frontend/src/SqlLab/reducers/sqlLab.ts | 8 +-
.../src/components/Chart/Chart.test.tsx | 21 +-
superset-frontend/src/components/Chart/Chart.tsx | 24 +
.../src/components/ImportModal/index.tsx | 13 +-
.../src/components/PanelToolbar/index.tsx | 2 +-
.../core/extensions/index.test.ts} | 13 +-
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 +
.../src => src/core/storage}/index.ts | 12 +-
.../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 +
.../dashboard/components/Header/Header.test.tsx | 22 +-
.../src/dashboard/components/Header/index.tsx | 6 +-
.../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 +
.../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 +
.../databases/DatabaseModal/index.test.tsx | 54 +
.../src/features/databases/DatabaseModal/index.tsx | 1 +
.../src/features/databases/DatabaseModal/styles.ts | 4 -
superset-frontend/src/features/home/Menu.test.tsx | 84 +-
superset-frontend/src/features/home/Menu.tsx | 11 +-
superset-frontend/src/features/home/RightMenu.tsx | 4 +-
.../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 | 7 +-
.../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 +
.../src/visualizations/TimeTable/TimeTable.tsx | 16 +-
.../components/ValueCell/ValueCell.test.tsx | 171 +-
.../TimeTable/components/ValueCell/ValueCell.tsx | 30 +-
.../TimeTable/utils/sortUtils/sortUtils.test.ts | 37 +-
.../TimeTable/utils/sortUtils/sortUtils.ts | 46 +-
superset-frontend/webpack.config.js | 6 +-
superset-websocket/package-lock.json | 30 +-
superset-websocket/package.json | 6 +-
.../utils/client-ws-app/package-lock.json | 108 +-
superset/__init__.py | 10 +
superset/app.py | 19 +-
superset/async_events/cache_backend.py | 61 +-
superset/charts/api.py | 85 +-
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 +
superset/commands/dashboard/importers/v0.py | 16 +-
.../commands/dashboard/importers/v1/__init__.py | 36 +-
superset/commands/dataset/duplicate.py | 11 +-
superset/commands/dataset/importers/v0.py | 22 +-
superset/commands/datasource/list.py | 23 +
superset/commands/explore/get.py | 21 +
superset/commands/logs/prune.py | 8 +-
superset/commands/report/execute.py | 198 +-
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/constants.py | 1 +
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 | 243 +-
.../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 | 153 +-
superset/db_engine_specs/base.py | 63 +
superset/db_engine_specs/bigquery.py | 7 +-
superset/db_engine_specs/clickhouse.py | 12 +
superset/db_engine_specs/crate.py | 2 +-
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 | 17 +-
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 +-
.../storage/__init__.py} | 18 +-
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/README.md | 2 +-
superset/mcp_service/annotation_layer/schemas.py | 167 +-
superset/mcp_service/app.py | 6 +-
superset/mcp_service/chart/chart_helpers.py | 4 -
superset/mcp_service/chart/chart_utils.py | 125 +-
superset/mcp_service/chart/plugins/__init__.py | 3 +
superset/mcp_service/chart/plugins/waterfall.py | 186 +
superset/mcp_service/chart/schemas.py | 259 +-
superset/mcp_service/chart/tool/generate_chart.py | 16 +-
superset/mcp_service/chart/tool/get_chart_data.py | 3 +
.../mcp_service/chart/tool/get_chart_preview.py | 3 +
.../chart/tool/get_chart_type_schema.py | 19 +-
superset/mcp_service/chart/tool/list_charts.py | 9 -
.../chart/validation/dataset_validator.py | 7 +-
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/storage.py | 11 +-
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 +-
superset/middleware/legacy_prefix_redirect.py | 10 +-
...13_10-20_4451805bbaa1_remove_double_percents.py | 58 +-
...-00_e5f6a7b8c9d0_add_extension_storage_table.py | 109 +
superset/models/core.py | 7 +-
superset/models/helpers.py | 228 +-
superset/models/sql_lab.py | 25 +-
superset/reports/notifications/exceptions.py | 4 +
superset/reports/notifications/slack.py | 16 +-
superset/reports/notifications/slack_mixin.py | 136 +-
superset/reports/notifications/slackv2.py | 125 +-
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/tags/models.py | 12 +-
superset/tasks/decorators.py | 4 +-
superset/tasks/export_dashboard_excel.py | 361 +
superset/translations/ar/LC_MESSAGES/messages.po | 527 +-
superset/translations/ca/LC_MESSAGES/messages.po | 521 +-
superset/translations/cs/LC_MESSAGES/messages.po | 510 +-
superset/translations/de/LC_MESSAGES/messages.po | 516 +-
superset/translations/en/LC_MESSAGES/messages.po | 466 +-
superset/translations/es/LC_MESSAGES/messages.po | 518 +-
superset/translations/fa/LC_MESSAGES/messages.po | 527 +-
superset/translations/fi/LC_MESSAGES/messages.po | 558 +-
superset/translations/fr/LC_MESSAGES/messages.po | 526 +-
superset/translations/it/LC_MESSAGES/messages.po | 550 +-
superset/translations/ja/LC_MESSAGES/messages.po | 2295 +++--
superset/translations/ko/LC_MESSAGES/messages.po | 540 +-
superset/translations/lv/LC_MESSAGES/messages.po | 501 +-
superset/translations/messages.pot | 429 +-
superset/translations/mi/LC_MESSAGES/messages.po | 520 +-
superset/translations/nl/LC_MESSAGES/messages.po | 526 +-
superset/translations/pl/LC_MESSAGES/messages.po | 524 +-
superset/translations/pt/LC_MESSAGES/messages.po | 9917 +++++++-------------
.../translations/pt_BR/LC_MESSAGES/messages.po | 528 +-
superset/translations/ro/LC_MESSAGES/messages.po | 521 +-
superset/translations/ru/LC_MESSAGES/messages.po | 4520 ++++++---
superset/translations/sk/LC_MESSAGES/messages.po | 512 +-
superset/translations/sl/LC_MESSAGES/messages.po | 526 +-
superset/translations/sr/LC_MESSAGES/messages.po | 525 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 523 +-
superset/translations/th/LC_MESSAGES/messages.po | 553 +-
superset/translations/tr/LC_MESSAGES/messages.po | 519 +-
superset/translations/uk/LC_MESSAGES/messages.po | 514 +-
superset/translations/zh/LC_MESSAGES/messages.po | 503 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 503 +-
superset/utils/backports.py | 11 +-
superset/utils/cache.py | 10 +-
superset/utils/cache_manager.py | 28 +-
superset/utils/dates.py | 4 +-
superset/utils/decorators.py | 8 +-
superset/utils/encrypt.py | 87 +
superset/utils/excel.py | 9 +-
superset/utils/excel_streaming.py | 250 +
superset/utils/pandas_postprocessing/boxplot.py | 18 +-
superset/utils/pandas_postprocessing/prophet.py | 2 +-
superset/utils/pandas_sqlalchemy_compat.py | 80 +
superset/utils/s3.py | 83 +
superset/utils/screenshot_utils.py | 151 +-
superset/utils/screenshots.py | 9 +-
superset/utils/slack.py | 341 +-
superset/utils/webdriver.py | 22 +-
superset/versioning/activity/__init__.py | 102 +
superset/versioning/activity/impact.py | 186 +
superset/versioning/activity/kinds.py | 210 +
superset/versioning/activity/orchestrator.py | 434 +
superset/versioning/activity/queries.py | 870 ++
superset/versioning/activity/render.py | 285 +
superset/versioning/activity/scope.py | 138 +
superset/versioning/activity/visibility.py | 206 +
superset/versioning/activity/windows.py | 108 +
superset/versioning/api_helpers.py | 127 +-
superset/versioning/changes/listener.py | 26 +
superset/versioning/diff.py | 8 +-
superset/versioning/schemas.py | 332 +-
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 | 235 +-
tests/integration_tests/sqla_models_tests.py | 88 +-
tests/integration_tests/sqllab_tests.py | 6 +
.../versioning/activity_view_tests.py | 1256 +++
.../versioning/change_records_tests.py | 718 ++
.../versioning/perf_validation_tests.py | 423 +
tests/integration_tests/viz_tests.py | 5 +-
.../unit_tests/async_events/test_cache_backend.py | 148 +
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/commands/report/execute_test.py | 329 +-
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/commands/importers/v0}/__init__.py | 0
.../commands/importers/v0/import_test.py | 92 +
.../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 +-
.../unit_tests/databases/test_schemas.py | 31 +-
.../datasets/commands/importers/v0}/__init__.py | 0
.../datasets/commands/importers/v0/import_test.py | 77 +
tests/unit_tests/db_engine_specs/test_base.py | 23 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 72 +
.../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_presto.py | 66 +
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/jinja_context_test.py | 130 +
tests/unit_tests/key_value/codec_test.py | 14 +
.../mcp_service/chart/test_chart_helpers.py | 12 +-
.../mcp_service/chart/test_chart_utils.py | 83 +
.../mcp_service/chart/test_waterfall_chart.py | 316 +
.../mcp_service/chart/tool/test_get_chart_data.py | 58 +
.../chart/tool/test_get_chart_type_schema.py | 9 +-
.../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 | 93 +-
tests/unit_tests/models/helpers_test.py | 751 +-
.../models/owner_association_tables_test.py | 2 +-
tests/unit_tests/models/test_helpers_offset.py | 125 +
.../pandas_postprocessing/test_boxplot.py | 46 +
.../pandas_postprocessing/test_prophet.py | 34 +
tests/unit_tests/queries/query_object_test.py | 1 +
.../reports/notifications/slack_tests.py | 537 +-
.../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 | 67 +
tests/unit_tests/utils/s3_tests.py | 95 +
tests/unit_tests/utils/slack_test.py | 388 +-
tests/unit_tests/utils/test_decorators.py | 20 +
tests/unit_tests/utils/test_screenshot_utils.py | 207 +-
tests/unit_tests/utils/webdriver_test.py | 1 +
tests/unit_tests/versioning/test_activity.py | 827 ++
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 -
636 files changed, 58534 insertions(+), 19619 deletions(-)
create mode 100644 .github/workflows/hold-label-ci-gate.yml
rename .github/workflows/{superset-helm-lint.yml =>
superset-helm-lint-test.yml} (69%)
create mode 100644 docs/developer_docs/extensions/storage.md
create mode 100644 docs/docs/using-superset/exporting-dashboard-data.mdx
create mode 100644 docs/static/img/logos/pattern_logo.png
copy helm/superset/templates/{deployment-worker.yaml => deployment-mcp.yaml}
(61%)
create mode 100644 helm/superset/templates/httproute.yaml
copy helm/superset/templates/{secret-ws.yaml => pdb-mcp.yaml} (55%)
create mode 100644 helm/superset/templates/service-mcp.yaml
create mode 100644 helm/superset/tests/httproute_test.yaml
create mode 100644 helm/superset/tests/init_containers_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
create mode 100644
superset-frontend/packages/superset-ui-core/src/number-format/factories/createLengthFormatter.ts
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-echarts/src/components/echartsLocale.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/components/echartsLocale.test.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/TableRenderer.test.tsx
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
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/test/testData.ts
copy superset-frontend/plugins/{plugin-chart-table =>
plugin-chart-pivot-table}/test/testHelpers.tsx (100%)
copy superset-frontend/plugins/{plugin-chart-table =>
plugin-chart-pivot-table}/test/tsconfig.json (100%)
delete mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/utils/sandbox.ts
copy superset-frontend/{plugins/plugin-chart-echarts/types/external.d.ts =>
src/core/extensions/index.test.ts} (75%)
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-switchboard/src =>
src/core/storage}/index.ts (72%)
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/{utils/backports.py => extensions/storage/__init__.py} (72%)
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/chart/plugins/waterfall.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/pandas_sqlalchemy_compat.py
create mode 100644 superset/utils/s3.py
create mode 100644 superset/versioning/activity/__init__.py
create mode 100644 superset/versioning/activity/impact.py
create mode 100644 superset/versioning/activity/kinds.py
create mode 100644 superset/versioning/activity/orchestrator.py
create mode 100644 superset/versioning/activity/queries.py
create mode 100644 superset/versioning/activity/render.py
create mode 100644 superset/versioning/activity/scope.py
create mode 100644 superset/versioning/activity/visibility.py
create mode 100644 superset/versioning/activity/windows.py
create mode 100644 tests/integration_tests/non_additive_totals_tests.py
create mode 100644 tests/integration_tests/versioning/activity_view_tests.py
create mode 100644 tests/integration_tests/versioning/change_records_tests.py
create mode 100644 tests/integration_tests/versioning/perf_validation_tests.py
create mode 100644 tests/unit_tests/async_events/test_cache_backend.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
copy {scripts =>
tests/unit_tests/dashboards/commands/importers/v0}/__init__.py (100%)
create mode 100644
tests/unit_tests/dashboards/commands/importers/v0/import_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 superset/utils/dates.py => tests/unit_tests/databases/test_schemas.py
(55%)
copy {scripts => tests/unit_tests/datasets/commands/importers/v0}/__init__.py
(100%)
create mode 100644
tests/unit_tests/datasets/commands/importers/v0/import_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
create mode 100644 tests/unit_tests/mcp_service/chart/test_waterfall_chart.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/pandas_sqlalchemy_compat_test.py
create mode 100644 tests/unit_tests/utils/s3_tests.py
create mode 100644 tests/unit_tests/versioning/test_activity.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