This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a change to branch fix-normalize-columns-toggle-warning
in repository https://gitbox.apache.org/repos/asf/superset.git
from 868635bc6d1 Merge remote-tracking branch
'origin/fix-normalize-columns-toggle-warning' into
fix-normalize-columns-toggle-warning
add 1c7d1f049bc fix(utils): return None from cast_to_num for non-decimal
digit strings (#44615)
add defcd639107 fix(mongodb): route dataset FROM clauses through
quote_table so chart queries return rows (#44583)
add f5487f04a36 fix(db_engine_specs): raise
SupersetGenericDBErrorException instead of bare-reraising JSONDecodeError
(#44616)
add 855ca2228cb fix(query_context): raise 422 not 500 on malformed Jinja
in Query datasource access check (#44011)
add 7b716b1838c fix(versioning): clean up history actions and refresh
after saves (#44613)
add 96d31ee3e35 docs(mcp): document deleted_state trash listing for
list_charts/list_dashboards (#44128)
add 599026a0e5a feat(standalone): granular Explore standalone modes and
iframe-safe dashboard fullscreen (#44165)
add 3bd6e103c14 fix(security): apply global guest RLS rules inside adhoc
sub-queries (#44645)
add 1e08d61204f fix(mcp): preserve deduplicated chart tool input schemas
(#44575)
add 02cb1f1a28a fix(table): resolve auto-detected currency on time
comparison columns (#44649)
add 83731ce7b3a test(reports): freeze the clock in the stale retry
boundary test (#44651)
add a9342fa02ab chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to
7.0.2002 in /superset-websocket (#44634)
add d65e9fba9c4 chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to
7.0.2002 in /docs (#44635)
add d1f903c66ff chore(deps): bump github/codeql-action/analyze from 4.38.0
to 4.38.1 (#44636)
add a44ab4d9281 chore(deps-dev): bump baseline-browser-mapping from
2.11.24 to 2.11.25 in /superset-frontend (#44641)
add 5085570fb48 chore(deps): bump
apache/infrastructure-actions/allowlist-check from 1.0.3 to 1.0.4 (#44637)
add 5be35992c56 chore(deps): bump github/codeql-action/upload-sarif from
4.38.0 to 4.38.1 (#44640)
add 0034601c062 chore(deps): bump github/codeql-action/init from 4.38.0 to
4.38.1 (#44639)
add 5e8bbc0eb4a chore(deps): bump baseline-browser-mapping from 2.11.24 to
2.11.25 in /docs (#44638)
add 241d1210152 chore(deps): bump image-size from 2.0.2 to 2.0.4 in /docs
in the security group across 1 directory (#44619)
add be0631858c9 chore(deps): bump mapbox-gl from 3.30.0 to 3.31.0 in
/superset-frontend (#44643)
add 4bce27f12f4 fix(dashboard): shrink row height on chart resize and
unblock resize handles above columns (#44359)
add 5aec4342bb5 fix(database): catch JSONDecodeError in get_oauth2_config
(#44658)
add 10ca640e97e fix(import): downgrade expected validation-failure logs
from error to warning (#44655)
add 181422fc604 fix(mcp): return safe argument validation details (#44591)
add 05017968378 chore(ci): collapse Playwright experimental workflow into
E2E playwright-tests (#44659)
add a33154a4c49 chore(deps-dev): bump hdbcli from 2.29.27 to 2.30.27
(#44687)
add 60a0b45b06f chore(deps-dev): bump mysqlclient from 2.2.8 to 2.3.0
(#44689)
add 1aaa1e6ad1a chore(deps): bump greenlet from 3.5.5 to 3.5.6 (#44691)
add 1a65f0ec9be chore(deps-dev): bump google-cloud-bigquery from 3.45.0 to
3.45.2 (#44692)
add b4db7baaff5 chore(deps-dev): bump python-ldap from 3.4.7 to 3.4.8
(#44690)
add 6e2e7c6c84f chore(deps-dev): update playwright requirement from
<2,>=1.62.0 to >=1.63.0,<2 (#44688)
add 5b9733fd60f fix(versioning): resolve nightly pre-commit (next)
failures — mypy UUID-annotation regression and oxfmt version-drift formatting
(#44648)
add eb2ffa28ccf chore(docker): quiet scanner self-match noise, keep OS
packages current (#44124)
add 2e13cfa3e48 fix(charts): stream large CSV exports without executing
the query first (#44624)
add 25e63b54fd8 feat(mcp): add create_dataset_metric and
delete_dataset_metric tools (#44580)
add c54a3315e86 feat(plugin-chart-echarts): add Candlestick Chart (#43863)
add 891c2ede0b6 feat(dashboard): download the Excel export directly when
no export storage is configured (#44082)
add 35e58506061 fix(charts): guard Slice.form_data against non-dict params
JSON (#44731)
add 8a3b86dccd3 fix: guard the isdigit()-then-int() pattern against
non-decimal digits (#44620)
add 1436035b091 fix(bar-chart): show correct value labels per stack group
with stackDimension (#43238)
add ad24cb86342 fix(embedded): initialize feature flags in embedded
dashboard entry point (#37367)
add 8c4b5ae2085 chore(deps): bump codecov/codecov-action from 7.1.0 to
7.1.1 (#44571)
add b6be1dd5548 build(dev-deps): use `@hainenber/po2json` as modernized
`po2json` fork (#44457)
add ffe9a00fc42 fix(reports): export full paginated table results (#44218)
add f3e3c3fefdd fix(security): apply global guest RLS rules to sub-queries
in virtual datasets (#44650)
add 049c9777f03 fix(dashboard): load chart editors and viewers up front
(#43990)
add 5ba3b8d4fc7 fix(security): keep guest RLS on sub-queries beside an
unaliased source (#44768)
add d1307422f17 fix(reports): require a Slack channel id in report
recipients (#42850)
add 4977a2a5347 chore(deps-dev): bump the babel group in
/superset-embedded-sdk with 3 updates (#44747)
add ba6268bddf6 chore(deps-dev): bump jest-environment-jsdom from 30.5.1
to 30.5.2 in /superset-frontend (#44764)
add a5ae32d3911 chore(deps-dev): bump tsx from 4.23.13 to 4.23.15 in
/superset-frontend (#44757)
add d9df1b3b83d chore(deps): bump astral-sh/setup-uv from 10.1.0 to 10.2.0
(#44750)
add 1ad6c118003 chore(deps-dev): bump minimizer-webpack-plugin from 5.10.1
to 5.11.0 in /superset-frontend (#44755)
add ca6fc26fa4a fix(deps): resolve npm security alerts for fflate,
image-size, js-yaml and smol-toml (#44740)
add f6d9b7b94cd fix(mcp): use chart metrics for the preview y axis (#44684)
add b2d54504537 chore(deps): bump antd from 6.6.4 to 6.6.5 in
/superset-frontend (#44766)
add c217fe4d1e7 chore(deps-dev): bump jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44763)
add 0085640384d chore(deps-dev): bump babel-jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44762)
add e8539f9aff8 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-frontend (#44761)
add 7c1979ec542 chore(deps): bump react-error-boundary from 6.1.5 to 6.1.6
in /superset-frontend (#44760)
add 21ed6880d5e chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-frontend (#44756)
add 6ae6e7b2874 chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/docs (#44753)
add 6de85946c40 chore(deps-dev): bump @babel/eslint-parser from 7.29.7 to
7.29.9 in /superset-frontend in the babel group (#44752)
add 565f49d9343 chore(deps): bump antd from 6.6.4 to 6.6.5 in /docs
(#44751)
add 1c2e7c2988f chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-embedded-sdk (#44749)
add feb4c4f6227 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-embedded-sdk (#44748)
add 60fc9966025 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-websocket (#44745)
add 68ccc99e950 fix(dataset): hide Normalize column names for virtual
datasets (#44579)
add 766f46b6e99 fix(deps): pin qs 6.16.0 in docs to resolve Dependabot
alerts (#44741)
add 5af034ff6f8 fix(translations): capture stderr and harden
check_pot_drift.py follow-ups from #44578 (#44582)
add c9455b2c4cc fix(i18n): correct Slovak SQL Lab progress message
placeholders (#44587)
add a629c91929d test(explore): migrate remaining explore e2e coverage to
Playwright (#44621)
add 891dbc424b1 fix(deps): bump anyio to 4.15.1 (CVE-2026-63374) (#44735)
add 74d9d94aed1 test(dashboard): cover native filter dependency cycles and
config modal save gating (#44669)
add 169514aebd7 test(dashboard): cover dashboard load modes and URL param
hydration (#44672)
add 3667f5bcaa6 test(dashboard): cover color scheme precedence and label
color map helpers (#44677)
add 89bf40ee04e fix(calendar): position Month/Week cells within their own
month block (#44601)
add 0e688a534b6 fix(ci): retry databend testcontainers bring-up past the
image's metasrv race (#44729)
add ff55a99ab73 test(dashboard): cover filter plugin data masks and
horizontal overflow (#44676)
add 78fdd0dafa9 test(dashboard): cover native filter bar key persistence
and state hooks (#44675)
add e5100cd9986 test(dashboard): cover tab switching visibility and hidden
chart updates (#44674)
add 3ae8e2f9bc4 test(dashboard): cover save and refresh interval modals
(#44671)
add 98c74d8d8bf test(dashboard): cover drill to detail payloads and page
reset (#44673)
add 6cad838c823 chore(dev-deps): drop po2json entirely, build .po->Jed
JSON on gettext-parser (#44742)
add 77295721ff9 feat(versioning): gate history APIs and runtime capture
(#44514)
add 6f6e52ba8b1 fix(chart/data): guard against non-dict chart.params in
get_data (#44770)
add 593080e1a2c feat(mcp): add update_dataset, delete_dataset and
restore_dataset tools (#44337)
add 8bd92b7073e fix(databases): surface dataset dependents in the delete
confirmation (#44392)
add 211339b9a78 chore: add @geido and @msyavuz as code owners (#44771)
add 1e167aedbc0 fix(dashboard): refresh version history after cross-filter
scoping save (#44623)
add 9593bc42c64 fix(ui): normalize BigInt values in memory formatter
(#44507)
add b65d5482b2c feat(dataset): support epoch_us python_date_format (#44500)
add 697b056909c fix(chart): prevent stacking bars on a logarithmic axis
(#44556)
add a374f847d61 fix(echarts): reserve grid room for Gantt category names
(#43189)
add 95db7730256 fix(timeseries): preserve explicit UTC offsets in
normalizeTimestamp (#43960)
add 506716f2f88 fix(query-context): resolve legacy granularity_sqla for
stored queries (#44460)
add c7821516e39 fix(security): vary SQL Lab ad-hoc query cache key by
effective RLS predicates (#43985)
add 4679a471015 test(dashboard): cover header refresh controls while
charts load (#44670)
add ae11708faab test(dashboard): cover edit-mode drag-and-drop drop rules
(#44678)
add 0fbad0de99d feat(db_engine_specs): add metadata blocks to all
remaining incomplete engine specs (#43566)
add 7cb19e2b50d fix(embedded-sdk): re-authenticate the iframe after a
navigation internal to the dashboard (#44470)
add c67c88fbf1e fix(reports): drop the sign of negative numbers that round
to zero in text reports (#44644)
add 1fdb9171b7b fix(explore): include dataset editors in the Explore
datasource payload (#44633)
add d3f57264890 fix(echarts): stop the zoom controls overlapping the
legend selector (#44367)
add 0e5a3b21215 feat(motherduck): set session_name on user impersonation
(#42705)
add 33d24f496c9 fix(ci): fall back to the lean Dockerfile target when
publishing a pre-#44100 release (#44248)
add b4f79f94f82 fix(d1): support SQLAlchemy 2 with sqlalchemy-d1 0.2.0
(#44505)
add cfeceedb605 fix(types): preserve shared control registry option types
(#44559)
add 1e91b933774 refactor(dashboard): simplify cross-filter scope
resolution (#38762)
add db87cd2a2b2 fix(dataframe): normalize trusted nonfinite scalars
(#44219)
add e86af4ee954 fix: DashboardAccessFilter to preserve dashboards with
empty layouts (#44256)
add 49e71752e48 fix(excel): keep wall-clock datetimes when exporting
timezones (#44360)
add 19ea6b231c7 fix(mcp): hide internal sanitization warnings from input
schemas (#44602)
add c40eba410b7 fix(kylin): time grains and labels that work on Calcite
and Spark pushdown (#44712)
add ca3d3560895 feat(oracle): support cancelling running queries in SQL
Lab (#44704)
add e7275f15ae0 feat(echarts): double-click chart legend to isolate a
series (#44562)
add 4a51382f819 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-frontend (#44785)
add 983d00165a7 chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-frontend (#44784)
add f837f839708 chore(deps): bump react-window from 2.3.1 to 2.3.2 in
/superset-frontend (#44782)
add 5150266456a chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/docs (#44781)
add b8e40175053 chore(deps-dev): bump the typescript-eslint group in
/superset-frontend with 2 updates (#44779)
add 4422cf38776 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-websocket (#44778)
add ce86ac9aefc chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-embedded-sdk (#44777)
add ef99eeac8ee chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-frontend (#44783)
add 72c8969ce38 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in /docs
(#44780)
add 3d436f579c9 chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-websocket (#44776)
add e65de1fc0f0 fix(chart-data): roll back db.session after swallowed
metadata-DB errors (#44653)
add 45f4dd80092 fix: use database rollups for pivot table subtotals in
Actual Values mode (#44631)
add c51f192be6b fix(sqllab): stringify integer columns that overflow int64
(#44743)
add 2eb620e7372 fix(databases): validate schema before listing tables
(#44683)
add 27c6f5a8d90 fix(db_engine_specs): restore shared compiler state after
loading third-party dialects (#44686)
add 732e6551e0a fix(cratedb): recognize reflected timestamp types for
epoch milliseconds (#44720)
add 03227878ba3 fix(db_engine_specs): don't fail DDL/DML when the
statement has no result set (#44714)
add 3e9bd8b45b4 fix(dynamodb): map NUMBER columns and order charts by
metric expressions (#44711)
add 2b050596c0b fix(databricks): derive omitted OAuth2 endpoints from the
workspace host (#44710)
add 041f84c6f31 fix(clickhouse): rename SELECT aliases that shadow a
source column (#44715)
add f6a7802c81d fix(database): mask secrets in create and update responses
(#44733)
add f639b22c6c8 fix(api): return 4xx from oauth2 callback errors, not 500
(#44769)
add cba2574241e fix(i18n): clear 1,188 fuzzy translations with broken
placeholders (#44611)
add afe8b14d794 fix(database): coerce LazyString validation messages to
str in validate_parameters (#44802)
add c6e7bd47a4a fix(dashboard): catch JSONDecodeError on malformed
default_filters in set_dash_metadata (#44716)
add 9a5faa8af5b refactor(db_engine_specs): derive epoch method dispatch
from EPOCH_FORMATS (#44772)
add 63c004fe66c feat(mcp): add a permission-filtered asset catalog tool
(#44694)
add 6b2d3b15116 fix(auth): gate registration UI by auth type, not just the
flag (#44368)
add e1daa2f7e10 chore(deps-dev): bump ip-address from 10.4.0 to 10.7.2 in
/superset-frontend in the security group across 1 directory (#44774)
add 8bd268f9cef docs(versioning): screenshots, retention, and permission
guidance for version history and archives (#44190)
add 14b87366bc7 chore(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12
in /superset-embedded-sdk in the security group across 1 directory (#44812)
add 1dbb7aaace6 chore(deps): bump fast-uri from 3.1.7 to 3.1.8 in /docs in
the security group across 1 directory (#44814)
add 6d1bfaa4cd4 fix(dashboard): forward clearAllTriggers from vertical
filter bar to FilterControls (#44531)
add df450dc2a24 fix(mypy): narrow nullable uuid before
RestoreVersionCommand calls (#44789)
add 92b0cf82ca9 fix(echarts-timeseries): convert xAxisLabelInterval string
'0' to number 0 (#43729)
add 517e94d1062 fix(echarts): fix sparse sub-daily bar sizing and x-axis
mislabeling (#44628)
add 48a3b02d129 fix(mysql): require TLS when SSL is requested (#44723)
add 773f976b6de fix(dynamodb): render time bounds as ISO 8601 so sub-day
ranges match stored timestamps (#44702)
add 005eadcacd8 fix(opensearch): page drill-to-detail samples with the
OpenSearch SQL response format (#44703)
add 542e4661837 fix(gsheets): pass the OAuth2 token and delegation subject
through connect_args (#44709)
add 16271bbfbb7 fix(databricks): stop the string-type patch writing
SQLAlchemy's shared colspecs (#44707)
add 7154f2790a9 fix(oracle): map Oracle NUMBER, BINARY_FLOAT/DOUBLE and
CLOB column types (#44685)
add 3e8cec55c4b chore(deps): bump undici from 7.29.0 to 7.30.0 in
/superset-frontend in the security group across 1 directory (#44809)
add 89759eba5d9 chore(deps): bump react-window from 2.3.2 to 2.3.3 in
/superset-frontend (#44820)
add 3e36b242a61 fix(datafusion): render temporal SQL that DataFusion
accepts (#44700)
add 8c3b985c22c fix(db2): set current_schema to the catalog name of the
selected schema (#44706)
add ba62c867258 chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in
/superset-frontend/cypress-base (#44813)
add 3f8a23622c7 perf(security): memoise the user subject lookup within a
request (#44017)
add 3f408238baa refactor(mcp): one plugin lifecycle contract and compact
chart config schemas (#44746)
add 5668faf18e6 fix(doris): quarter grain, SSL toggle, parameters URI,
error mapping and column types (#44718)
add 929c44097f8 chore(deps): bump the security group across 1 directory
with 2 updates (#44824)
add e93f8ce638c test(semantic-views): wait for views refetches to settle
before selecting a view (#44792)
add 21d46d52dfd chore(build): remove unused dependencies in `docs` and
`superset-frontend` (#44697)
add af794f8c93a chore(deps): bump the security group across 1 directory
with 2 updates (#44831)
add 8a7be3b327b fix: avoid provider calls when rendering datasource access
denials (#44432)
add 3b06cadca4c fix(csv-import): add primary key when MySQL requires one
(#44411)
add 88efac09c67 fix(mcp): align histogram and waterfall query contracts
(#44744)
add 65a6012843b ci(python): run the Python-next canary nightly, bump to
3.13 (#44767)
add e90b9fb751e chore(deps): bump dompurify from 3.4.15 to 3.4.16 in
/superset-frontend in the security group across 1 directory (#44830)
add 5a021fa2f25 Merge remote-tracking branch 'origin/master' into
fix-normalize-columns-toggle-warning
No new revisions were added by this update.
Summary of changes:
.github/CODEOWNERS | 16 +-
.github/actions/setup-backend/action.yml | 5 +-
.github/workflows/asf-allowlist-check.yml | 2 +-
.github/workflows/bashlib.sh | 6 +-
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/codeql-analysis.yml | 4 +-
.github/workflows/docker.yml | 2 +-
.github/workflows/python-nightly-canary.yml | 94 ++
.github/workflows/superset-e2e.yml | 22 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 2 +-
.github/workflows/superset-playwright.yml | 222 ---
.../workflows/superset-python-integrationtest.yml | 6 +-
.github/workflows/superset-python-presto-hive.yml | 4 +-
.github/workflows/superset-python-unittest.yml | 9 +-
.github/workflows/tag-release.yml | 31 +-
.grype.yaml | 39 +
UPDATING.md | 291 +++-
docker/apt-install.sh | 8 +
.../configuration/configuring-superset.mdx | 10 +
docs/admin_docs/configuration/mcp-server.mdx | 57 +-
docs/developer_docs/api.mdx | 13 +
docs/developer_docs/contributing/howtos.md | 5 +-
docs/developer_docs/extensions/mcp.md | 21 +
docs/docs/using-superset/exploring-data.mdx | 8 +
.../using-superset/exporting-dashboard-data.mdx | 112 +-
docs/docs/using-superset/recently-archived.mdx | 101 +-
.../docs/using-superset/using-ai-with-superset.mdx | 25 +
docs/docs/using-superset/version-history.mdx | 186 ++-
docs/docusaurus.config.ts | 1 -
docs/package.json | 21 +-
docs/src/data/databases.json | 13 +-
docs/static/feature-flags.json | 2 +-
.../img/version-history/recently-archived.jpg | Bin 0 -> 23897 bytes
.../img/version-history/version-history-panel.jpg | Bin 0 -> 19792 bytes
.../version-history/version-history-preview.jpg | Bin 0 -> 64287 bytes
docs/static/resources/openapi.json | 49 +-
.../databases/supported/apache-doris.mdx | 8 +
.../version-6.1.0/databases/supported/mysql.mdx | 18 +
docs/yarn.lock | 623 +++++----
pyproject.toml | 25 +-
requirements/base.txt | 2 +-
requirements/development.in | 11 +
requirements/development.txt | 19 +-
scripts/change_detector.py | 1 +
scripts/docker_release_target.py | 129 ++
scripts/translations/check_pot_drift.py | 52 +-
superset-embedded-sdk/package-lock.json | 220 +--
superset-embedded-sdk/package.json | 12 +-
superset-embedded-sdk/src/index.test.ts | 349 ++++-
superset-embedded-sdk/src/index.ts | 374 ++++-
.../cypress-base/cypress/e2e/explore/chart.test.js | 157 ---
.../cypress-base/cypress/e2e/explore/utils.ts | 78 --
.../e2e/explore/visualizations/shared.helper.js | 139 --
superset-frontend/cypress-base/package-lock.json | 28 +-
superset-frontend/cypress-base/package.json | 2 +-
superset-frontend/jest.config.js | 6 +-
superset-frontend/package-lock.json | 1467 +++++++++-----------
superset-frontend/package.json | 57 +-
.../packages/generator-superset/package.json | 2 +-
.../packages/superset-core/package.json | 2 -
.../src/shared-controls/sharedControls.tsx | 13 +-
.../packages/superset-ui-core/package.json | 8 +-
.../superset-ui-core/src/chart/types/VizType.ts | 1 +
.../components/DeleteModal/DeleteModal.test.tsx | 37 +-
.../src/components/DeleteModal/index.tsx | 14 +-
.../src/components/DeleteModal/types.ts | 4 +-
.../superset-ui-core/src/currency-format/utils.ts | 22 +
.../factories/createMemoryFormatter.ts | 11 +-
.../src/query/extractQueryFields.ts | 4 +
.../src/time-format/utils/normalizeTimestamp.ts | 18 +
.../test/currency-format/utils.test.ts | 33 +
.../factories/createMemoryFormatter.test.ts | 7 +
.../test/query/extractQueryFields.test.ts | 12 +
.../time-format/utils/normalizeTimestamp.test.ts | 70 +
superset-frontend/playwright.config.ts | 9 -
.../playwright/components/core/Menu.ts | 7 +
.../playwright/components/core/Radio.ts | 69 +
.../playwright/components/core/index.ts | 1 +
.../components/dashboard/DashboardFilterBar.ts | 6 +-
.../playwright/components/modals/SaveChartModal.ts | 105 ++
.../playwright/components/modals/index.ts | 1 +
superset-frontend/playwright/helpers/api/chart.ts | 44 +
.../playwright/helpers/api/dashboard.ts | 37 +
superset-frontend/playwright/pages/ExplorePage.ts | 95 ++
.../playwright/tests/chart/chart-test-helpers.ts | 24 +-
.../tests/chart/handlebars-format-date.spec.ts | 2 +-
.../tests/dashboard/clear-all-filters.spec.ts | 112 ++
.../tests/dashboard/gauge-interval-colors.spec.ts | 2 +-
.../mixed-chart-dashboard-filters.spec.ts | 2 +-
.../tests/embedded/pivot-collapse-state.spec.ts | 2 +-
.../playwright/tests/experimental/README.md | 123 --
.../explore/cross-referenced-dashboards.spec.ts | 173 +++
.../tests/explore/explore-no-results.spec.ts | 59 +
.../playwright/tests/explore/explore-save.spec.ts | 131 ++
.../tests/explore/explore-test-helpers.ts | 50 +
.../explore/results-tab-reuse.spec.ts | 16 +-
.../src/transformProps.ts | 44 +-
.../test/transformProps.test.ts | 45 +
.../src/vendor/cal-heatmap.ts | 60 +-
.../plugin-chart-calendar/test/cal-heatmap.test.ts | 40 +
.../src/BigNumber/BigNumberViz.test.tsx | 131 +-
.../src/Bubble/EchartsBubble.tsx | 16 +-
.../src/Bubble/transformProps.ts | 31 +-
.../src/Butterfly/Butterfly.tsx | 16 +-
.../src/Butterfly/transformProps.ts | 11 +-
.../src/Candlestick/EchartsCandlestick.tsx | 174 +++
.../src/{Bubble => Candlestick}/buildQuery.ts | 19 +-
.../src/Candlestick/constants.ts | 61 +
.../src/Candlestick/controlPanel.tsx | 417 ++++++
.../src/Candlestick/images/example1-dark.png | Bin 0 -> 55933 bytes
.../src/Candlestick/images/example1.png | Bin 0 -> 56139 bytes
.../src/Candlestick/images/thumbnail-dark.png | Bin 0 -> 31389 bytes
.../src/Candlestick/images/thumbnail.png | Bin 0 -> 31318 bytes
.../src/{Tree => Candlestick}/index.ts | 32 +-
.../src/Candlestick/transformProps.ts | 770 ++++++++++
.../plugin-chart-echarts/src/Candlestick/types.ts | 84 ++
.../plugin-chart-echarts/src/Candlestick/utils.ts | 91 ++
.../src/Funnel/EchartsFunnel.tsx | 19 +-
.../src/Funnel/transformProps.ts | 15 +-
.../src/Gantt/EchartsGantt.tsx | 23 +-
.../plugin-chart-echarts/src/Gantt/constants.ts | 6 +
.../src/Gantt/transformProps.ts | 60 +-
.../src/Graph/EchartsGraph.tsx | 8 +
.../src/Graph/transformProps.ts | 11 +-
.../src/Histogram/Histogram.tsx | 17 +-
.../src/Histogram/transformProps.ts | 10 +-
.../src/MixedTimeseries/EchartsMixedTimeseries.tsx | 9 +
.../src/MixedTimeseries/transformProps.ts | 107 +-
.../plugin-chart-echarts/src/Pie/EchartsPie.tsx | 19 +-
.../plugin-chart-echarts/src/Pie/transformProps.ts | 15 +-
.../src/Radar/EchartsRadar.tsx | 19 +-
.../src/Radar/transformProps.ts | 15 +-
.../src/Timeseries/EchartsTimeseries.tsx | 19 +-
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 14 +-
.../src/Timeseries/transformProps.ts | 177 ++-
.../src/Timeseries/transformers.ts | 51 +-
.../src/Waterfall/EchartsWaterfall.tsx | 16 +-
.../src/components/Echart.test.tsx | 4 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 7 +-
.../plugins/plugin-chart-echarts/src/constants.ts | 20 +-
.../plugins/plugin-chart-echarts/src/index.ts | 2 +
.../plugin-chart-echarts/src/utils/formatters.ts | 7 +
.../src/utils/legendEventHandlers.test.ts | 275 ++++
.../src/utils/legendEventHandlers.ts | 131 ++
.../plugin-chart-echarts/src/utils/series.ts | 238 +++-
.../test/Butterfly/Butterfly.test.tsx | 32 +-
.../test/Candlestick/EchartsCandlestick.test.tsx | 325 +++++
.../test/Candlestick}/buildQuery.test.ts | 48 +-
.../test/Candlestick/controlPanel.test.ts | 257 ++++
.../test/Candlestick/transformProps.test.ts | 1271 +++++++++++++++++
.../test/Candlestick/utils.test.ts | 53 +
.../test/Gantt/transformProps.test.ts | 58 +
.../test/MixedTimeseries/transformProps.test.ts | 26 +
.../test/Timeseries/Bar/controlPanel.test.ts | 62 +-
.../Bar/sparseSubDailyBarGeometry.test.ts | 505 +++++++
.../test/Timeseries/Bar/transformProps.test.ts | 101 +-
.../test/Timeseries/transformProps.test.ts | 391 ++++++
.../test/Treemap/EchartsTreemap.test.tsx | 123 ++
.../test/utils/eventHandlers.test.ts | 74 +
.../test/utils/formatters.test.ts | 37 +
.../plugin-chart-echarts/test/utils/series.test.ts | 185 ++-
.../plugins/plugin-chart-handlebars/package.json | 2 +-
.../plugins/plugin-chart-pivot-table/package.json | 2 +-
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../plugin-chart-table/src/transformProps.ts | 44 +-
.../plugin-chart-table/test/TableChart.test.tsx | 32 +
.../scripts/{commitlint.js => po2json-cli.js} | 37 +-
superset-frontend/scripts/po2json.js | 96 ++
superset-frontend/scripts/po2json.sh | 6 +-
superset-frontend/spec/scripts/po2json.test.ts | 130 ++
.../Chart/DrillDetail/DrillDetailPane.test.tsx | 74 +-
.../useDrillDetailMenuItems.test.tsx | 26 +
.../DatasourceEditor/DatasourceEditor.tsx | 52 +-
.../tests/DatasourceEditor.test.tsx | 31 +
.../actions/chartCustomizationActions.test.ts | 20 +-
.../dashboard/actions/chartCustomizationActions.ts | 4 +-
.../src/dashboard/actions/dashboardInfo.test.ts | 71 +
.../src/dashboard/actions/dashboardInfo.ts | 7 +
.../src/dashboard/actions/hydrate.test.ts | 137 +-
.../src/dashboard/components/Dashboard.test.tsx | 13 +
.../dashboard/components/Header/Header.test.tsx | 219 ++-
.../Header/useHeaderActionsDropdownMenu.tsx | 10 +-
.../PropertiesModal/PropertiesModal.test.tsx | 6 +
.../dashboard/components/PropertiesModal/index.tsx | 6 +-
.../components/RefreshIntervalModal.test.tsx | 114 ++
.../src/dashboard/components/SaveModal.test.tsx | 178 +++
.../SliceHeaderControls.test.tsx | 43 +
.../components/dnd/dragDroppableConfig.test.ts | 270 ++++
.../dashboard/components/dnd/handleDrop.test.ts | 346 +++++
.../components/gridComponents/Chart/Chart.test.tsx | 16 +
.../components/gridComponents/Row/Row.test.tsx | 43 +-
.../components/gridComponents/Row/Row.tsx | 124 +-
.../components/gridComponents/Tabs/Tabs.test.tsx | 52 +
.../DownloadMenuItems/DownloadMenuItems.test.tsx | 320 ++++-
.../components/menu/DownloadMenuItems/index.tsx | 126 +-
.../src/dashboard/components/menu/HoverMenu.tsx | 4 +-
.../nativeFilters/FilterBar/FilterBar.test.tsx | 293 +++-
.../FilterControls.overflow.test.tsx | 93 +-
.../nativeFilters/FilterBar/Vertical.tsx | 6 +
.../nativeFilters/FilterBar/keyValue.test.ts | 147 ++
.../nativeFilters/FilterBar/state.test.ts | 220 +++
.../hooks/useFilterOperations.test.ts | 171 ++-
.../hooks/useModalSaveLogic.test.ts | 118 ++
.../nativeFilters/FiltersConfigModal/utils.test.ts | 42 +
.../components/resizable/ResizableContainer.tsx | 3 +-
superset-frontend/src/dashboard/constants.ts | 6 +
.../src/dashboard/reducers/dashboardInfo.ts | 10 +
.../src/dashboard/reducers/dashboardState.ts | 2 +
.../src/dashboard/util/crossFilters.test.ts | 75 +
.../src/dashboard/util/crossFilters.ts | 23 +-
.../src/dashboard/util/getRelatedCharts.ts | 32 +-
.../ExploreChartPanel/ExploreChartPanel.test.tsx | 11 +-
.../explore/components/ExploreChartPanel/index.tsx | 5 +-
.../ExploreViewContainer.test.tsx | 77 +-
.../components/ExploreViewContainer/index.tsx | 28 +-
.../explore/components/PropertiesModal/index.tsx | 4 +
superset-frontend/src/explore/constants.ts | 6 +
.../controlUtils/standardizedFormData.test.ts | 29 +
.../explore/controlUtils/standardizedFormData.ts | 4 +
.../src/explore/exploreUtils/exploreUtils.test.tsx | 25 +
.../src/explore/exploreUtils/index.ts | 8 +-
.../src/explore/reducers/exploreReducer.ts | 2 +-
.../src/explore/reducers/saveModalReducer.ts | 15 +-
superset-frontend/src/explore/types.ts | 5 +-
superset-frontend/src/features/home/Menu.test.tsx | 19 +
.../semanticViews/AddSemanticViewModal.test.tsx | 22 +
.../src/features/versionHistory/ActionRow.tsx | 110 +-
.../DashboardVersionHistory.test.tsx | 89 +-
.../versionHistory/DashboardVersionHistory.tsx | 46 +-
.../versionHistory/ExploreVersionHistory.test.tsx | 344 ++++-
.../versionHistory/ExploreVersionHistory.tsx | 53 +-
.../features/versionHistory/SaveGroupItem.test.tsx | 92 +-
.../src/features/versionHistory/SaveGroupItem.tsx | 5 -
.../versionHistory/VersionHistoryPanel.test.tsx | 3 +-
.../versionHistory/VersionHistoryPanel.tsx | 16 +-
.../components/Select/SelectFilterPlugin.test.tsx | 41 +
.../components/Time/TimeFilterPlugin.test.tsx | 40 +-
.../TimeColumnFilterPlugin.test.tsx} | 67 +-
.../DatabaseList.datasetDependents.test.tsx | 289 ++++
superset-frontend/src/pages/DatabaseList/index.tsx | 108 +-
superset-frontend/src/pages/Login/Login.test.tsx | 17 +
superset-frontend/src/pages/Login/index.tsx | 4 +-
superset-frontend/src/preamble.test.ts | 29 +-
superset-frontend/src/preamble.ts | 10 +-
superset-frontend/src/setup/setupApp.ts | 16 +-
superset-frontend/src/utils/colorScheme.test.ts | 230 +++
superset-frontend/src/utils/softDeleteCopy.test.ts | 11 +
superset-frontend/src/utils/softDeleteCopy.ts | 14 +
superset-frontend/src/utils/urlUtils.test.ts | 23 +
.../src/visualizations/presets/MainPreset.ts | 4 +
superset-websocket/package-lock.json | 384 ++---
superset-websocket/package.json | 8 +-
superset/charts/api.py | 5 +
superset/charts/client_processing.py | 9 +-
superset/charts/data/api.py | 65 +-
superset/cli/deletion_retention.py | 20 +-
superset/commands/database/exceptions.py | 5 +
superset/commands/database/oauth2.py | 27 +-
superset/commands/database/tables.py | 41 +-
superset/commands/database/update.py | 34 +-
superset/commands/dataset/refresh.py | 5 +
superset/commands/dataset/update.py | 19 +-
superset/commands/deletion_retention/window.py | 77 +-
superset/commands/importers/v1/__init__.py | 6 +-
superset/commands/importers/v1/utils.py | 6 +-
superset/commands/version_restore.py | 9 +-
superset/common/query_context_factory.py | 36 +
superset/common/query_context_processor.py | 13 +-
superset/common/utils/query_cache_manager.py | 2 +
superset/config.py | 239 +++-
superset/connectors/sqla/models.py | 25 +-
superset/constants.py | 9 +
superset/daos/base.py | 9 +-
superset/daos/dashboard.py | 58 +-
superset/daos/database.py | 43 +-
superset/daos/dataset.py | 31 +-
superset/daos/datasource.py | 2 +-
superset/dashboards/api.py | 261 +++-
superset/dashboards/excel_export/email.py | 17 +-
superset/dashboards/excel_export/storage.py | 81 ++
superset/dashboards/excel_export/sync_budget.py | 272 ++++
superset/dashboards/excel_export/workbook.py | 324 +++++
superset/dashboards/filters.py | 22 +-
superset/databases/api.py | 37 +-
superset/databases/schemas.py | 15 +
superset/dataframe.py | 109 +-
superset/datasets/api.py | 5 +
superset/datasets/schemas.py | 3 +-
superset/db_engine_specs/__init__.py | 31 +-
superset/db_engine_specs/aurora.py | 79 ++
superset/db_engine_specs/base.py | 89 +-
superset/db_engine_specs/bigquery.py | 4 +
superset/db_engine_specs/clickhouse.py | 22 +-
superset/db_engine_specs/crate.py | 35 +-
superset/db_engine_specs/d1.py | 142 +-
superset/db_engine_specs/databend.py | 2 +-
superset/db_engine_specs/databricks.py | 143 +-
superset/db_engine_specs/datafusion.py | 34 +-
superset/db_engine_specs/db2.py | 12 +-
superset/db_engine_specs/doris.py | 111 +-
superset/db_engine_specs/duckdb.py | 39 +
superset/db_engine_specs/dynamodb.py | 24 +-
superset/db_engine_specs/elasticsearch.py | 59 +-
superset/db_engine_specs/gsheets.py | 60 +-
superset/db_engine_specs/ibmi.py | 24 +
superset/db_engine_specs/impala.py | 21 +
superset/db_engine_specs/kusto.py | 35 +
superset/db_engine_specs/kylin.py | 50 +-
superset/db_engine_specs/mongodb.py | 9 +
superset/db_engine_specs/mssql.py | 2 -
superset/db_engine_specs/mysql.py | 349 +++++
superset/db_engine_specs/oracle.py | 118 +-
superset/db_engine_specs/pinot.py | 7 +
superset/db_engine_specs/postgres.py | 14 +-
superset/db_engine_specs/snowflake.py | 12 +-
superset/db_engine_specs/starrocks.py | 12 +-
superset/exceptions.py | 23 +
superset/extensions/__init__.py | 6 +-
superset/extensions/metastore_cache.py | 35 +-
superset/jinja_context.py | 12 +-
superset/mcp_service/app.py | 21 +-
superset/mcp_service/auth.py | 35 +-
superset/mcp_service/caching.py | 28 +-
.../mcp_service/catalog}/__init__.py | 0
superset/mcp_service/catalog/schemas.py | 131 ++
.../catalog/tool}/__init__.py | 6 +-
superset/mcp_service/catalog/tool/get_catalog.py | 443 ++++++
superset/mcp_service/chart/chart_helpers.py | 167 +--
superset/mcp_service/chart/chart_utils.py | 130 +-
superset/mcp_service/chart/compile.py | 19 +-
superset/mcp_service/chart/plugin.py | 222 ++-
superset/mcp_service/chart/plugins/big_number.py | 55 +-
superset/mcp_service/chart/plugins/bubble.py | 27 +-
superset/mcp_service/chart/plugins/gantt.py | 79 +-
superset/mcp_service/chart/plugins/gauge.py | 63 +-
superset/mcp_service/chart/plugins/handlebars.py | 4 +
superset/mcp_service/chart/plugins/histogram.py | 98 +-
.../mcp_service/chart/plugins/mixed_timeseries.py | 43 +
superset/mcp_service/chart/plugins/table.py | 1 +
superset/mcp_service/chart/plugins/treemap.py | 141 +-
superset/mcp_service/chart/plugins/waterfall.py | 35 +
superset/mcp_service/chart/preview_utils.py | 241 +++-
superset/mcp_service/chart/query_result.py | 19 +-
superset/mcp_service/chart/registry.py | 49 +-
superset/mcp_service/chart/schemas.py | 93 +-
superset/mcp_service/chart/tool/generate_chart.py | 7 +-
superset/mcp_service/chart/tool/get_chart_data.py | 29 +-
.../mcp_service/chart/tool/get_chart_preview.py | 128 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 4 +-
.../chart/tool/get_chart_type_schema.py | 4 +-
superset/mcp_service/chart/tool/update_chart.py | 65 +-
.../mcp_service/chart/tool/update_chart_preview.py | 52 +-
.../chart/validation/dataset_validator.py | 6 +-
superset/mcp_service/dashboard/schemas.py | 15 +-
.../mcp_service/dashboard/tool/delete_dashboard.py | 2 +-
superset/mcp_service/dataset/schemas.py | 344 ++++-
superset/mcp_service/dataset/tool/__init__.py | 10 +
.../dataset/tool/create_dataset_metric.py | 172 +++
.../mcp_service/dataset/tool/delete_dataset.py | 217 +++
.../dataset/tool/delete_dataset_metric.py | 246 ++++
superset/mcp_service/dataset/tool/list_datasets.py | 7 +-
.../mcp_service/dataset/tool/restore_dataset.py | 258 ++++
.../mcp_service/dataset/tool/update_dataset.py | 340 +++++
.../explore/tool/generate_explore_link.py | 2 +-
superset/mcp_service/mcp_config.py | 26 +-
superset/mcp_service/middleware.py | 24 +-
superset/mcp_service/server.py | 142 +-
superset/mcp_service/utils/response_size_utils.py | 5 +
superset/mcp_service/utils/validation.py | 218 +++
superset/models/core.py | 62 +-
superset/models/helpers.py | 105 +-
superset/models/slice.py | 7 +-
superset/models/sql_lab.py | 29 +-
superset/reports/schemas.py | 41 +
superset/result_set.py | 2 +
superset/security/manager.py | 14 +-
superset/sql/parse.py | 146 +-
superset/subjects/utils.py | 40 +-
superset/tasks/deletion_retention.py | 10 +-
superset/tasks/export_dashboard_excel.py | 384 +----
superset/tasks/version_history_retention.py | 33 +-
superset/translations/ar/LC_MESSAGES/messages.po | 468 ++++---
superset/translations/ca/LC_MESSAGES/messages.po | 410 ++++--
superset/translations/cs/LC_MESSAGES/messages.po | 334 +++--
superset/translations/de/LC_MESSAGES/messages.po | 141 +-
superset/translations/en/LC_MESSAGES/messages.po | 126 +-
superset/translations/es/LC_MESSAGES/messages.po | 138 +-
superset/translations/fa/LC_MESSAGES/messages.po | 472 ++++---
superset/translations/fi/LC_MESSAGES/messages.po | 437 +++---
superset/translations/fr/LC_MESSAGES/messages.po | 145 +-
superset/translations/it/LC_MESSAGES/messages.po | 144 +-
superset/translations/ja/LC_MESSAGES/messages.po | 126 +-
superset/translations/ko/LC_MESSAGES/messages.po | 577 +++++---
superset/translations/lv/LC_MESSAGES/messages.po | 352 +++--
superset/translations/messages.pot | 203 ++-
superset/translations/mi/LC_MESSAGES/messages.po | 413 ++++--
superset/translations/nl/LC_MESSAGES/messages.po | 484 ++++---
superset/translations/pl/LC_MESSAGES/messages.po | 523 ++++---
superset/translations/pt/LC_MESSAGES/messages.po | 138 +-
.../translations/pt_BR/LC_MESSAGES/messages.po | 469 ++++---
superset/translations/ro/LC_MESSAGES/messages.po | 143 +-
superset/translations/ru/LC_MESSAGES/messages.po | 140 +-
superset/translations/sk/LC_MESSAGES/messages.po | 339 +++--
superset/translations/sl/LC_MESSAGES/messages.po | 138 +-
superset/translations/sr/LC_MESSAGES/messages.po | 138 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 139 +-
superset/translations/ta/LC_MESSAGES/messages.po | 426 ++++--
superset/translations/th/LC_MESSAGES/messages.po | 419 +++---
superset/translations/tr/LC_MESSAGES/messages.po | 165 ++-
superset/translations/uk/LC_MESSAGES/messages.po | 349 +++--
superset/translations/zh/LC_MESSAGES/messages.po | 180 ++-
.../translations/zh_TW/LC_MESSAGES/messages.po | 415 +++---
superset/utils/core.py | 5 +-
superset/utils/database.py | 76 +-
superset/utils/date_parser.py | 2 +-
superset/utils/excel.py | 83 +-
superset/utils/number_format.py | 10 +-
superset/utils/rls.py | 113 +-
superset/utils/screenshots.py | 9 +-
superset/utils/webdriver.py | 8 +-
superset/versioning/api_helpers.py | 38 +-
superset/versioning/baseline/listener.py | 3 +-
superset/versioning/changes/listener.py | 7 +
superset/versioning/queries.py | 4 +-
superset/versioning/restore.py | 225 ++-
superset/versioning/snapshot.py | 275 ++++
superset/versioning/unit_of_work.py | 54 +
superset/versioning/utils.py | 40 +-
superset/views/base.py | 7 +-
.../charts/semantic_save_tests.py | 82 +-
tests/integration_tests/dashboards/api_tests.py | 572 +++++++-
tests/integration_tests/databases/api_tests.py | 108 +-
.../integration_tests/databases/commands_tests.py | 19 +-
tests/integration_tests/reports/api_tests.py | 75 +
.../security/row_level_security_tests.py | 110 ++
.../versioning/activity_write_after_read_tests.py | 3 +-
.../versioning/conditional_token_lock_tests.py | 10 +-
.../versioning/creation_row_tests.py | 17 +-
.../versioning/restore_fails_closed_tests.py | 12 +-
.../versioning/retention_prune_tests.py | 2 +-
.../versioning/versions_api_tests.py | 108 +-
.../db_engine_specs/test_databend.py | 43 +-
.../unit_tests/charts/data/test_non_dict_params.py | 116 ++
tests/unit_tests/charts/test_chart_data_api.py | 197 +++
tests/unit_tests/charts/test_client_processing.py | 55 +
tests/unit_tests/cli/deletion_retention_test.py | 30 +-
tests/unit_tests/commands/databases/oauth2_test.py | 73 +-
tests/unit_tests/commands/databases/tables_test.py | 165 +++
tests/unit_tests/commands/databases/update_test.py | 114 ++
tests/unit_tests/commands/dataset/refresh_test.py | 27 +-
.../commands/importers/v1/import_models_test.py | 93 ++
.../unit_tests/commands/importers/v1/utils_test.py | 100 +-
.../commands/report/execution_claim_test.py | 5 +-
.../common/test_query_context_factory.py | 201 +++
.../common/test_query_context_processor.py | 70 +-
tests/unit_tests/config_test.py | 286 +++-
tests/unit_tests/connectors/sqla/models_test.py | 123 +-
tests/unit_tests/dao/base_dao_test.py | 29 +-
tests/unit_tests/dao/dashboard_test.py | 247 +++-
.../daos/test_dataset_dao.py} | 20 +-
tests/unit_tests/dashboards/datasets_test.py | 1 +
.../dashboards/semantic_view_access_test.py | 68 +-
.../dashboards/test_excel_export_email.py | 19 +
.../dashboards/test_excel_export_storage.py | 178 +++
.../dashboards/test_excel_export_sync_budget.py | 563 ++++++++
.../dashboards/test_excel_export_workbook.py | 146 ++
tests/unit_tests/databases/api_test.py | 218 ++-
.../databases/dao/related_objects_test.py | 122 ++
tests/unit_tests/databases/oauth2_api_test.py | 32 +-
tests/unit_tests/dataframe_test.py | 181 ++-
tests/unit_tests/datasets/schema_tests.py | 1 +
tests/unit_tests/datasource/dao_tests.py | 16 +
tests/unit_tests/db_engine_specs/test_base.py | 170 ++-
tests/unit_tests/db_engine_specs/test_crate.py | 83 +-
tests/unit_tests/db_engine_specs/test_d1.py | 337 +++++
.../unit_tests/db_engine_specs/test_databricks.py | 70 +
.../unit_tests/db_engine_specs/test_datafusion.py | 32 +-
tests/unit_tests/db_engine_specs/test_db2.py | 52 +-
tests/unit_tests/db_engine_specs/test_doris.py | 227 ++-
tests/unit_tests/db_engine_specs/test_duckdb.py | 145 ++
tests/unit_tests/db_engine_specs/test_dynamodb.py | 88 +-
.../db_engine_specs/test_elasticsearch.py | 144 +-
tests/unit_tests/db_engine_specs/test_gsheets.py | 210 ++-
tests/unit_tests/db_engine_specs/test_impala.py | 109 ++
tests/unit_tests/db_engine_specs/test_init.py | 143 ++
tests/unit_tests/db_engine_specs/test_kylin.py | 50 +
tests/unit_tests/db_engine_specs/test_mariadb.py | 83 ++
tests/unit_tests/db_engine_specs/test_mongodb.py | 36 +
tests/unit_tests/db_engine_specs/test_mysql.py | 741 ++++++++++
tests/unit_tests/db_engine_specs/test_oracle.py | 111 +-
tests/unit_tests/db_engine_specs/test_postgres.py | 16 +-
tests/unit_tests/db_engine_specs/test_snowflake.py | 47 +
tests/unit_tests/db_engine_specs/test_starrocks.py | 73 +-
.../unit_tests/extensions/metastore_cache_test.py | 93 ++
tests/unit_tests/jinja_context_test.py | 31 +
.../unit_tests/mcp_service/catalog}/__init__.py | 0
.../mcp_service/catalog/tool}/__init__.py | 0
.../mcp_service/catalog/tool/test_get_catalog.py | 921 ++++++++++++
.../mcp_service/chart/test_chart_helpers.py | 113 ++
.../chart/test_chart_plugin_contract.py | 762 ++++++++++
.../chart/test_histogram_boxplot_charts.py | 62 +
.../mcp_service/chart/test_preview_utils.py | 191 +++
.../unit_tests/mcp_service/chart/test_registry.py | 56 +-
.../mcp_service/chart/test_registry_filters.py | 9 +
.../mcp_service/chart/test_treemap_completeness.py | 76 +-
.../mcp_service/chart/tool/test_generate_chart.py | 57 +
.../mcp_service/chart/tool/test_get_chart_data.py | 38 +
.../chart/tool/test_get_chart_preview.py | 37 +
.../chart/tool/test_get_chart_type_schema.py | 10 +
.../mcp_service/chart/tool/test_update_chart.py | 43 +-
.../chart/tool/test_update_chart_preview.py | 31 +
.../dashboard/tool/test_duplicate_dashboard.py | 21 +-
.../dataset/tool/test_create_dataset.py | 1 +
.../dataset/tool/test_dataset_metric_mutations.py | 529 +++++++
.../mcp_service/dataset/tool/test_dataset_tools.py | 14 +
.../dataset/tool/test_delete_dataset.py | 340 +++++
.../tool/test_list_datasets_deleted_state.py} | 89 +-
.../tool/test_restore_dataset.py} | 266 ++--
.../dataset/tool/test_update_dataset.py | 574 ++++++++
.../explore/tool/test_generate_explore_link.py | 25 +
.../mcp_service/test_chart_tool_inventory.py | 351 +++++
.../mcp_service/test_error_classification.py | 11 +-
.../test_isdigit_isdecimal_regression.py | 149 ++
tests/unit_tests/mcp_service/test_mcp_caching.py | 67 +-
.../mcp_service/test_mcp_tool_registration.py | 14 +
tests/unit_tests/mcp_service/test_middleware.py | 4 +-
.../mcp_service/test_rbac_tool_enforcement.py | 30 +
.../test_sanitization_warning_inputs.py | 80 ++
.../unit_tests/mcp_service/test_tool_inventory.py | 226 +++
.../mcp_service/test_tool_search_transform.py | 347 +----
.../mcp_service/test_validation_contract.py | 511 +++++++
tests/unit_tests/models/core_test.py | 186 ++-
.../unit_tests/models/helpers_rls_rollback_test.py | 80 ++
tests/unit_tests/models/helpers_test.py | 59 +-
.../models/select_alias_shadowing_test.py | 184 +++
tests/unit_tests/models/slice_test.py | 28 +
.../models/test_virtual_dataset_format.py | 90 +-
tests/unit_tests/reports/schemas_test.py | 83 ++
tests/unit_tests/result_set_test.py | 22 +
tests/unit_tests/scripts/change_detector_test.py | 10 +
.../scripts/docker_release_target_test.py | 177 +++
.../scripts/translations/check_pot_drift_test.py | 82 ++
tests/unit_tests/security/guest_rls_test.py | 369 ++++-
tests/unit_tests/security/manager_test.py | 80 +-
.../security/test_permission_instructions_link.py | 4 +-
tests/unit_tests/sql/execution/test_celery_task.py | 40 +
tests/unit_tests/sql/parse_tests.py | 286 ++++
tests/unit_tests/sql_lab_test.py | 53 +-
tests/unit_tests/subjects/test_utils.py | 80 ++
tests/unit_tests/tasks/test_deletion_retention.py | 206 ++-
.../tasks/test_export_dashboard_excel.py | 128 +-
.../tasks/test_version_history_retention.py | 223 ++-
.../sk_sql_lab_progress_message_test.py | 64 +
tests/unit_tests/utils/excel_tests.py | 38 +-
tests/unit_tests/utils/number_format_test.py | 26 +
tests/unit_tests/utils/rls_test.py | 36 +
tests/unit_tests/utils/screenshot_test.py | 57 +
tests/unit_tests/utils/test_core.py | 65 +-
tests/unit_tests/utils/test_database.py | 110 +-
.../unit_tests/versioning/test_api_feature_flag.py | 167 +++
.../versioning/test_capture_gap_restore.py | 809 +++++++++++
tests/unit_tests/versioning/test_listener.py | 88 +-
tests/unit_tests/versioning/test_restore.py | 78 +-
.../unit_tests/versioning/test_runtime_capture.py | 396 ++++++
tests/unit_tests/views/test_bootstrap_auth.py | 20 +
566 files changed, 48436 insertions(+), 8360 deletions(-)
create mode 100644 .github/workflows/python-nightly-canary.yml
delete mode 100644 .github/workflows/superset-playwright.yml
create mode 100644 .grype.yaml
create mode 100644 docs/static/img/version-history/recently-archived.jpg
create mode 100644 docs/static/img/version-history/version-history-panel.jpg
create mode 100644 docs/static/img/version-history/version-history-preview.jpg
create mode 100644 scripts/docker_release_target.py
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/chart.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/e2e/explore/utils.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/visualizations/shared.helper.js
create mode 100644 superset-frontend/playwright/components/core/Radio.ts
create mode 100644
superset-frontend/playwright/components/modals/SaveChartModal.ts
delete mode 100644 superset-frontend/playwright/tests/experimental/README.md
create mode 100644
superset-frontend/playwright/tests/explore/cross-referenced-dashboards.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-no-results.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-save.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-test-helpers.ts
rename superset-frontend/playwright/tests/{experimental =>
}/explore/results-tab-reuse.spec.ts (87%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/EchartsCandlestick.tsx
copy superset-frontend/plugins/plugin-chart-echarts/src/{Bubble =>
Candlestick}/buildQuery.ts (71%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/constants.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/controlPanel.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1-dark.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail-dark.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail.png
copy superset-frontend/plugins/plugin-chart-echarts/src/{Tree =>
Candlestick}/index.ts (66%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/transformProps.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/types.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/utils.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/EchartsCandlestick.test.tsx
copy superset-frontend/plugins/{plugin-chart-calendar/test =>
plugin-chart-echarts/test/Candlestick}/buildQuery.test.ts (51%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/controlPanel.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/transformProps.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/utils.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/Bar/sparseSubDailyBarGeometry.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Treemap/EchartsTreemap.test.tsx
copy superset-frontend/scripts/{commitlint.js => po2json-cli.js} (56%)
mode change 100755 => 100644
create mode 100644 superset-frontend/scripts/po2json.js
create mode 100644 superset-frontend/spec/scripts/po2json.test.ts
create mode 100644
superset-frontend/src/dashboard/actions/dashboardInfo.test.ts
create mode 100644
superset-frontend/src/dashboard/components/RefreshIntervalModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/SaveModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/dnd/dragDroppableConfig.test.ts
create mode 100644
superset-frontend/src/dashboard/components/dnd/handleDrop.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/keyValue.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/state.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.test.ts
copy superset-frontend/src/filters/components/{Time/TimeFilterPlugin.test.tsx
=> TimeColumn/TimeColumnFilterPlugin.test.tsx} (56%)
create mode 100644
superset-frontend/src/pages/DatabaseList/DatabaseList.datasetDependents.test.tsx
create mode 100644 superset-frontend/src/utils/colorScheme.test.ts
create mode 100644 superset/dashboards/excel_export/storage.py
create mode 100644 superset/dashboards/excel_export/sync_budget.py
create mode 100644 superset/dashboards/excel_export/workbook.py
copy {scripts => superset/mcp_service/catalog}/__init__.py (100%)
create mode 100644 superset/mcp_service/catalog/schemas.py
copy superset/{sql/execution => mcp_service/catalog/tool}/__init__.py (91%)
create mode 100644 superset/mcp_service/catalog/tool/get_catalog.py
create mode 100644 superset/mcp_service/dataset/tool/create_dataset_metric.py
create mode 100644 superset/mcp_service/dataset/tool/delete_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/delete_dataset_metric.py
create mode 100644 superset/mcp_service/dataset/tool/restore_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/update_dataset.py
create mode 100644 superset/mcp_service/utils/validation.py
create mode 100644 superset/versioning/snapshot.py
create mode 100644 superset/versioning/unit_of_work.py
create mode 100644 tests/unit_tests/charts/data/test_non_dict_params.py
create mode 100644 tests/unit_tests/commands/importers/v1/import_models_test.py
copy tests/{integration_tests/fixtures/client.py =>
unit_tests/daos/test_dataset_dao.py} (64%)
create mode 100644 tests/unit_tests/dashboards/test_excel_export_storage.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_sync_budget.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_workbook.py
create mode 100644 tests/unit_tests/databases/dao/related_objects_test.py
create mode 100644 tests/unit_tests/db_engine_specs/test_d1.py
create mode 100644 tests/unit_tests/extensions/metastore_cache_test.py
copy {scripts => tests/unit_tests/mcp_service/catalog}/__init__.py (100%)
copy {scripts => tests/unit_tests/mcp_service/catalog/tool}/__init__.py (100%)
create mode 100644
tests/unit_tests/mcp_service/catalog/tool/test_get_catalog.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_chart_plugin_contract.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_dataset_metric_mutations.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_delete_dataset.py
copy
tests/unit_tests/mcp_service/{chart/tool/test_list_charts_deleted_state.py =>
dataset/tool/test_list_datasets_deleted_state.py} (59%)
copy tests/unit_tests/mcp_service/{chart/tool/test_restore_chart.py =>
dataset/tool/test_restore_dataset.py} (54%)
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_update_dataset.py
create mode 100644 tests/unit_tests/mcp_service/test_chart_tool_inventory.py
create mode 100644
tests/unit_tests/mcp_service/test_isdigit_isdecimal_regression.py
create mode 100644
tests/unit_tests/mcp_service/test_sanitization_warning_inputs.py
create mode 100644 tests/unit_tests/mcp_service/test_tool_inventory.py
create mode 100644 tests/unit_tests/mcp_service/test_validation_contract.py
create mode 100644 tests/unit_tests/models/helpers_rls_rollback_test.py
create mode 100644 tests/unit_tests/models/select_alias_shadowing_test.py
create mode 100644 tests/unit_tests/scripts/docker_release_target_test.py
create mode 100644
tests/unit_tests/translations/sk_sql_lab_progress_message_test.py
create mode 100644 tests/unit_tests/versioning/test_api_feature_flag.py
create mode 100644 tests/unit_tests/versioning/test_capture_gap_restore.py
create mode 100644 tests/unit_tests/versioning/test_runtime_capture.py