You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by en...@apache.org on 2026/08/28 09:02:54 UTC
(superset) branch enxdev/fix/explore-count-metric updated (90a5e0074b2 -> 7aa94b53cca)
This is an automated email from the ASF dual-hosted git repository.
EnxDev pushed a change to branch enxdev/fix/explore-count-metric
in repository https://gitbox.apache.org/repos/asf/superset.git
from 90a5e0074b2 chore: adress comments
add 9dd8c42f3d4 chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43511)
add 7bad69f523c chore(deps): bump dayjs from 1.11.22 to 1.11.23 in /superset-frontend (#43510)
add d2aeb29223f chore(deps-dev): bump baseline-browser-mapping from 2.11.14 to 2.11.15 in /superset-frontend (#43508)
add cbfa94c4dd6 chore(deps): bump antd from 6.6.0 to 6.6.1 in /docs (#43506)
add d480152735e chore(deps): bump the storybook group in /docs with 2 updates (#43505)
add ef0ad01aa56 chore(deps-dev): bump the storybook group across 1 directory with 5 updates (#43507)
add fd3849cef1b chore(deps): bump antd from 6.6.0 to 6.6.1 in /superset-frontend (#43509)
add f9530f31abb fix(table): keep each metric's own aggregate in the summary row by default (#43421)
add 02b3e43b66b fix(number-format): preserve custom smart formatter id (#43439)
add 34ffa37aaa4 chore(ci): drop inert SQLALCHEMY_WARN_20 flag from unit-test CI (#43495)
add 3585e8235a7 fix(i18n): review Traditional Chinese count labels (#43063)
add fc4d7221ecb fix(explore): skip re-fetch when navigating away from /explore (#39506)
add f903e02d910 chore(deps): restore permissive marshmallow lower bound (>=3.0, <5) (#43521)
add 88d2c2954e5 feat(deletion-retention): persist purge block reason codes on the audit log (#43485)
add b89da3e9fca docs(versioning): fix post-flip doc and comment drift (#43493)
add 68386a53ee2 chore(database): remove dead extra validation exception classes (#42411)
add 90dab7cf61b fix(mcp): accept common chart input variants (#43130)
add 649d6f1b41f fix(mcp): defer unknown numeric types to compile (#43131)
add 0dcb2ca53a4 feat(maps): Add Italy regions and autonomous provinces country map (#42309)
add e6b9205821b fix(country-map): give Alborz its own ISO code instead of reusing Tehran's (#42429)
add 61ab0cdb5dd fix(ocient): update GIS test fixtures for pyocient's relocated geo types (#43496)
add 473c318335b chore(superset-core): add __init__.py to semantic_layers (#43528)
add 62d74be0afe fix(metadb): apply SUPERSET_META_DB_LIMIT after join instead of per-table (#36304) (#42598)
add 2dfe8a5bd98 fix(OAuth2): Support creating OAuth2 connections via SQLAlchemy URI (#43489)
add b4f7114a091 fix(semantic-layer): warn that deleting a layer cascade-deletes its dependent views (#42845)
add 1fd763bd29b fix(mcp): honor and validate chart filters (#43478)
add 19eca6523fb chore(deps): bump uuid from 14.0.1 to 14.0.2 in /superset-frontend (#43545)
add 6194c852f1d chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /docs (#43544)
add e97db01482b chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /superset-frontend (#43542)
add 622bc45c9ec chore(deps-dev): bump @swc/core from 1.16.0 to 1.16.1 in /superset-frontend (#43541)
add 2bc96a47a45 chore(deps): bump swagger-ui-react from 5.32.13 to 5.32.14 in /docs (#43540)
add 450e2edc2b0 chore(deps): bump @swc/core from 1.16.0 to 1.16.1 in /docs (#43539)
add 5a4900abb1a chore(deps-dev): bump vitest from 4.1.10 to 4.1.11 in /superset-websocket (#43538)
add 686245a905a chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /superset-websocket (#43537)
add e7ca8b8a571 fix(chart): render ECharts charts at full resolution in download-as-image (#43456)
add 0597f36bb62 chore(deps-dev): bump oxlint from 1.78.0 to 1.79.0 in /superset-frontend (#43543)
add 455e6603c10 feat(reports): gate retry functionality behind ALERT_REPORTS_RETRY flag (#43553)
add 70c9203aa9c fix(sqllab): release DB connection before fetching query results from backend (#43371)
add 434511cb376 fix(mcp): reject unsafe dashboard layout replacements (#43476)
add 13927f27e2b fix(mcp): raise SDK floor (#43530)
add b8308a44a30 fix(pivot-table): exclude rollup totals from conditional formatting scale (#43481)
add a140e74f5f5 fix(excel): handle duplicate column labels in xlsx export (#43561)
add 371e5e25e83 fix(trino): honor the verify arg for the user impersonation flow (#43534)
add 6b0aa8714d1 chore(deps): raise Pillow/PyJWT floors to match resolved pins (#43519)
add 1c66b71e232 feat(plugin-chart-echarts): allow decal patterns in custom ECharts options (#43427)
add 0e172a6ff3c feat(waterfall): add show/hide toggles for X and Y axes (#42371)
add b71293acde0 fix(sqllab): stop a database with no extra from breaking SET_DATABASES (#43216)
add ca63bb532d1 fix(plugin-chart-table): preserve comparison arrow when a column-specific formatter entry is missing (#43494)
add 7d355a254ea fix(Modal): stop the draggable modal from hijacking text selection (#43498)
add 0ab64e305c0 chore(deps-dev): bump lerna from 10.0.0 to 10.0.1 in /superset-frontend (#43580)
add 5ea7d05d985 chore(deps): bump immer from 11.1.17 to 11.1.18 in /superset-frontend (#43581)
add d1b7a4fdb41 chore(deps): bump dompurify from 3.4.13 to 3.4.14 in /superset-frontend (#43579)
add 5879994e683 fix(charts): resolve export filenames from the chart, not the form data (#43280)
add fde0fbd315b fix(ci): unblock lint-frontend after the oxlint 1.79.0 bump (#43587)
add 905a35d05f7 fix(mcp): resolve dashboard permalinks (#43482)
add 76151beade2 fix(export): truncate exported filenames to prevent Windows path extraction errors (#42531) (#42541)
add ff1d9f9e095 chore(deps): bump dawidd6/action-download-artifact from 21 to 24 (#43441)
add bde1c483b06 chore(deps): group Dependabot security-update PRs per directory (#43604)
add e8aea6b6dfe fix: remove redundant 'tooltip' tooltip in scoping modal (#43455)
add c2266f860cb chore(deps-dev): update clickhouse-connect requirement from <2.0,>=1.7.1 to >=1.7.2,<2.0 (#43608)
add 87c48cc473d feat(echarts): make bar chart label position user-configurable (#38695)
add d013bc7a21f chore(deps): bump baseline-browser-mapping from 2.11.15 to 2.11.16 in /docs (#43613)
add 926e0e6a920 fix(chart-data): validate select()'s exclude option instead of raising 500s (#42410)
add 6d8cbbfe8d9 fix(api): stop export downloads inheriting the one-year Cache-Control (#43185)
add a3072c0bf68 fix(deckgl): give handlebars tooltips an opaque background (#43195)
add 22027ec24ce fix(explore): require a value for adhoc filters before save (#43317)
add 74dd6901021 docs(security): document EXTRA_EDITORS_RESOLVER (#43595)
add 05830ebc77a docs: document PNG/PDF chart export options (#43593)
add c1b6ff340b0 docs(mcp): document the update_dataset_metric tool (#43596)
add 5c3c6362ae1 docs(cache): document NATIVE_FILTER_OPTIONS_CACHE_TIMEOUT (#43592)
add 323741b0439 docs(alerts-reports): document report/alert content format options (#43594)
add 29f4a05eb7a docs(security): document the RLS indicator badge on dataset list/Explore (#43591)
add 88c4e689e3a fix(pivot-table): keep D3_FORMAT-styled numbers intact in pivoted Excel export (#42601)
add 35fc36a97e5 chore(deps-dev): bump baseline-browser-mapping from 2.11.15 to 2.11.16 in /superset-frontend (#43621)
add 83934c038ed chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (#43618)
add 8f82d851cf9 chore(deps-dev): bump tiktoken from 0.13.0 to 0.14.0 (#43617)
add e9e652d22da chore(deps-dev): bump trino from 0.338.0 to 0.339.0 (#43616)
add 8c88c0d3ac7 chore(deps-dev): update teradatasql requirement from >=20.0.0.65 to >=20.0.0.66 (#43615)
add ba5d5091b97 chore(deps): bump holidays from 0.102 to 0.103 (#43614)
add b8acf4b207b chore(deps-dev): bump syntaqlite from 0.7.1 to 0.9.0 (#43612)
add ebbe2e87142 chore(deps): bump the storybook group in /docs with 2 updates (#43610)
add 6814a892303 chore(deps): bump gunicorn from 26.0.0 to 26.2.0 (#43609)
add 94b59420b76 docs(embedding): document EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE (#43600)
add bcc6af6c5fb fix(dao): don't mask transient OperationalError as a "not found" result (#43479)
add a16bc0d94f8 fix(mcp): apply time grain overrides from extra_form_data (#43599)
add 478f612f258 fix(mcp): add open-world tool annotations (#43529)
add ea3206b076f fix(mcp): surface rejected filter columns in get_chart_data (#43598)
add ecbd6578b0d fix(db_engine_specs): always mask OAuth2 client secret in encrypted extra (#43491)
add e1c7a516745 fix(mcp): flag failed tool calls with isError (#43374)
add 20be48c0858 fix(explore): catch TemplateError when validating access for permalinked query datasources (#43605)
add 9f62aace7ef fix(examples): replace deprecated granularity_sqla with granularity (#43432)
add 7b145a520c9 fix(tags): catch TemplateError when validating access for tagged SQL Lab queries (#43423)
add 5ff44c5ed66 docs(cli): document import_directory --username option (#43602)
add f9e43a37d8d docs(theming): document THEME_DEFAULT_MODE config setting (#43601)
add 13e97ba9139 fix(sql-lab): fix transparent background in ag-grid native menus (#43368)
add b733b57e9eb docs(mcp): document chart type plugin filtering config (#43597)
add 8c5be889d9e fix(cockroachdb): replace abandoned cockroachdb package with sqlalchemy-cockroachdb (#43501)
add fa59b44cfe8 chore(deps): bump mapbox-gl from 3.28.1 to 3.29.0 in /superset-frontend (#43619)
add b7301ac88a6 fix: Dashboard export with charts from multiple databases (#37120)
add e39bfb255bf fix(explore): prevent duplicate Date Range tooltips (#43425)
add fd64efd72db fix(uploads): set catalog on datasets created by file upload (#43301)
add 81b3e855223 fix(echarts): guard cross-filter when labelMap entry is missing (#42559)
add 2ebd415b8ad chore(deps-dev): bump mcp from 1.29.1 to 2.0.0 (#43611)
add 98ec6018df5 fix(embedded): honor "can view query" permission for guest users (#43151)
add 3ddc3b1d569 fix(cache): fall back to default timeout when cache_timeout is None (#43149)
add 12cd259c551 fix(dataset): preserve validation error messages (#43631)
add a59b96c4f52 fix(explore): keep the row count label visible when the row limit is reached (#43296)
add 7aa94b53cca Merge branch 'master' into enxdev/fix/explore-count-metric
No new revisions were added by this update.
Summary of changes:
.github/dependabot.yml | 26 +
.github/workflows/superset-docs-deploy.yml | 4 +-
.github/workflows/superset-docs-verify.yml | 2 +-
.github/workflows/superset-python-unittest.yml | 6 -
UPDATING.md | 31 +-
docs/admin_docs/configuration/alerts-reports.mdx | 14 +
docs/admin_docs/configuration/cache.mdx | 21 +
.../importing-exporting-datasources.mdx | 20 +
docs/admin_docs/configuration/mcp-server.mdx | 35 +
docs/admin_docs/configuration/theming.mdx | 21 +
docs/admin_docs/security/security.mdx | 58 ++
docs/data/countries.json | 1 +
.../creating-your-first-dashboard.mdx | 12 +
docs/docs/using-superset/embedding.mdx | 15 +
.../docs/using-superset/using-ai-with-superset.mdx | 11 +-
docs/docs/using-superset/version-history.mdx | 24 +-
docs/package.json | 14 +-
docs/static/feature-flags.json | 30 +-
docs/yarn.lock | 731 ++++++-------
pyproject.toml | 41 +-
requirements/base.txt | 5 +-
requirements/development.in | 2 +-
requirements/development.txt | 20 +-
.../src/superset_core/semantic_layers}/__init__.py | 2 +-
superset-frontend/oxlint.json | 2 +-
superset-frontend/package-lock.json | 1097 ++++++++------------
superset-frontend/package.json | 30 +-
.../src/utils/getTotalsMetrics.test.ts | 29 +-
.../src/utils/getTotalsMetrics.ts | 42 +-
.../packages/superset-ui-core/package.json | 4 +-
.../src/components/Modal/Modal.test.tsx | 153 +++
.../src/components/Modal/Modal.tsx | 25 +-
.../src/components/Select/types.ts | 1 +
.../ThemedAgGridReact/ThemedAgGridReact.test.tsx | 28 +
.../src/components/ThemedAgGridReact/index.tsx | 11 +
.../factories/createSmartNumberFormatter.ts | 5 +-
.../src/query/getClientErrorObject.ts | 21 +-
.../superset-ui-core/src/utils/featureFlags.ts | 1 +
.../factories/createSmartNumberFormatter.test.ts | 6 +
.../test/query/getClientErrorObject.test.ts | 18 +
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 11 +-
.../src/controlPanel.tsx | 14 +-
.../test/buildQuery.test.ts | 28 +-
.../scripts/Country Map GeoJSON Generator.ipynb | Bin 11004185 -> 11010873 bytes
.../plugin-chart-country-map/src/countries.ts | 5 +
.../src/countries/iran.geojson | Bin 134537 -> 134537 bytes
...italy_regions_and_autonomous_provinces.geojson} | Bin 107344 -> 108915 bytes
.../test/countries.test.ts | 58 ++
.../test/iran.geojson.test.ts | 69 ++
.../src/MixedTimeseries/controlPanel.tsx | 25 +
.../src/MixedTimeseries/transformProps.ts | 4 +
.../src/MixedTimeseries/types.ts | 15 +
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 2 +
.../src/Timeseries/transformers.ts | 24 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 11 +
.../src/Waterfall/controlPanel.tsx | 38 +
.../src/Waterfall/transformProps.ts | 10 +-
.../plugin-chart-echarts/src/Waterfall/types.ts | 4 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 25 +
.../src/utils/eChartOptionsSchema.ts | 19 +
.../src/utils/eventHandlers.ts | 3 +
.../src/utils/safeEChartOptionsParser.test.ts | 91 ++
.../test/MixedTimeseries/controlPanel.test.ts | 109 ++
.../test/MixedTimeseries/transformProps.test.ts | 55 +-
.../test/Timeseries/Bar/controlPanel.test.ts | 46 +
.../test/Timeseries/transformProps.test.ts | 141 +++
.../test/Waterfall/transformProps.test.ts | 53 +
.../test/utils/eventHandlers.test.ts | 43 +
.../src/plugin/transformProps.ts | 19 +-
.../test/plugin/transformProps.test.ts | 149 +++
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../plugins/plugin-chart-table/src/TableChart.tsx | 41 +-
.../plugins/plugin-chart-table/src/buildQuery.ts | 5 +-
.../plugin-chart-table/src/controlPanel.tsx | 14 +-
.../plugin-chart-table/test/TableChart.test.tsx | 29 +-
.../plugin-chart-table/test/buildQuery.test.ts | 27 +-
.../src/components/Tooltip.test.tsx | 64 ++
.../preset-chart-deckgl/src/components/Tooltip.tsx | 26 +-
.../SqlLab/components/SqlEditor/SqlEditor.test.tsx | 18 +-
.../src/SqlLab/reducers/sqlLab.test.ts | 47 +
superset-frontend/src/SqlLab/reducers/sqlLab.ts | 23 +-
.../RowCountLabel/RowCountLabel.test.tsx | 16 +
.../src/components/RowCountLabel/index.tsx | 16 +-
.../CrossFilters/ScopingModal/ScopingTreePanel.tsx | 13 +-
.../src/explore/components/Control.test.tsx | 77 +-
.../src/explore/components/Control.tsx | 21 +-
.../src/explore/components/ControlHeader.test.tsx | 112 ++
.../src/explore/components/ControlHeader.tsx | 32 +-
.../components/DataTableControls.tsx | 15 +-
.../DataTablesPane/components/SamplesPane.tsx | 8 +
.../components/SingleQueryResultPane.tsx | 4 +
.../DataTablesPane/components/useResultsPane.tsx | 13 +
.../DataTablesPane/test/DataTableControls.test.tsx | 94 ++
.../DataTablesPane/test/useResultsPane.test.tsx | 43 +-
.../src/explore/components/DataTablesPane/types.ts | 10 +
.../controls/DateFilterControl/DateFilterLabel.tsx | 20 +-
.../tests/DateFilterLabel.test.tsx | 90 +-
.../components/controls/DateFilterControl/types.ts | 6 +
.../FilterControl/AdhocFilter/AdhocFilter.test.ts | 32 +
.../controls/FilterControl/AdhocFilter/index.ts | 6 +-
.../AdhocFilterEditPopover.test.tsx | 23 +
.../src/features/alerts/AlertReportModal.tsx | 14 +-
.../UploadDataModel/UploadDataModal.test.tsx | 12 +-
.../reports/ReportModal/ReportModal.test.tsx | 21 +-
.../src/features/reports/ReportModal/index.tsx | 22 +-
superset-frontend/src/pages/Chart/Chart.test.tsx | 48 +-
superset-frontend/src/pages/Chart/index.tsx | 10 +
.../DatabaseList.semanticLayerDelete.test.tsx | 425 ++++++++
superset-frontend/src/pages/DatabaseList/index.tsx | 173 ++-
superset-frontend/src/pages/Home/Home.test.tsx | 2 +-
.../src/utils/downloadAsImage.test.ts | 234 +++++
superset-frontend/src/utils/downloadAsImage.tsx | 90 +-
.../src/utils/downloadAsPivotExcel.test.ts | 116 +++
.../src/utils/downloadAsPivotExcel.ts | 52 +-
superset-websocket/package-lock.json | 626 +++++------
superset-websocket/package.json | 4 +-
superset/charts/api.py | 14 +-
superset/charts/data/api.py | 65 +-
superset/commands/chart/export.py | 15 +-
superset/commands/dashboard/export.py | 26 +-
superset/commands/database/exceptions.py | 36 -
superset/commands/database/export.py | 6 +-
superset/commands/database/uploaders/base.py | 2 +
superset/commands/dataset/export.py | 63 +-
superset/commands/deletion_retention/audit.py | 122 ++-
.../commands/deletion_retention/force_purge.py | 2 +-
.../commands/deletion_retention/purge_cascade.py | 36 +-
.../commands/deletion_retention/purge_policy.py | 94 +-
superset/commands/explore/permalink/create.py | 7 +-
superset/commands/explore/permalink/get.py | 7 +-
superset/commands/export/models.py | 40 +-
superset/commands/query/export.py | 42 +-
superset/commands/report/execute.py | 11 +-
superset/commands/report/update.py | 37 +-
superset/commands/sql_lab/results.py | 12 +
superset/commands/tag/create.py | 28 +-
superset/commands/tag/export.py | 4 +-
superset/commands/theme/export.py | 6 +-
superset/commands/version_restore.py | 4 +-
superset/config.py | 25 +-
superset/daos/base.py | 17 +-
superset/dashboards/api.py | 24 +-
superset/databases/api.py | 17 +-
superset/datasets/api.py | 14 +-
superset/db_engine_specs/base.py | 22 +-
superset/db_engine_specs/cockroachdb.py | 2 +-
superset/db_engine_specs/trino.py | 3 +
superset/examples/birth_names.py | 14 +-
.../usa_births_names/charts/Boy_Name_Cloud.yaml | 2 +-
.../examples/usa_births_names/charts/Boys.yaml | 2 +-
.../examples/usa_births_names/charts/Genders.yaml | 2 +-
.../usa_births_names/charts/Genders_by_State.yaml | 2 +-
.../usa_births_names/charts/Girl_Name_Cloud.yaml | 2 +-
.../examples/usa_births_names/charts/Girls.yaml | 2 +-
.../usa_births_names/charts/Participants.yaml | 2 +-
.../usa_births_names/charts/Pivot_Table_v2.yaml | 2 +-
.../charts/Top_10_Boy_Name_Share.yaml | 2 +-
.../charts/Top_10_Girl_Name_Share.yaml | 2 +-
.../examples/usa_births_names/charts/Trends.yaml | 2 +-
superset/examples/world_bank.py | 2 +-
.../examples/world_health/charts/Box_plot.yaml | 2 +-
.../examples/world_health/charts/Growth_Rate.yaml | 2 +-
.../charts/Life_Expectancy_VS_Rural.yaml | 2 +-
.../charts/Most_Populated_Countries.yaml | 2 +-
superset/examples/world_health/charts/Rural.yaml | 2 +-
.../world_health/charts/Rural_Breakdown.yaml | 2 +-
superset/examples/world_health/charts/Treemap.yaml | 2 +-
.../world_health/charts/World_s_Pop_Growth.yaml | 2 +-
.../world_health/charts/World_s_Population.yaml | 2 +-
superset/explore/permalink/api.py | 5 +
superset/extensions/metadb.py | 86 +-
superset/importexport/api.py | 12 +-
superset/initialization/__init__.py | 13 +-
superset/mcp_service/CLAUDE.md | 13 +-
.../tool/get_annotation_layer_info.py | 1 +
.../tool/get_layer_annotation_info.py | 1 +
.../tool/list_annotation_layers.py | 1 +
.../tool/list_layer_annotations.py | 1 +
superset/mcp_service/app.py | 4 +-
superset/mcp_service/chart/chart_helpers.py | 25 +-
superset/mcp_service/chart/chart_utils.py | 4 +
superset/mcp_service/chart/plugins/histogram.py | 28 +-
superset/mcp_service/chart/schemas.py | 38 +-
superset/mcp_service/chart/tool/delete_chart.py | 2 +
superset/mcp_service/chart/tool/generate_chart.py | 2 +
superset/mcp_service/chart/tool/get_chart_data.py | 89 +-
superset/mcp_service/chart/tool/get_chart_info.py | 1 +
.../mcp_service/chart/tool/get_chart_preview.py | 1 +
superset/mcp_service/chart/tool/get_chart_sql.py | 102 +-
.../chart/tool/get_chart_type_schema.py | 1 +
superset/mcp_service/chart/tool/list_charts.py | 1 +
superset/mcp_service/chart/tool/restore_chart.py | 2 +
superset/mcp_service/chart/tool/update_chart.py | 2 +
.../mcp_service/chart/tool/update_chart_preview.py | 2 +
.../chart/validation/dataset_validator.py | 20 +-
.../mcp_service/dashboard/layout_validation.py | 312 ++++++
superset/mcp_service/dashboard/permalink.py | 184 ++++
superset/mcp_service/dashboard/schemas.py | 85 +-
.../tool/add_chart_to_existing_dashboard.py | 2 +
.../mcp_service/dashboard/tool/delete_dashboard.py | 2 +
.../dashboard/tool/duplicate_dashboard.py | 2 +
.../dashboard/tool/generate_dashboard.py | 2 +
.../dashboard/tool/get_dashboard_datasets.py | 1 +
.../dashboard/tool/get_dashboard_info.py | 141 +--
.../dashboard/tool/get_dashboard_layout.py | 44 +-
.../mcp_service/dashboard/tool/list_dashboards.py | 1 +
.../tool/manage_dashboard_certification.py | 2 +
.../dashboard/tool/manage_dashboard_owners.py | 2 +
.../dashboard/tool/manage_dashboard_roles.py | 2 +
.../dashboard/tool/manage_native_filters.py | 2 +
.../dashboard/tool/remove_chart_from_dashboard.py | 7 +-
.../dashboard/tool/restore_dashboard.py | 2 +
.../mcp_service/dashboard/tool/update_dashboard.py | 16 +-
.../mcp_service/database/tool/get_database_info.py | 1 +
.../mcp_service/database/tool/list_databases.py | 1 +
.../mcp_service/dataset/tool/create_dataset.py | 2 +
.../dataset/tool/create_virtual_dataset.py | 2 +
.../mcp_service/dataset/tool/get_dataset_info.py | 1 +
superset/mcp_service/dataset/tool/list_datasets.py | 1 +
superset/mcp_service/dataset/tool/query_dataset.py | 1 +
.../dataset/tool/update_dataset_metric.py | 2 +
.../explore/tool/generate_explore_link.py | 2 +
superset/mcp_service/middleware.py | 8 +
superset/mcp_service/query/tool/get_query_info.py | 1 +
superset/mcp_service/query/tool/list_queries.py | 1 +
.../mcp_service/report/tool/get_report_info.py | 1 +
superset/mcp_service/report/tool/list_reports.py | 1 +
.../mcp_service/rls/tool/get_rls_filter_info.py | 1 +
superset/mcp_service/rls/tool/list_rls_filters.py | 1 +
superset/mcp_service/role/tool/get_role_info.py | 1 +
superset/mcp_service/role/tool/list_roles.py | 1 +
.../saved_query/tool/get_saved_query_info.py | 1 +
.../saved_query/tool/list_saved_queries.py | 1 +
.../tool/get_compatible_dimensions.py | 1 +
.../semantic_layer/tool/get_compatible_metrics.py | 1 +
.../mcp_service/semantic_layer/tool/get_table.py | 1 +
.../semantic_layer/tool/list_metrics.py | 1 +
superset/mcp_service/sql_lab/tool/execute_sql.py | 2 +
.../sql_lab/tool/open_sql_lab_with_context.py | 1 +
.../mcp_service/sql_lab/tool/save_sql_query.py | 2 +
superset/mcp_service/system/tool/find_users.py | 1 +
.../mcp_service/system/tool/generate_bug_report.py | 1 +
.../mcp_service/system/tool/get_instance_info.py | 1 +
superset/mcp_service/system/tool/get_schema.py | 1 +
superset/mcp_service/system/tool/health_check.py | 1 +
superset/mcp_service/tag/tool/get_tag_info.py | 1 +
superset/mcp_service/tag/tool/list_tags.py | 1 +
superset/mcp_service/task/tool/get_task_info.py | 1 +
superset/mcp_service/task/tool/list_tasks.py | 1 +
superset/mcp_service/theme/tool/create_theme.py | 2 +
superset/mcp_service/theme/tool/get_theme_info.py | 1 +
superset/mcp_service/theme/tool/list_themes.py | 1 +
superset/mcp_service/user/tool/get_user_info.py | 1 +
superset/mcp_service/user/tool/list_users.py | 1 +
...0_39097d124752_add_reason_to_purge_audit_log.py | 60 ++
superset/models/purge_audit_log.py | 6 +
superset/queries/saved_queries/api.py | 14 +-
superset/reports/schemas.py | 44 +-
superset/sql/parse.py | 178 +++-
superset/sql_lab.py | 10 +-
superset/tasks/deletion_retention.py | 29 +-
superset/themes/api.py | 14 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 89 +-
superset/utils/cache.py | 14 +-
superset/utils/core.py | 35 +-
superset/utils/database.py | 36 +
superset/utils/excel.py | 41 +-
superset/utils/file.py | 71 +-
superset/utils/json.py | 8 +-
superset/utils/pandas_postprocessing/select.py | 29 +-
superset/views/error_handling.py | 11 +-
tests/integration_tests/charts/data/api_tests.py | 47 +-
.../integration_tests/dashboards/commands_tests.py | 104 ++
tests/integration_tests/databases/api_tests.py | 48 +
.../databases/commands/upload_test.py | 30 +
.../deletion_retention/audit_tests.py | 248 ++++-
.../deletion_retention/force_purge_tests.py | 1 +
.../deletion_retention/purge_tests.py | 118 ++-
tests/integration_tests/reports/commands_tests.py | 8 +
tests/integration_tests/sql_lab/commands_tests.py | 141 ++-
tests/unit_tests/charts/dao/dao_tests.py | 13 +-
tests/unit_tests/charts/test_chart_data_api.py | 324 ++++++
.../deletion_retention/test_reason_codes.py | 182 ++++
.../commands/explore/permalink}/__init__.py | 0
.../commands/explore/permalink/test_create.py | 45 +
.../commands/explore/permalink/test_get.py | 57 +
tests/unit_tests/commands/report/update_test.py | 6 +
tests/unit_tests/dao/base_dao_test.py | 125 ++-
.../commands/importers/v1/import_command_test.py | 9 +-
tests/unit_tests/dashboards/dao_tests.py | 11 +-
tests/unit_tests/databases/schema_tests.py | 38 +
tests/unit_tests/db_engine_specs/test_base.py | 64 +-
tests/unit_tests/db_engine_specs/test_crdb.py | 16 +
tests/unit_tests/db_engine_specs/test_ocient.py | 15 +-
tests/unit_tests/db_engine_specs/test_trino.py | 101 ++
tests/unit_tests/extensions/test_sqlalchemy.py | 405 ++++++++
.../mcp_service/chart/test_chart_helpers.py | 60 +-
.../mcp_service/chart/test_chart_utils.py | 36 +
.../mcp_service/chart/tool/test_generate_chart.py | 11 +
.../mcp_service/chart/tool/test_get_chart_data.py | 300 +++++-
.../mcp_service/chart/tool/test_get_chart_sql.py | 375 +++++++
.../chart/validation/test_dataset_validator.py | 74 ++
.../dashboard/test_dashboard_schemas.py | 50 +
.../dashboard/test_layout_validation.py | 401 +++++++
.../mcp_service/dashboard/test_permalink.py | 374 +++++++
.../dashboard/tool/test_dashboard_tools.py | 255 +++--
.../dashboard/tool/test_get_dashboard_layout.py | 137 +++
.../dashboard/tool/test_update_dashboard.py | 96 +-
tests/unit_tests/mcp_service/test_mcp_e2e_smoke.py | 30 +
.../mcp_service/test_mcp_tool_registration.py | 42 +
tests/unit_tests/mcp_service/test_middleware.py | 65 ++
.../pandas_postprocessing/test_select.py | 29 +
tests/unit_tests/queries/query_object_test.py | 20 +-
tests/unit_tests/reports/schemas_test.py | 10 +
tests/unit_tests/sql/parse_tests.py | 166 +++
tests/unit_tests/tags/commands/create_test.py | 69 ++
tests/unit_tests/utils/cache_test.py | 93 ++
tests/unit_tests/utils/excel_tests.py | 63 ++
tests/unit_tests/utils/json_tests.py | 21 +
tests/unit_tests/utils/send_export_zip_tests.py | 69 ++
tests/unit_tests/utils/test_file.py | 188 +++-
tests/unit_tests/views/test_error_handling.py | 76 ++
323 files changed, 12165 insertions(+), 2457 deletions(-)
copy {superset/mcp_service/screenshot => superset-core/src/superset_core/semantic_layers}/__init__.py (93%)
create mode 100644 superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.test.tsx
copy superset-frontend/plugins/plugin-chart-country-map/src/countries/{italy_regions.geojson => italy_regions_and_autonomous_provinces.geojson} (68%)
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/countries.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/iran.geojson.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/controlPanel.test.ts
create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/components/Tooltip.test.tsx
create mode 100644 superset-frontend/src/explore/components/ControlHeader.test.tsx
create mode 100644 superset-frontend/src/explore/components/DataTablesPane/test/DataTableControls.test.tsx
create mode 100644 superset-frontend/src/pages/DatabaseList/DatabaseList.semanticLayerDelete.test.tsx
create mode 100644 superset-frontend/src/utils/downloadAsPivotExcel.test.ts
create mode 100644 superset/mcp_service/dashboard/layout_validation.py
create mode 100644 superset/mcp_service/dashboard/permalink.py
create mode 100644 superset/migrations/versions/2026-08-24_12-00_39097d124752_add_reason_to_purge_audit_log.py
create mode 100644 tests/unit_tests/commands/deletion_retention/test_reason_codes.py
copy {scripts => tests/unit_tests/commands/explore/permalink}/__init__.py (100%)
create mode 100644 tests/unit_tests/commands/explore/permalink/test_create.py
create mode 100644 tests/unit_tests/commands/explore/permalink/test_get.py
create mode 100644 tests/unit_tests/mcp_service/chart/validation/test_dataset_validator.py
create mode 100644 tests/unit_tests/mcp_service/dashboard/test_layout_validation.py
create mode 100644 tests/unit_tests/mcp_service/dashboard/test_permalink.py
create mode 100644 tests/unit_tests/utils/send_export_zip_tests.py