You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/06/09 16:19:44 UTC
(superset) branch fix/schema-output-and-input-hardening updated (a5b8577e1c1 -> dca49670cde)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch fix/schema-output-and-input-hardening
in repository https://gitbox.apache.org/repos/asf/superset.git
omit a5b8577e1c1 fix(schemas): coerce prophet max config and require absolute external_url
omit ce27878f557 feat(dashboard): harden custom CSS input validation (finding 017)
omit e8a194aabf6 chore: fix mypy on schema-hardening PR
omit 9b4b290b305 fix(schemas): tighten guest dataset fields, external_url protocols, ssh creds, prophet bounds
add 8e4a460cc71 fix(charts): apply DISALLOWED_SQL_FUNCTIONS gate to adhoc expressions (#40568)
add faa76f67412 fix(embedding): add optional dataset allowlist to guest tokens (#39302)
add 725f5ed2a90 fix(api): enforce per-object ownership validation in chart, dataset, and report commands (#39303)
add f7f50a79770 fix(sqllab): quote CTAS target identifiers and validate tmp_table_name format (#40245)
add cf08a5ebf75 feat(docker): add environment-based debugger control (#40327)
add 3191b0fdcd5 fix: apply dashboard access check in related_objects endpoints (#40333)
add 61b32d1b7d0 fix(chart): standardize dashboard validation across chart create/update (#40336)
add 56fd991efde fix(dataset): unify validation for stored and adhoc SQL expressions (#40392)
add 77c2bed5f72 fix(dashboards): narrow datasets payload to callers with read access (#40396)
add b8a2f925ee4 fix(views): enforce per-chart access check in legacy form_data endpoint (#40497)
add e3ba85b1a5e fix(redirect): normalize browser-stripped whitespace before protocol-relative check (#40566)
add c914df5a67c ci: harden CI against Docker Hub registry flakes (retries + auth) (#40700)
add accc94da516 fix(users): show 0 for null login_count and fail_login_count (#40281)
add e5ff6de790b chore: correct typos in config.py and models_test.py comments (#40706)
add cb2a56d16e0 chore: guard recursive merge keys and invoke subprocess without a shell (#40558)
add e5c7200551a ci: gate expensive test workflows at the job level (#40718)
add 001834470b8 fix(mcp): escape LIKE wildcards in MCP list tool search filters (#40682)
add f4dfb7f0266 fix(mcp): fall back to form_data spatial query for Deck.gl charts (#40339)
add fcb1e299ace fix(nvd3): sanitize generateMultiLineTooltipContent output (#40612)
add 6ea4e227856 refactor(nvd3): extract testable generateAnnotationTooltipContent helper (#40620)
add 80ea36c852f fix(db_engine_specs): escape schema name in regex; document safe filter pattern (#40642)
add c373da1bb91 ci: add cancel-in-progress concurrency to PR helper workflows (#40725)
add 80a5f6b787e fix(calendar): Fix day offset in Calendar Heatmap visualization (#34564)
add 2be2246a003 chore(deps-dev): bump gevent from 24.2.1 to 26.4.0 (#40378)
add 43fde2fb07e fix(charts): enforce DISALLOWED_SQL_FUNCTIONS and DISALLOWED_SQL_TABLES at chart-data execution (#40567)
add 6a125bf774b fix(jinja): expose dialect-escaped companion value on get_filters() (#40531)
add 9d1bc6b2ccb fix(i18n): don't flag intentional string deletions as translation regressions (#40716)
add cf5307d0c6f ci: reduce Cypress parallelism from 6 shards to 2 (#40717)
add 5ba60d51fd0 ci: gate CodeQL analysis at the job level for docs-only PRs (#40724)
add 41572dbf9df fix(chart): restrict owner lookup to users with write access (#39304)
add 696705794b1 ci: gate docker image builds at the job level (#40723)
add 966c243db6f ci: drop removed Cypress shards from required status checks (#40770)
add aa547da9607 fix: remove registration_hash in the registrations API (#40643)
add bdb081329fb feat(websocket): validate WebSocket upgrade Origin against an allowlist (#40625)
add ff5e43c8a09 ci: add timeout-minutes to compute-heavy workflow jobs (#40743)
add 8dcc7e7eec2 ci: stable required-check anchors for skippable matrix test jobs (#40772)
add ddb09f468d8 fix(plugin-chart-ag-grid-table): enforce numeric bounds for range (BETWEEN) filters (#40607)
add 23d18743bdb fix(deck.gl): strip all JS-executed form_data keys when JavaScript controls are disabled (#40602)
add c505c70c52e fix(databases): do not render existing encrypted field value in edit mode (#40628)
add 75d94ff466a fix(SafeMarkdown): block script-executing link protocols regardless of EscapeMarkdownHtml (#40622)
add cd5bdf11acc fix(playwright): de-flake list-view delete and bulk-export specs (#39980)
add 9a31362fa5e fix(reports): stamp email subject date at send time, not import time (#40693)
add 7d69f76127a fix(mcp): API key authentication for MCP ā transport, validation, and RBAC (#39604)
add 6f97d9817e1 fix(database): preserve engine_information when creating database connection (#38107)
add 80a3df3550e ci: run full Python-version matrix on push, current-only on PRs (#40722)
add 3f94c9db2d5 chore(deps): bump query-string from 9.3.1 to 9.4.0 in /superset-frontend (#40742)
add cbd731e6614 chore(deps-dev): bump webpack from 5.107.1 to 5.107.2 in /superset-frontend (#40741)
add 09cd2c26cdc chore(deps): bump react-map-gl from 8.1.0 to 8.1.1 in /superset-frontend (#40740)
add 6662529306e chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#40739)
add 0ad09d5cd0e chore(deps): bump dompurify from 3.4.8 to 3.4.7 in /superset-frontend/packages/superset-ui-core (#40737)
add ddeec68c88a chore(deps): bump dompurify from 3.4.5 to 3.4.7 in /superset-frontend/plugins/legacy-preset-chart-nvd3 (#40735)
add 0d1b702ce8d feat(extensions): static supply-chain controls ā denylist + version policy (#40668)
add 7d323dc0ae3 fix(filters): Enable decimal values in Range filter slider (#34742)
add 639866625db fix(echarts): Show full labels in bar chart tooltips (#34759)
add f5f4a415981 chore(deps-dev): bump @babel/register from 7.29.3 to 7.29.7 in /superset-frontend (#40757)
add 937eff6d52c chore(deps-dev): bump oxlint from 1.66.0 to 1.67.0 in /superset-frontend (#40755)
add 04939c94cc4 chore(deps-dev): bump @babel/node from 7.29.0 to 7.29.7 in /superset-frontend (#40752)
add 94c1a1b1f20 chore(deps-dev): bump @babel/runtime-corejs3 from 7.29.2 to 7.29.7 in /superset-frontend (#40751)
add ccce0cab187 chore(deps): bump content-disposition from 2.0.0 to 2.0.1 in /superset-frontend (#40750)
add 74060987082 fix(dashboard-filter): Consider dashboard filters to charts not declared in the dashboard position (#40774)
add 79c74af2e9d ci: cache npm downloads in frontend-heavy workflows (#40744)
add 875673f6707 fix(asyncEvent): use Map for job listener/retry registries (#40747)
add 42367afb25c fix(reports): add per-tile animation wait to prevent partial ECharts renders in tiled screenshots (#40694)
add 98c096df056 chore(deps): bump @babel/runtime from 7.29.2 to 7.29.7 in /superset-frontend (#40753)
add 45a616439bb chore(deps): update dayjs requirement from ^1.11.20 to ^1.11.21 in /superset-frontend/packages/superset-ui-core (#40736)
add aa4092ba682 fix(mcp): add select_columns lean defaults to get_dashboard_info, get_chart_info, get_dataset_info (#40473)
add fa42b13eb83 fix(dataset): preserve numeric column types when pydruid infers STRING from first-row value (#40677)
add 601f9c2b8c3 fix(embedded): add guest token to streaming exports (#40712)
add 55bb75efe6d fix(dashboard): prevent filter dropdown button from disappearing during layout recalculations (#38193)
add 645aa3b1df4 chore(deps-dev): bump eslint-plugin-prettier from 5.5.5 to 5.5.6 in /superset-frontend (#40795)
add 81192048572 fix(dashboard): sort Dynamic Group By display values alphabetically (#40220)
add 108e40cbb61 feat(duration-format): replace pretty-ms with native Intl.DurationFormat for localized duration formatting (#39330)
add 550c80f640a chore(lint): convert ChartRenderer, Chart, DrillByChart to function components (#39459)
add 70ee6e21eb6 chore(deps-dev): bump @babel/core from 7.29.0 to 7.29.7 in /superset-frontend (#40800)
add b069b6caf6c chore(deps-dev): bump terser-webpack-plugin from 5.6.0 to 5.6.1 in /superset-frontend (#40797)
add 20024ce3af2 chore(deps-dev): bump eslint-plugin-react-you-might-not-need-an-effect from 0.10.2 to 0.10.4 in /superset-frontend (#40796)
add 44777cc1109 chore(deps): bump @ant-design/icons from 6.2.3 to 6.2.5 in /superset-frontend (#40794)
add 2aca35cb68d chore(deps): bump react-map-gl from 8.1.0 to 8.1.1 in /superset-frontend (#40793)
add e956f82224b fix(dashboard): prevent divider display controls from reverting on second save (#40696)
add 1623ceda73d fix(result_set): preserve JSON/JSONB data as objects instead of strings (#38172)
add 19d01521bf5 fix(dashboard): replace chartsInScope references at import time (#38171)
add 81bc3088e22 fix(dashboard): prevent stale favorite status errors after navigation (#38156)
add 863e93539ae fix(dashboard): clean up JSON formatting and contribution suffix in V⦠(#40683)
add 0984839788f ci: required-check anchors for cypress-matrix and playwright-tests (unblock docs-only PRs) (#40780)
add 7eaaffde896 ci: cache npm downloads in the translations workflow (#40779)
add 7f452e40966 chore(deps): bump @ant-design/icons from 6.2.3 to 6.2.5 in /docs (#40792)
add 5a6306983e5 docs: add social media links to website footer and README (#38108)
add 4715cfd3725 chore(deps-dev): bump eslint-plugin-prettier from 5.5.5 to 5.5.6 in /docs (#40791)
add 2babb480818 chore(deps): bump ioredis from 5.10.1 to 5.11.0 in /superset-websocket (#40734)
add 3d7021fdf95 chore(deps): bump hot-shots from 14.3.1 to 15.0.0 in /superset-websocket (#40789)
add 151df43d9d0 fix(docker): prevent static asset 404s by waiting for webpack dev server (#38161)
add 6b0d7479399 fix: cache warmup using WebDriver for reliable authentication (#38449)
add 381b99ae84b fix(csv): respect CSV_EXPORT config for decimal separator and delimiter (#38170)
add b85a2cdab15 fix: ODPS (MaxCompute) data source table preview failed (#38174)
add 84aaaaa6b08 fix(mcp): filter sensitive database columns from list_databases loaded-metadata (#40771)
add ef7379c47e3 chore(mcp): remove low-value list/info tools that fail agent-native policy (#40690)
add 6348aa19173 chore(deps-dev): update taos-ws-py requirement from >=0.3.8 to >=0.6.9 (#40831)
add d3f07a7ba54 chore(deps-dev): update playwright requirement from <2,>=1.37.0 to >=1.60.0,<2 (#40829)
add 2463eb65b1c chore(deps-dev): bump python-ldap from 3.4.5 to 3.4.7 (#40827)
add 9da45363542 chore(deps-dev): update oceanbase-py requirement from >=0.0.1 to >=0.0.1.2 (#40824)
add 849f297e9d2 chore(deps-dev): update sqlalchemy-vertica-python requirement from <0.7,>=0.5.9 to >=0.6.3,<0.7 (#40826)
add 138e405cb60 chore(deps): bump xlsxwriter from 3.0.9 to 3.2.9 (#40825)
add c0a12f4cfb5 chore(deps-dev): update sqlalchemy-kusto requirement from <4,>=3.0.0 to >=3.1.2,<4 (#40828)
add 9bb700ff0df chore(deps-dev): bump concurrently from 9.2.1 to 10.0.0 in /superset-frontend (#40798)
add 5da63d716be fix(toasts): stop the toast overlay from covering controls behind it (#40805)
add 06f95f53623 refactor(explore): migrate Explore Controls from react-dnd to @dnd-kit (#37880)
add 21189ae130a fix(dashboard): update browser tab title when dashboard is renamed (#40730)
add 7c7ab88a602 feat(ListView): expose expandable prop (#40765)
add dc423b22b31 feat(embedded): support themeMode URL param for initial theme (#40760)
add a5fe47ee715 docs(footer): render social icons as uniform white (#40854)
add b4eda37fbf9 chore(deps-dev): bump baseline-browser-mapping from 2.10.32 to 2.10.33 in /superset-frontend (#40849)
add 983f2818b0e chore(deps-dev): bump @swc/plugin-emotion from 14.10.0 to 14.12.0 in /superset-frontend (#40848)
add c5d795c1f11 chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#40847)
add 709fd52b0b3 chore(deps-dev): bump tsx from 4.22.3 to 4.22.4 in /superset-frontend (#40845)
add 534d2191ffe chore(deps): bump react-draggable from 4.5.0 to 4.6.0 in /superset-frontend (#40844)
add c6ecaf9642b chore(deps): bump js-yaml from 4.1.1 to 4.2.0 in /docs (#40843)
add 228ac0d5687 chore(deps): bump baseline-browser-mapping from 2.10.32 to 2.10.33 in /docs (#40842)
add ba6e9cc90fa chore(deps-dev): bump eslint from 10.4.0 to 10.4.1 in /superset-websocket (#40840)
add 507cf936877 test(dashboard): API-created dashboards should link charts from position_json (#32966) (#40816)
add 911bb9dcdac fix: harden ZIP safety checks (total-size cap, zero-division guard) and extension path matching (#40664)
add 580be2cf32d fix(extensions-cli): constrain backend include patterns to the backend directory (#40593)
add e9e92451120 test(mixed-chart): dashboard filters should reach both Mixed chart queries (#29519) (#40818)
add 8fdabc44f50 chore(deps): update react-draggable requirement from ^4.5.0 to ^4.6.0 in /superset-frontend/packages/superset-ui-core (#40841)
add 1e8438a478f test(dashboard): migrate favorite toggle Cypress spec to RTL (#40872)
add fe9818226d7 fix(viz): gate stacktrace behind SHOW_STACKTRACE and allowlist resample method (#40636)
add 8eda626466d fix: raise random_key entropy and add expiry to async query tokens (#40638)
add 837f41986d5 fix: reject default guest/async JWT secrets at startup (#40649)
add 3afbb48188b fix(uploads,dao): add zip-safety check to columnar reader and cap DAO page size (#40637)
add fb0e7fecafa ci: authenticate Docker Hub pulls for service containers (#40875)
add 1188cfef1d4 ci: make Docker-build npm ci resilient to transient network blips (#40874)
add c58408d76c4 fix(revert 40875): "ci: authenticate Docker Hub pulls for service containers" failed (#40879)
add d7ddf2023da fix(theme): SDK theme config overrides dashboard-level theme in embedded mode (#40763)
add 2f71771b561 fix(sqllab): prevent corrupted query state from blocking SQL Lab access (#40580)
add 56c856e802d fix(explore): require Update Chart for Matrixify dimension changes (#40851)
add 3259a4a781e fix(translation): update german translation for slider range (#40902)
add 443fd7bcee5 fix(assets): Support uploading tags using the assets import endpoint (#38343)
add 9105adc67b2 fix(mcp): return a generic message when a request is unauthenticated (#40861)
add a1645af05a1 fix(schemas): tighten guest dataset fields, external_url protocols, ssh creds, prophet bounds
add 6cfcc6d6817 chore: fix mypy on schema-hardening PR
add 388b5b08ea9 feat(dashboard): harden custom CSS input validation (finding 017)
add dca49670cde fix(schemas): coerce prophet max config and require absolute external_url
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 (a5b8577e1c1)
\
N -- N -- N refs/heads/fix/schema-output-and-input-hardening (dca49670cde)
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:
.asf.yaml | 14 +-
.github/workflows/check-python-deps.yml | 13 +
.github/workflows/codeql-analysis.yml | 35 +-
.github/workflows/docker.yml | 54 +-
.github/workflows/github-action-validator.yml | 5 +
.github/workflows/labeler.yml | 5 +
.github/workflows/pr-lint.yml | 5 +
.github/workflows/pre-commit.yml | 8 +-
.github/workflows/superset-e2e.yml | 126 +++-
.github/workflows/superset-extensions-cli.yml | 5 +-
.github/workflows/superset-frontend.yml | 6 +
.github/workflows/superset-playwright.yml | 40 +-
.../workflows/superset-python-integrationtest.yml | 85 ++-
.github/workflows/superset-python-presto-hive.yml | 50 +-
.github/workflows/superset-python-unittest.yml | 56 +-
.github/workflows/superset-translations.yml | 2 +
.github/workflows/superset-websocket.yml | 1 +
Dockerfile | 7 +
README.md | 5 +
UPDATING.md | 37 ++
docker-compose.yml | 25 +
docker/docker-bootstrap.sh | 18 +-
docs/admin_docs/configuration/cache.mdx | 33 +
docs/admin_docs/installation/pypi.mdx | 9 +-
.../version-6.1.0/installation/pypi.mdx | 9 +-
.../contributing/development-setup.md | 2 +
docs/docusaurus.config.ts | 17 +
docs/i18n/en/docusaurus-theme-classic/footer.json | 2 +-
docs/package.json | 8 +-
docs/src/styles/main.css | 52 +-
docs/static/img/community/reddit-symbol.svg | Bin 0 -> 1995 bytes
docs/static/img/community/slack-symbol.svg | Bin 0 -> 1911 bytes
docs/yarn.lock | 55 +-
pyproject.toml | 17 +-
requirements/base.txt | 4 +-
requirements/development.txt | 8 +-
.../translations/check_translation_regression.py | 174 +++--
scripts/uv-pip-compile.sh | 23 +-
superset-embedded-sdk/README.md | 116 ++--
.../src/superset_extensions_cli/cli.py | 24 +-
superset-extensions-cli/tests/test_cli_build.py | 150 +++++
superset-frontend/.eslintrc.js | 2 +-
.../cypress/e2e/dashboard/actions.test.js | 67 --
.../cypress-base/cypress/e2e/dashboard/utils.ts | 12 -
superset-frontend/jest.config.js | 2 +-
superset-frontend/package-lock.json | 577 ++++++++--------
superset-frontend/package.json | 38 +-
.../packages/superset-core/package.json | 2 +-
.../packages/superset-core/src/theme/types.ts | 6 +
.../src/shared-controls/matrixifyControls.tsx | 1 -
.../src/utils/D3Formatting.ts | 2 +-
.../packages/superset-ui-core/package.json | 10 +-
.../DropdownContainer/DropdownContainer.tsx | 31 +-
.../src/components/Modal/Modal.tsx | 22 +-
.../superset-ui-core/src/components/Modal/types.ts | 2 +-
.../src/components/SafeMarkdown/SafeMarkdown.tsx | 49 +-
.../src/components/Table/index.tsx | 2 +
.../TableCollection/TableCollection.test.tsx | 6 +
.../src/components/TableCollection/index.tsx | 31 +-
.../superset-ui-core/src/number-format/README.md | 6 +-
.../factories/createDurationFormatter.ts | 47 +-
.../utils/getIntlDurationFormatter.ts} | 14 +-
.../src/number-format/utils/parseMilliseconds.ts | 57 ++
.../superset-ui-core/src/query/types/Dashboard.ts | 1 -
.../test/components/SafeMarkdown.test.tsx | 58 ++
.../factories/createDurationFormatter.test.ts | 25 +-
.../utils/getIntlDurationFormatter.test.ts | 38 ++
.../number-format/utils/parseMilliseconds.test.ts | 148 +++++
.../packages/superset-ui-core/types/intl.d.ts | 73 ++
.../playwright/components/ListView/BulkSelect.ts | 84 ++-
.../playwright/components/ListView/index.ts | 1 +
.../components/modals/DeleteConfirmationModal.ts | 32 +-
.../playwright/pages/ChartListPage.ts | 33 +-
.../playwright/pages/DashboardListPage.ts | 33 +-
.../playwright/pages/DatasetListPage.ts | 39 +-
.../playwright/tests/chart/chart-list.spec.ts | 103 ++-
.../tests/dashboard/dashboard-list.spec.ts | 137 ++--
...ec.ts => mixed-chart-dashboard-filters.spec.ts} | 175 +++--
.../playwright/tests/dataset/dataset-list.spec.ts | 128 ++--
superset-frontend/playwright/utils/constants.ts | 7 +-
.../legacy-plugin-chart-calendar/src/utils.ts | 4 +-
.../src/vendor/cal-heatmap.ts | 27 +-
.../test/utils.test.ts | 125 ++--
.../plugins/legacy-preset-chart-nvd3/package.json | 4 +-
.../plugins/legacy-preset-chart-nvd3/src/utils.ts | 36 +-
.../legacy-preset-chart-nvd3/test/utils.test.ts | 79 +++
.../src/utils/agGridFilterConverter.ts | 33 +-
.../test/utils/agGridFilterConverter.test.ts | 61 ++
.../plugins/plugin-chart-echarts/package.json | 2 +-
.../BigNumberWithTrendline/transformProps.test.ts | 4 +-
.../src/Timeseries/transformProps.ts | 6 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 7 +-
.../test/Timeseries/transformProps.test.ts | 97 +++
.../plugins/plugin-chart-handlebars/package.json | 2 +-
.../plugins/preset-chart-deckgl/package.json | 2 +-
superset-frontend/spec/helpers/setup.ts | 4 +
superset-frontend/spec/helpers/testing-library.tsx | 7 +
.../SqlLab/components/TabbedSqlEditors/index.tsx | 19 +-
.../DynamicGroupBy/DynamicGroupByPlugin.test.tsx | 81 +++
.../DynamicGroupBy/DynamicGroupByPlugin.tsx | 19 +-
.../components/DynamicGroupBy/types.ts | 1 -
superset-frontend/src/components/Chart/Chart.tsx | 506 +++++++-------
.../src/components/Chart/ChartRenderer.test.tsx | 83 +--
.../src/components/Chart/ChartRenderer.tsx | 732 ++++++++++-----------
.../src/components/Chart/DrillBy/DrillByChart.tsx | 4 +-
.../src/components/CrudThemeProvider.test.tsx | 55 ++
.../src/components/CrudThemeProvider.tsx | 19 +-
.../src/components/ListView/ListView.test.tsx | 5 +-
.../src/components/ListView/ListView.tsx | 23 +-
superset-frontend/src/components/ListView/utils.ts | 22 +-
.../MessageToasts/ToastPresenter.test.tsx | 10 +
.../components/MessageToasts/ToastPresenter.tsx | 4 +-
.../useStreamingExport.test.ts | 32 +
.../StreamingExportModal/useStreamingExport.ts | 5 +
.../src/dashboard/actions/dashboardState.test.ts | 331 +++++++++-
.../src/dashboard/actions/dashboardState.ts | 100 ++-
.../DashboardBuilder/DashboardWrapper.test.tsx | 53 +-
.../dashboard/components/Header/Header.test.tsx | 29 +
.../FilterControls/GroupByFilterCard.test.tsx | 41 ++
.../FilterBar/FilterControls/GroupByFilterCard.tsx | 36 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 2 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 133 ++++
.../FiltersConfigModal/FiltersConfigModal.tsx | 18 +-
.../dashboard/containers/DashboardPage.test.tsx | 191 +++++-
.../src/dashboard/containers/DashboardPage.tsx | 24 +-
.../util/charts/getFormDataWithExtraFilters.ts | 12 -
.../util/migrateChartCustomization.test.ts | 24 +-
.../dashboard/util/migrateChartCustomization.ts | 7 +-
.../src/embedded/EmbeddedContextProviders.tsx | 5 +-
.../src/embedded/getInitialThemeMode.test.ts | 66 ++
.../embedded/getInitialThemeMode.ts} | 27 +-
.../components/useGridResultTable.tsx | 37 +-
.../DataTablesPane/test/DataTablesPane.test.tsx | 40 ++
.../DatasourcePanelDragOption.test.tsx | 16 +-
.../DatasourcePanelDragOption/index.tsx | 44 +-
.../ExploreContainer/ExploreContainer.test.tsx | 120 ++--
.../ExploreContainer/ExploreDndContext.test.tsx | 125 ++++
.../ExploreContainer/ExploreDndContext.tsx | 244 +++++++
.../explore/components/ExploreContainer/index.tsx | 81 +--
.../controls/CollectionControl/index.tsx | 4 +-
.../components/controls/ContourControl/index.tsx | 2 +
.../DndColumnMetricSelect.test.tsx | 273 ++++----
.../DndColumnSelect.test.tsx | 24 +-
.../DndColumnSelectControl/DndColumnSelect.tsx | 5 +
.../DndFilterSelect.test.tsx | 329 +++++----
.../DndColumnSelectControl/DndFilterSelect.tsx | 2 +
.../DndMetricSelect.test.tsx | 258 ++++----
.../DndColumnSelectControl/DndMetricSelect.tsx | 5 +
.../DndColumnSelectControl/DndSelectLabel.test.tsx | 9 +-
.../DndColumnSelectControl/DndSelectLabel.tsx | 83 ++-
.../DndColumnSelectControl/OptionWrapper.test.tsx | 55 +-
.../DndColumnSelectControl/OptionWrapper.tsx | 90 +--
.../DndColumnSelectControl/dndTestUtils.ts | 120 ++++
.../AdhocFilterOption/AdhocFilterOption.test.tsx | 2 +-
.../OptionControls/OptionControls.test.tsx | 21 +-
.../components/controls/OptionControls/index.tsx | 109 ++-
.../DatabaseConnectionForm/EncryptedField.test.tsx | 62 +-
.../DatabaseConnectionForm/EncryptedField.tsx | 12 +-
.../databases/DatabaseModal/index.test.tsx | 37 ++
.../src/features/databases/DatabaseModal/index.tsx | 7 +
.../src/features/tasks/TaskStatusIcon.tsx | 4 +
.../src/features/tasks/timeUtils.test.ts | 6 +-
superset-frontend/src/features/tasks/timeUtils.ts | 72 +-
.../components/Range/RangeFilterPlugin.test.tsx | 159 ++++-
.../filters/components/Range/RangeFilterPlugin.tsx | 26 +
.../src/middleware/asyncEvent.test.ts | 28 +
superset-frontend/src/middleware/asyncEvent.ts | 37 +-
superset-frontend/src/pages/ChartList/index.tsx | 3 +
.../src/pages/DashboardList/index.tsx | 3 +
superset-frontend/src/pages/DatasetList/index.tsx | 6 +
superset-frontend/src/pages/SqlLab/index.tsx | 40 +-
superset-frontend/src/pages/TaskList/index.tsx | 7 +-
.../UserRegistrations/UserRegistrations.test.tsx | 7 +-
.../src/pages/UserRegistrations/index.tsx | 14 -
superset-frontend/src/pages/UsersList/index.tsx | 4 +-
superset-frontend/src/preamble.test.ts | 113 ++++
superset-frontend/src/preamble.ts | 3 +-
superset-frontend/src/setup/setupFormatters.ts | 15 +-
superset-frontend/src/theme/ThemeController.ts | 15 +
superset-frontend/src/theme/ThemeProvider.tsx | 9 +-
.../src/theme/tests/ThemeController.test.ts | 18 +
.../src/theme/tests/ThemeProvider.test.tsx | 1 +
superset-websocket/Dockerfile | 14 +-
superset-websocket/README.md | 19 +
superset-websocket/config.example.json | 3 +-
superset-websocket/package-lock.json | 135 ++--
superset-websocket/package.json | 6 +-
superset-websocket/spec/index.test.ts | 99 +++
superset-websocket/src/config.ts | 9 +-
superset-websocket/src/index.ts | 37 ++
superset/async_events/async_query_manager.py | 13 +-
superset/charts/api.py | 20 +-
superset/charts/client_processing.py | 4 +-
superset/charts/data/dashboard_filter_context.py | 30 +-
superset/commands/chart/create.py | 5 +
superset/commands/chart/fave.py | 8 +-
superset/commands/chart/unfave.py | 8 +-
superset/commands/chart/update.py | 21 +-
superset/commands/chart/warm_up_cache.py | 19 +-
superset/commands/dashboard/create.py | 13 +-
superset/commands/dashboard/delete.py | 5 +-
superset/commands/dashboard/importers/v1/utils.py | 148 +++--
.../commands/database/uploaders/columnar_reader.py | 45 ++
superset/commands/dataset/create.py | 8 +
superset/commands/dataset/duplicate.py | 8 +-
superset/commands/dataset/update.py | 51 +-
superset/commands/dataset/warm_up_cache.py | 12 +-
superset/commands/export/assets.py | 18 +-
superset/commands/report/base.py | 46 +-
superset/commands/streaming_export/base.py | 67 +-
superset/commands/tag/create.py | 35 +
superset/commands/tag/delete.py | 40 +-
superset/commands/tag/utils.py | 17 +-
superset/config.py | 61 +-
superset/connectors/sqla/models.py | 75 ++-
superset/constants.py | 1 +
superset/daos/base.py | 52 +-
superset/daos/dashboard.py | 2 +-
superset/daos/database.py | 75 +++
superset/dashboards/api.py | 26 +-
superset/databases/api.py | 22 +-
superset/dataframe.py | 18 +-
superset/datasets/api.py | 2 +
superset/db_engine_specs/__init__.py | 8 +
superset/db_engine_specs/base.py | 43 +-
superset/db_engine_specs/druid.py | 26 +
superset/db_engine_specs/odps.py | 201 ++++++
superset/extensions/utils.py | 85 ++-
superset/initialization/__init__.py | 43 +-
superset/jinja_context.py | 55 +-
superset/key_value/utils.py | 31 +-
superset/mcp_service/action_log/schemas.py | 302 ---------
superset/mcp_service/action_log/tool/__init__.py | 24 -
.../action_log/tool/get_action_log_info.py | 97 ---
.../action_log/tool/list_action_logs.py | 152 -----
superset/mcp_service/app.py | 50 +-
superset/mcp_service/auth.py | 304 +++++----
superset/mcp_service/bin/superset-mcp.js | 4 +-
superset/mcp_service/chart/chart_helpers.py | 153 +++++
superset/mcp_service/chart/schemas.py | 44 ++
superset/mcp_service/chart/tool/get_chart_data.py | 25 +-
superset/mcp_service/chart/tool/get_chart_info.py | 17 +-
superset/mcp_service/common/schema_discovery.py | 85 +--
superset/mcp_service/composite_token_verifier.py | 199 ++++++
superset/mcp_service/constants.py | 4 +-
superset/mcp_service/css_template/schemas.py | 280 --------
superset/mcp_service/css_template/tool/__init__.py | 24 -
.../css_template/tool/get_css_template_info.py | 108 ---
.../css_template/tool/list_css_templates.py | 150 -----
superset/mcp_service/dashboard/schemas.py | 49 ++
.../dashboard/tool/get_dashboard_info.py | 17 +-
superset/mcp_service/dataset/schemas.py | 86 +++
.../mcp_service/dataset/tool/get_dataset_info.py | 16 +-
superset/mcp_service/mcp_config.py | 189 ++++--
superset/mcp_service/mcp_core.py | 12 +
superset/mcp_service/middleware.py | 8 +-
superset/mcp_service/plugin/__init__.py | 16 -
superset/mcp_service/plugin/dao.py | 23 -
superset/mcp_service/plugin/schemas.py | 213 ------
superset/mcp_service/plugin/tool/__init__.py | 24 -
.../mcp_service/plugin/tool/get_plugin_info.py | 101 ---
superset/mcp_service/plugin/tool/list_plugins.py | 123 ----
superset/mcp_service/screenshot/webdriver_pool.py | 6 +-
superset/mcp_service/server.py | 10 +-
superset/mcp_service/system/tool/get_schema.py | 55 +-
superset/mcp_service/theme/__init__.py | 16 -
superset/mcp_service/theme/schemas.py | 305 ---------
superset/mcp_service/theme/tool/__init__.py | 24 -
superset/mcp_service/theme/tool/get_theme_info.py | 116 ----
superset/mcp_service/theme/tool/list_themes.py | 147 -----
superset/models/dashboard.py | 8 +-
superset/models/helpers.py | 80 +++
superset/models/sql_lab.py | 17 +-
superset/reports/notifications/email.py | 16 +-
superset/result_set.py | 56 +-
superset/security/api.py | 30 +-
superset/security/guest_token.py | 15 +-
superset/security/manager.py | 102 ++-
superset/sql/parse.py | 42 +-
superset/sql_lab.py | 13 +
superset/sqllab/schemas.py | 14 +-
superset/tasks/cache.py | 204 ++----
superset/translations/ar/LC_MESSAGES/messages.po | 80 ++-
superset/translations/ca/LC_MESSAGES/messages.po | 86 ++-
superset/translations/cs/LC_MESSAGES/messages.po | 86 ++-
superset/translations/de/LC_MESSAGES/messages.po | 84 ++-
superset/translations/en/LC_MESSAGES/messages.po | 72 +-
superset/translations/es/LC_MESSAGES/messages.po | 88 ++-
superset/translations/fa/LC_MESSAGES/messages.po | 82 ++-
superset/translations/fi/LC_MESSAGES/messages.po | 99 ++-
superset/translations/fr/LC_MESSAGES/messages.po | 86 ++-
superset/translations/it/LC_MESSAGES/messages.po | 74 ++-
superset/translations/ja/LC_MESSAGES/messages.po | 84 ++-
superset/translations/ko/LC_MESSAGES/messages.po | 73 +-
superset/translations/lv/LC_MESSAGES/messages.po | 84 ++-
superset/translations/messages.pot | 66 +-
superset/translations/mi/LC_MESSAGES/messages.po | 84 ++-
superset/translations/nl/LC_MESSAGES/messages.po | 80 ++-
superset/translations/pl/LC_MESSAGES/messages.po | 80 ++-
superset/translations/pt/LC_MESSAGES/messages.po | 74 ++-
.../translations/pt_BR/LC_MESSAGES/messages.po | 80 ++-
superset/translations/requirements.txt | 5 +-
superset/translations/ru/LC_MESSAGES/messages.po | 92 ++-
superset/translations/sk/LC_MESSAGES/messages.po | 86 ++-
superset/translations/sl/LC_MESSAGES/messages.po | 80 ++-
superset/translations/th/LC_MESSAGES/messages.po | 99 ++-
superset/translations/tr/LC_MESSAGES/messages.po | 76 ++-
superset/translations/uk/LC_MESSAGES/messages.po | 84 ++-
superset/translations/zh/LC_MESSAGES/messages.po | 77 ++-
.../translations/zh_TW/LC_MESSAGES/messages.po | 77 ++-
superset/utils/core.py | 17 +-
superset/utils/link_redirect.py | 14 +-
superset/utils/screenshot_utils.py | 8 +
superset/utils/screenshots.py | 16 +-
superset/utils/webdriver.py | 95 ++-
superset/views/api.py | 19 +-
superset/views/base_api.py | 14 +-
superset/views/datasource/utils.py | 17 +-
superset/views/datasource/views.py | 24 +
superset/views/sql_lab/schemas.py | 7 +-
superset/views/sql_lab/views.py | 53 +-
superset/views/users/api.py | 4 +
superset/views/utils.py | 19 +-
superset/viz.py | 62 +-
tests/integration_tests/celery_tests.py | 138 +---
tests/integration_tests/charts/api_tests.py | 54 ++
tests/integration_tests/charts/commands_tests.py | 23 +-
tests/integration_tests/dao/base_dao_test.py | 69 ++
tests/integration_tests/dashboards/api_tests.py | 102 +++
tests/integration_tests/datasets/commands_tests.py | 20 +-
.../db_engine_specs/base_engine_spec_tests.py | 7 +-
tests/integration_tests/result_set_tests.py | 34 +-
tests/integration_tests/strategy_tests.py | 56 +-
tests/integration_tests/tags/commands_tests.py | 4 +
tests/integration_tests/tasks/test_cache.py | 95 ---
tests/integration_tests/tasks/test_utils.py | 77 ---
tests/integration_tests/thumbnails_tests.py | 16 +-
.../async_events/async_query_manager_tests.py | 67 ++
tests/unit_tests/charts/test_client_processing.py | 111 ++++
.../charts/test_dashboard_filter_context.py | 80 ++-
.../commands/chart/test_access_checks.py | 147 +++++
.../commands/chart/warm_up_cache_test.py | 6 +
.../commands/databases/columnar_reader_test.py | 85 ++-
tests/unit_tests/commands/dataset/test_create.py | 9 +-
.../unit_tests/commands/dataset/test_duplicate.py | 103 +++
.../commands/dataset/test_warm_up_cache.py | 115 ++++
tests/unit_tests/commands/dataset/update_test.py | 160 +++++
tests/unit_tests/commands/export_test.py | 9 +
.../commands/importers/v1/assets_test.py | 6 +-
.../commands/report/test_create_recipients.py | 14 +-
.../sql_lab/streaming_export_command_test.py | 194 ++++++
tests/unit_tests/connectors/sqla/models_test.py | 237 ++++++-
tests/unit_tests/connectors/sqla/utils_test.py | 1 +
tests/unit_tests/dao/base_dao_test.py | 51 ++
.../dashboards/commands/importers/v1/utils_test.py | 174 +++++
tests/unit_tests/databases/api_test.py | 12 +-
tests/unit_tests/db_engine_specs/test_base.py | 77 +++
tests/unit_tests/db_engine_specs/test_druid.py | 116 ++++
tests/unit_tests/db_engine_specs/test_odps.py | 174 +++++
tests/unit_tests/extensions/test_utils.py | 96 +++
tests/unit_tests/fixtures/assets_configs.py | 2 +
.../unit_tests/initialization}/__init__.py | 0
.../check_async_query_secret_test.py | 140 ++++
tests/unit_tests/jinja_context_test.py | 118 ++++
tests/unit_tests/key_value/utils_test.py | 45 ++
.../unit_tests/mcp_service/action_log/__init__.py | 16 -
.../mcp_service/action_log/tool/__init__.py | 16 -
.../action_log/tool/test_action_log_tools.py | 401 -----------
.../mcp_service/chart/test_chart_helpers.py | 651 ++++++++++++++++++
.../mcp_service/chart/tool/test_get_chart_info.py | 91 ++-
.../mcp_service/css_template/__init__.py | 16 -
.../mcp_service/css_template/tool/__init__.py | 16 -
.../css_template/tool/test_css_template_tools.py | 280 --------
.../dashboard/tool/test_dashboard_tools.py | 72 ++
.../database/tool/test_database_tools.py | 42 ++
.../mcp_service/dataset/tool/test_dataset_tools.py | 59 ++
tests/unit_tests/mcp_service/plugin/__init__.py | 16 -
.../unit_tests/mcp_service/plugin/tool/__init__.py | 16 -
.../mcp_service/plugin/tool/test_plugin_tools.py | 172 -----
.../mcp_service/system/tool/test_get_schema.py | 149 +----
.../mcp_service/system/tool/test_mcp_core.py | 76 +++
tests/unit_tests/mcp_service/test_auth_api_key.py | 414 ++++++++----
tests/unit_tests/mcp_service/test_auth_rbac.py | 14 +-
.../mcp_service/test_auth_user_resolution.py | 4 +-
.../mcp_service/test_composite_token_verifier.py | 345 ++++++++++
tests/unit_tests/mcp_service/test_mcp_config.py | 213 ++++++
tests/unit_tests/mcp_service/test_mcp_server.py | 23 +
.../mcp_service/test_mcp_tool_registration.py | 53 +-
.../mcp_service/test_tool_search_transform.py | 14 +-
tests/unit_tests/mcp_service/theme/__init__.py | 16 -
.../unit_tests/mcp_service/theme/tool/__init__.py | 16 -
.../mcp_service/theme/tool/test_theme_tools.py | 267 --------
tests/unit_tests/models/helpers_test.py | 144 ++++
.../reports/notifications/email_tests.py | 21 +-
tests/unit_tests/result_set_test.py | 121 ++++
.../check_translation_regression_test.py | 179 +++++
.../security/test_granular_export_permissions.py | 11 +
.../security/test_guest_token_dataset_allowlist.py | 273 ++++++++
.../unit_tests/server}/__init__.py | 0
.../server/test_gunicorn_gevent_smoke.py | 162 +++++
tests/unit_tests/sql/parse_tests.py | 60 +-
tests/unit_tests/sql_lab_execution_context.py | 3 +-
tests/unit_tests/sql_lab_test.py | 3 +
tests/unit_tests/tasks/test_cache.py | 136 ++++
tests/unit_tests/test_viz_get_df_payload.py | 133 ++++
tests/unit_tests/utils/test_core.py | 24 +
tests/unit_tests/utils/test_link_redirect.py | 29 +
tests/unit_tests/utils/test_screenshot_utils.py | 26 +
tests/unit_tests/views/test_utils.py | 48 ++
409 files changed, 17182 insertions(+), 8685 deletions(-)
create mode 100644 docs/static/img/community/reddit-symbol.svg
create mode 100644 docs/static/img/community/slack-symbol.svg
delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/actions.test.js
copy superset-frontend/{src/dashboard/util/isEmbedded.ts => packages/superset-ui-core/src/number-format/utils/getIntlDurationFormatter.ts} (72%)
create mode 100644 superset-frontend/packages/superset-ui-core/src/number-format/utils/parseMilliseconds.ts
create mode 100644 superset-frontend/packages/superset-ui-core/test/number-format/utils/getIntlDurationFormatter.test.ts
create mode 100644 superset-frontend/packages/superset-ui-core/test/number-format/utils/parseMilliseconds.test.ts
create mode 100644 superset-frontend/packages/superset-ui-core/types/intl.d.ts
copy superset-frontend/playwright/tests/dashboard/{clear-all-filters.spec.ts => mixed-chart-dashboard-filters.spec.ts} (55%)
create mode 100644 superset-frontend/src/chartCustomizations/components/DynamicGroupBy/DynamicGroupByPlugin.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/GroupByFilterCard.test.tsx
create mode 100644 superset-frontend/src/embedded/getInitialThemeMode.test.ts
copy superset-frontend/{packages/superset-ui-core/src/hooks/useChangeEffect/useChangeEffect.ts => src/embedded/getInitialThemeMode.ts} (55%)
create mode 100644 superset-frontend/src/explore/components/ExploreContainer/ExploreDndContext.test.tsx
create mode 100644 superset-frontend/src/explore/components/ExploreContainer/ExploreDndContext.tsx
create mode 100644 superset-frontend/src/explore/components/controls/DndColumnSelectControl/dndTestUtils.ts
create mode 100644 superset-frontend/src/preamble.test.ts
create mode 100644 superset/db_engine_specs/odps.py
delete mode 100644 superset/mcp_service/action_log/schemas.py
delete mode 100644 superset/mcp_service/action_log/tool/__init__.py
delete mode 100644 superset/mcp_service/action_log/tool/get_action_log_info.py
delete mode 100644 superset/mcp_service/action_log/tool/list_action_logs.py
create mode 100644 superset/mcp_service/composite_token_verifier.py
delete mode 100644 superset/mcp_service/css_template/schemas.py
delete mode 100644 superset/mcp_service/css_template/tool/__init__.py
delete mode 100644 superset/mcp_service/css_template/tool/get_css_template_info.py
delete mode 100644 superset/mcp_service/css_template/tool/list_css_templates.py
delete mode 100644 superset/mcp_service/plugin/__init__.py
delete mode 100644 superset/mcp_service/plugin/dao.py
delete mode 100644 superset/mcp_service/plugin/schemas.py
delete mode 100644 superset/mcp_service/plugin/tool/__init__.py
delete mode 100644 superset/mcp_service/plugin/tool/get_plugin_info.py
delete mode 100644 superset/mcp_service/plugin/tool/list_plugins.py
delete mode 100644 superset/mcp_service/theme/__init__.py
delete mode 100644 superset/mcp_service/theme/schemas.py
delete mode 100644 superset/mcp_service/theme/tool/__init__.py
delete mode 100644 superset/mcp_service/theme/tool/get_theme_info.py
delete mode 100644 superset/mcp_service/theme/tool/list_themes.py
delete mode 100644 tests/integration_tests/tasks/test_cache.py
delete mode 100644 tests/integration_tests/tasks/test_utils.py
create mode 100644 tests/unit_tests/commands/chart/test_access_checks.py
create mode 100644 tests/unit_tests/commands/dataset/test_duplicate.py
create mode 100644 tests/unit_tests/commands/dataset/test_warm_up_cache.py
create mode 100644 tests/unit_tests/db_engine_specs/test_odps.py
create mode 100644 tests/unit_tests/extensions/test_utils.py
rename {superset/mcp_service/action_log => tests/unit_tests/initialization}/__init__.py (100%)
create mode 100644 tests/unit_tests/initialization/check_async_query_secret_test.py
delete mode 100644 tests/unit_tests/mcp_service/action_log/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/action_log/tool/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/action_log/tool/test_action_log_tools.py
delete mode 100644 tests/unit_tests/mcp_service/css_template/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/css_template/tool/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/css_template/tool/test_css_template_tools.py
delete mode 100644 tests/unit_tests/mcp_service/plugin/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/plugin/tool/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/plugin/tool/test_plugin_tools.py
create mode 100644 tests/unit_tests/mcp_service/test_composite_token_verifier.py
delete mode 100644 tests/unit_tests/mcp_service/theme/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/theme/tool/__init__.py
delete mode 100644 tests/unit_tests/mcp_service/theme/tool/test_theme_tools.py
create mode 100644 tests/unit_tests/scripts/translations/check_translation_regression_test.py
create mode 100644 tests/unit_tests/security/test_guest_token_dataset_allowlist.py
rename {superset/mcp_service/css_template => tests/unit_tests/server}/__init__.py (100%)
create mode 100644 tests/unit_tests/server/test_gunicorn_gevent_smoke.py
create mode 100644 tests/unit_tests/tasks/test_cache.py
create mode 100644 tests/unit_tests/views/test_utils.py