This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch feat/arrow-chart-data-shim
in repository https://gitbox.apache.org/repos/asf/superset.git
omit d7620863fef feat(chart-data): add opt-in Apache Arrow wire format with
per-plugin shim
add fed77adfee5 fix(mcp): preserve embedded guest identity during
permalink lookup (#45346)
add e0e728ef764 chore(deps): bump geolib from 3.3.14 to 4.0.0 in
/superset-frontend (#45328)
add 6132c019432 fix(extensions-cli): fix scaffold template dep mismatches
vs. host (#45244)
add d548e8dce9c fix(filters): use manual semantic-view range bounds
(#44999)
add 4b9856bfefd fix(rls): apply Public role RLS rules to anonymous users
(#45333)
add 3841bc9e0ec chore(deps): bump immer from 11.1.18 to 11.1.21 in
/superset-frontend (#45330)
add 81e558a6a80 chore(deps-dev): bump sqlalchemy-bigquery from 1.17.2 to
1.17.3 (#45319)
add d176d68451b chore(deps-dev): bump elasticsearch-dbapi from 0.2.13 to
0.3.0 (#45318)
add 13bd0cd9326 fix(sql): keep stop and finish outcomes consistent when
they race (#45283)
add f33b030d710 fix(explore): correct HOLIDAY tooltip wording (#45276)
add d9bc4ea8580 fix(plugin-chart-pivot-table): sticky-position row labels
and corner header cells (#43917)
add 2020fea4acb feat(storybook/build): generate Playwright-runnable tests
from Storybook stories (#44964)
add e835d670d2e chore(deps-dev): bump prophet from 1.4.0 to 1.5.0 (#45324)
add 1aaabd8e435 fix(websocket): support Sentinel and full TLS options for
Redis/Valkey (#45355)
add 3d82e3dfbcb chore(deps): bump cachetools from 7.2.0 to 7.2.1 (#45323)
add 5c5061b1c8e chore(deps-dev): bump clickhouse-connect from 1.9.0 to
1.10.0 (#45321)
add a23199762c5 fix(mypy): make UUIDMixin.uuid's nullable type resolve
deterministically (#44817)
add e734cd00d43 chore(deps): bump react-syntax-highlighter from 16.1.1 to
16.1.2 in /superset-frontend (#45370)
add f2b71475ce2 chore(deps): bump @googleapis/sheets from 18.1.0 to 18.1.1
in /superset-frontend (#45369)
add 3dfb42a2937 chore(deps): bump astral-sh/setup-uv from 10.2.0 to 10.3.0
(#45368)
add 576cc9e0952 chore(deps): bump helm/chart-testing-action from 2.8.0 to
2.9.0 (#45367)
add 50d34f8aaa2 chore(deps-dev): bump syntaqlite from 0.9.0 to 0.12.1
(#45320)
add ad63b3eb7ab fix(impala): stop SQL Lab queries through the live cursor
only (#45232)
add 86e186b5f60 fix(tests): stop the unit suite from retaining one
Superset app per module (#45364)
add 19bb09461dc fix(examples): rewrite chart datasource references on
import (#45378)
add 9c7ca9ba107 fix(docs): improve Kapa AI widget dark mode compatibility
(#39102)
add 61d27b4aebe fix(sql): handle trailing comments after empty statements
(#45274)
add 58b1de82815 fix(datasets): don't call physical datasets "virtual" in
sync columns toast (#45376)
add 853f207c668 fix(dashboard): apply temporal x-axis cross-filters to
target charts (#45310)
add c650cbd3c61 fix(import): return 422 instead of 500 for corrupt ZIP
uploads (#45380)
add a9a7a35c4b4 fix(dashboard): show an access error for charts the viewer
cannot read (#45398)
add 44eac5b37b2 fix(soft-delete): align dashboard card dialogs and archive
permission hints (#45302)
add 21fad62645a fix(semantic-layer): resolve grain variants
deterministically (#44454)
add a13af92ff34 fix(semantic-layer): return 400 for mapper validation
refusals (#45292)
add a5d29a9d27d test(e2e): add a stub semantic-layer provider for
Playwright (#45103)
add 84be38cfc90 chore(deps): update pygithub requirement from >=2.1.1 to
>=2.10.0 (#45413)
add 31ee5719f77 fix(semantic layers): reject unknown compatibility
selections (#45359)
add e336cd04c3c fix(mcp): keep refusal and rejection categories in
get_chart_data (#45360)
add 5e1962e9a1d test(mcp): correct Dublin fold timestamp expectations
(#45358)
add ae71281c519 fix(dashboard): resolve to a fixed point when un-clipping
scrollable chart content (#44102)
add 4569608fc44 fix(pivot-table): keep MIN/MAX of non-numeric columns off
the additive fast-path (#45408)
add dfd13baab0e fix(versioning): don't record dataset column and metric
extra rewrites as edits (#45349)
add 4f49d24151d test(i18n): run the babel_update.sh msgcat tests on CI
(#45247)
add e837c37bc29 fix(semantic-layer): raise typed rejections from the E2E
stub provider (#45401)
add 4ccd337b932 chore(deps-dev): bump oracledb from 4.0.2 to 26.0.0
(#44443)
add 297449d68e7 fix(semantic layers): return 400 for ambiguous variants in
compatibility name check (#45426)
add 663d691c311 fix(embedded): apply the chart-data guest redaction to
samples and the legacy query endpoint (#45273)
add acdd2d27667 chore(deps-dev): bump oxlint-tsgolint in /docs (#45450)
add b8a4a5e20ad chore(deps): bump the swc group across 2 directories with
1 update (#45449)
add c812be8019f chore(deps): bump EnricoMi/publish-unit-test-result-action
from 2.24.0 to 2.25.0 (#45448)
add 22654af3337 chore(deps): bump express from 5.2.1 to 5.3.0 in
/superset-websocket/utils/client-ws-app (#45447)
add 118acbcde35 chore(deps): bump pydantic from 2.13.5 to 2.14.0 (#45417)
add 56ff8920385 fix(security): don't let dataset editorship substitute for
data access (#45266)
add 99ecfe5801c chore(deps): bump sqlalchemy-utils from 0.42.1 to 0.43.0
(#45416)
add f0cfaff7881 fix(sql): decode async SQLExecutor results from the
results backend (#45348)
add 8e6e91e4dc0 feat(semantic-layers): add the provider execution context
contract (#45251)
add 53f14e7b7b1 fix(semantic-layer): refuse a chart's own filter on a
column the semantic view lacks (#45294)
add 98d5fa50b4c fix(semantic-layer): validate views before creation
(#45287)
add d36febc96ec fix(versioning): don't record save-path defaults as user
changes (#45352)
add 5a1831000a9 fix: add dblink and pg_* state-mutating functions to SQL
denylist (#45089)
add 88e92663b8f fix(semantic-layers): restore mocking compatibility after
implementation became a plain property (#45501)
add 152e1e9de9a fix(dataset): convert timezone-aware values with the
dataset timezone (#45344)
add 25e94d00d37 fix(pivot-table): stop the grand-total corner from
silently picking one metric (#44657)
add d285a1abae8 fix(dashboards): prevent horizontal filter bar from
vanishing on cross-filter (#45050) (#45051)
add 15f55686ea9 fix(dashboard): respect DASHBOARD_AUTO_REFRESH_INTERVALS
configuration in refresh dropdown (#45039)
add 1e18d01d76d feat(mcp): add caller-scoped PNG chart previews (#44558)
add 9c287d989a8 feat(build): migrate to Typescript 6 (#44726)
add 7b23ddea9f6 chore(build): migrate from external `copy-webpack-plugin`
to Webpack-native `output.copy` (#44965)
add 0a17a75f9a8 chore(deps): bump the storybook group across 2 directories
with 4 updates (#45513)
add d5bccecf581 chore(deps): bump chromaui/action from 18.11.0 to 18.12.1
(#45512)
add 77b0fd62ea7 docs: add Plum to In the Wild (#45518)
add 3cf94c87aef chore(deps-dev): bump @types/node from 26.6.4 to 26.6.5 in
/superset-embedded-sdk (#45514)
add 1df897b3bba fix(pivot-table): blank mixed-metric totals in exports and
reports (#45311)
add 38353434467 fix(cache): honor disabled datasource suggestion caches
(#45288)
add ad30c898f86 fix(dashboard): copy a layout that omits the source's
current charts (#45472)
add 3988a771f37 fix(dataset): warn immediately when normalize_columns is
toggled on (#44617)
add 3c42a68d439 test(mcp): refresh native tool inventory for PNG chart
previews (#45511)
add 1811fe5167f fix(dashboard): stop Edit Properties hanging on dashboards
with many charts (#45354)
add 65cfc1ed18c fix(deck.gl): set maplibre-gl 6's worker URL so vector
basemaps load (#45396)
add 973ac9b8efb fix(export): honor CSV_EXPORT encoding in streaming CSV
exports (#45351)
add a708a08cdb0 feat(semantic-layers): declare provider obligations and
add a registration test fixture (#45393)
add 488a3c53b45 fix(soft-delete): show Recently Archived in the menu to
everyone who can open it (#45523)
add 82a7ec91d6e feat(semantic-layers): apply a default chronological order
for time-series queries (#45389)
add fe79ab48e93 fix(tags): make owner-tag creation safe under concurrent
creates (#45498)
add e315ed365e8 test(reports): cover scheduled reports on semantic-view
charts (#45526)
add 036d1dafe2c fix(semantic-layers): report async chart query validation
errors as failures (#45525)
add d73c9b93398 fix(alerts): don't flag "Every minute" schedule as invalid
in cron picker (#45468)
add 63c6d273616 chore(plugin-chart-ag-grid-table): remove unused
useTableTheme hook (#45469)
add aa3df7caf77 fix(explore): hide empty Actual range for comparison
header (#44996)
add f0b43df751a fix(dashboard): remap native filter scopes when
duplicating charts on save as (#45038)
add b1fe28b5791 fix(ci): narrow nullable filters in metric_filter_test and
resync oxfmt formatting (#45239)
add 875dcbb1bb0 feat(action-log): open JSON payloads in a tree modal
(#45337)
add c01e784fc64 fix(ci): restore the full-repo mypy check on two
semantic-layer and sqla test files (#45315)
add 293f159deaf fix(sqllab): keep the results grid header opaque when rows
scroll under it (#45480)
add 25186586572 fix(chart): keep the chart on screen during a dashboard
auto-refresh (#45234)
add fcff5931594 fix(sqllab): ignore a Run/Stop click whose gesture started
on the other action (#45336)
add 87dc979e986 fix(table-chart): show the record count in the search box
(#45497)
add ec40973ae81 fix(semantic-layer): reject SQL extras in direct mapper
calls (#45534)
add ddbf152ac92 fix(dashboard): keep archived charts' membership when
restoring a version (#45482)
add 208438b18b6 test(tasks): cover the embedded-guest error text on task
show and list (#45533)
add 2d0203e3699 fix(plugin-chart-echarts): merge a series object in
ECharts Options into every series (#45421)
add 77ded19ba5c fix(sqllab): commit the recomputed row limit before async
dispatch (#45178)
add a1fd5b1f81e fix(sqllab): resolve query datasources when opening SQL
Lab (#45374)
add c06005afb1e fix(dashboard): load the saved description into dashboard
info (#45298)
add 2978799419e fix(models): keep NULL rows in !=, NOT LIKE and NOT ILIKE
filters (#45317)
add 33687492472 test(explore): cover chart header actions, chart pills,
and view container wiring (#44848)
add 304f5a38b58 test(playwright): add Featured Charts render smoke and
Explore image download (#44844)
add 6842e2f76b3 test(explore): cover cartodiagram and primitive explore
controls (#44850)
add c807ee7f909 fix(native-filters): keep pending removal timers when
another filter is removed (#44837)
add 7ff5709882f fix(candlestick): give OHLC labels their own translatable
strings (#45458)
add 0f376ba9f97 fix(semantic-layers): show per-view errors when adding
semantic views (#45524)
add 190873e9832 fix(version-history): preview banner, history panel
layout, scope labels and current-version marking (#45471)
add 6dc0641c91a fix(reports): keep the first column header in XLSX exports
of semantic-view tables (#45527)
add 4e7e2b7390d fix(tests): narrow Optional StatementResult.data in async
result tests (#45517)
add 836c0f3f95d fix(table): reset default margins on the pagination list
(#45365)
add 8d3ade7e0a8 test(trino): close db_engine_spec test gaps (#45361)
add 3d902d9eb3a chore(deps): bump the security group across 2 directories
with 2 updates (#45542)
add 527021d5819 chore(deps): bump react-virtualized-auto-sizer from 1.0.26
to 2.0.3 in /superset-frontend (#45197)
add c11f993af37 fix(auth): close forced-password-change redirect loop and
sweep stale legacy password perms from all roles (#44857)
add 7d0e1c939ee fix(frontend): retry a failed lazy import before surfacing
ChunkLoadError (#43215)
add abc1b50f65d fix(mcp): clean up nits from PNG chart preview review
(#45509)
add b6ef0bf48d8 chore(tags): stop auto-generating
type:/editor:/favorited_by: tags (#43471)
add cb04282f501 chore(deps): bump swagger-ui-react from 5.33.1 to 5.33.2
in /docs (#45567)
add f1d8161777c chore(deps): bump chromaui/action from 18.12.1 to 18.12.2
(#45564)
add f9aec7515b4 chore(deps): bump actions/setup-java from 6.0.1 to 6.1.0
in the gh-actions group (#45563)
add 75be8f981a6 feat(improvements): let deployments withhold assets from
list queries and commands (#45451)
add f9a0d8af493 chore(deps-dev): bump oxlint from 1.87.0 to 1.88.0 in
/docs (#45566)
add fa8a035fcf6 fix(mcp): stop rejecting titles that contain "data:" in
prose (#45485)
add e8824351f19 fix(mcp): isolate dashboard copies and clarify chart
evidence (#45504)
add cdc9430597c fix(db_engine_specs): patch oceanbase_py's dialect for
SQLAlchemy 2.0 (#45507)
add 00688c7871b chore(deps-dev): update pinotdb requirement from
<10.0.0,>=8.0.0 to >=9.2.2,<10.0.0 (#45414)
add 73737afbfbb chore(deps): bump pyarrow from 25.0.1 to 26.0.0 (#45412)
add 067d536e216 chore(deps-dev): bump fastmcp from 3.4.7 to 4.1.0 (#45415)
add b7bfbd365e6 chore(deps-dev): bump oxfmt in /docs (#45565)
add 2b1046959d2 chore: bump pillow, certifi and geopy pins, tidy two small
code nits (#45578)
add 54aaf3ad7d7 fix(mcp): surface missing query_context warning in
get_chart_data result (#45250)
add fdb22260e25 fix(number-format): make the adaptive formatters follow
D3_FORMAT (#45241)
add c3279f01921 ci: skip jobs that cannot complete on forks and private
mirrors (#45035)
add 385844237e6 fix(explore): preserve zero thresholds in contour controls
(#44966)
add 3de22376c5c fix(dashboards): update last modified timestamp when
adding chart to dashboard (#44305) (#44358)
add 77ebc0e55f3 fix(chart): keep dataset_uuid in exports when the dataset
is deleted (#44347)
add 452dea81f23 chore(deps-dev): bump @playwright/test from 1.62.1 to
1.64.0 in /superset-frontend (#45371)
add bc83e3e6fdb fix(mcp): propose a matching value when a dashboard filter
value is rejected (#45547)
add b129d6a4c12 fix(semantic-layer): narrow Filter|OrFilter unions in test
helpers for mypy (#45268)
add ff214bdfb14 fix(sqllab): clip multi-line result values to their row
(#45487)
add 62d22e0697c fix(semantic-layer): type the E2E stub filters for the
full filter union (#45419)
add 5eaad449f5c fix(import): return 422 instead of 500 for unsafe ZIP
import bundles (#45440)
add 676af61b1c9 fix(jinja): keep filters with 0 or false values in
get_filters and fi… (#45437)
add 47358be13c1 fix(import): return 422 instead of 500 for non-UTF-8
members in import bundles (#45424)
add b4f8ca407a3 chore(deps-dev): bump vite from 8.3.1 to 8.3.5 in
/superset-websocket in the security group across 1 directory (#45590)
add 7ff7f9048bf fix(semantic-layer): handle absent fetch-values predicate
(#45539)
add 9ce458594fe fix(connection): encode next in the unauthorized login
redirect (#45477)
add 2304d1b80f2 fix(datasets): re-check statement count after query
mutation (#45453)
add 4bfd874c4cb fix(postprocessing): handle Decimal comparisons with zero
baselines (#45467)
add 4e5d0ef8f13 fix(models): keep NULL rows in NOT IN filters without a
NULL value (#45305)
add a0ebed9ff1a docs(auth): add Keycloak PKCE, logout and group-mapping
example (#38092)
add b3471a1369c fix(a11y): WCAG 1.4.1 — add non-color visual cues to
status indicators (#39233)
add 3297c39d94c docs(installation): describe the default image instead of
lean in Docker Compose responsibilities (#45582)
add 47300cf4c2f fix(mcp): pass time_grain as a string and keep annotation
DB error classification (#45484)
add 030f36a00c3 docs(extensions): move Semantic Layers into its own
extension point page (#45630)
add 578d43fef9b fix(listview): prevent table column layout shift on
content change (#37299)
add 97a536f37d9 feat(echarts): allow configuring minInterval on bar and
line chart axes (#43515)
add dfd84bf3d9e fix(mcp): only serve the browser hello page on the MCP
endpoint (#45391)
add 7fceb05c1ce docs(docker): drop redundant packages from custom image
example, bump version numbers (#44240)
add aabddf5b3f5 fix(semantic-layers): cap and time-bound bulk semantic
view creation (#45532)
add 2c275ed0a5b fix(echarts): restore series color markers in sanitized
tooltips (#45505)
add 98fac9104fb fix(datasets): validate metric d3format (#45633)
add bf18152476a chore: stop forcing .ipynb as a binary attribute (#45602)
add 87d1abb21e6 chore(frontend): let JEST_MAX_WORKERS cap the Jest worker
pool locally (#45594)
add 5cfcee95b4e fix(import): return 400 instead of 500 on malformed JSON
in import form fields (#45579)
add 44be9b819dd fix(bigquery): return empty extra metadata instead of 500
when table is not found (#45634)
add 0689df740e2 fix(sql-lab): return 400 instead of 500 when stop_query is
missing client_id (#45521)
add 3b7001836c7 fix(charts): keep large nullable-integer dimensions exact
(#45308)
add 43006c1d054 fix(explore): omit constant Custom SQL dimensions from
GROUP BY (#45271)
add be40309811d fix: filter Sunburst temporal segments by bucket and
invert Hours offset in grained filters (#45598)
add d595becba71 test(explore): cover column config, conditional
formatting, and contour controls (#44843)
add b1c1d41b55f ci(docker): give the CI node image the workspace manifests
so jobs stop reinstalling (#45606)
add e5b9f9becb7 feat(chart-data): add opt-in Apache Arrow wire format with
per-plugin shim
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 (d7620863fef)
\
N -- N -- N refs/heads/feat/arrow-chart-data-shim (e5b9f9becb7)
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:
.gitattributes | 1 -
.github/workflows/bashlib.sh | 13 +
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/chromatic.yml | 4 +-
.github/workflows/codeql-analysis.yml | 19 +-
.github/workflows/docker.yml | 25 +-
.github/workflows/frontend-bundle-size-nightly.yml | 5 +-
.github/workflows/generate-FOSSA-report.yml | 2 +-
.github/workflows/github-action-validator.yml | 14 +
.github/workflows/license-check.yml | 2 +-
.github/workflows/pre-commit.yml | 14 +
.github/workflows/python-nightly-canary.yml | 9 +
.../scripts/check-code-scanning-available.sh | 64 +
.../scripts/check-code-scanning-available.test.sh | 118 +
.github/workflows/showtime-cleanup.yml | 3 +
.github/workflows/superset-docs-deploy.yml | 2 +-
.github/workflows/superset-docs-verify.yml | 5 +
.github/workflows/superset-e2e.yml | 14 +
.github/workflows/superset-frontend.yml | 11 +-
.github/workflows/superset-helm-lint-test.yml | 2 +-
.../workflows/superset-python-unittest-report.yml | 2 +-
.github/workflows/superset-python-unittest.yml | 13 +
.github/workflows/superset-translations.yml | 9 +-
.github/workflows/testcontainers.yml | 7 +-
.gitignore | 2 +
.pre-commit-config.yaml | 39 +-
AGENTS.md | 1 +
Dockerfile | 28 +-
RELEASING/requirements.txt | 2 +-
RESOURCES/INTHEWILD.yaml | 5 +
UPDATING.md | 289 +-
docs/admin_docs/configuration/cache.mdx | 18 +-
.../configuration/configuring-superset.mdx | 2 +
docs/admin_docs/configuration/mcp-server.mdx | 82 +-
docs/admin_docs/installation/docker-builds.mdx | 43 +-
.../installation/installation-methods.mdx | 4 +-
docs/admin_docs/security/oauth.mdx | 318 +
docs/admin_docs/security/security.mdx | 63 +
.../contributing/development-setup.md | 6 +
docs/developer_docs/contributing/howtos.md | 3 +
.../extensions/contribution-types.md | 259 +-
docs/developer_docs/extensions/development.md | 37 +
.../semantic-layers.md} | 463 +-
docs/developer_docs/extensions/semantic-filters.md | 79 -
docs/developer_docs/semantic-layer-cache-clear.md | 17 +-
docs/developer_docs/semantic-query-errors.md | 21 +
docs/developer_docs/sidebars.js | 1 +
.../creating-your-first-dashboard.mdx | 43 +-
docs/docs/using-superset/exploring-data.mdx | 78 +
docs/docs/using-superset/recently-archived.mdx | 4 +
.../using-superset/semantic-layer-connections.mdx | 17 +
.../using-superset/semantic-member-selections.mdx | 12 +-
.../docs/using-superset/using-ai-with-superset.mdx | 20 +
docs/docs/using-superset/version-history.mdx | 8 +-
docs/docusaurus.config.ts | 53 +-
docs/package.json | 14 +-
docs/sidebarTutorials.js | 2 +-
docs/static/img/logos/plum.svg | Bin 0 -> 4215 bytes
docs/static/resources/openapi.json | 12 +
docs/yarn.lock | 756 +-
pyproject.toml | 28 +-
requirements/base.in | 2 +-
requirements/base.txt | 20 +-
requirements/development.in | 2 +-
requirements/development.txt | 70 +-
scripts/change_detector.py | 1 +
superset-core/pyproject.toml | 5 +-
.../src/superset_core/semantic_layers/context.py | 62 +
.../src/superset_core/semantic_layers/layer.py | 45 +-
.../src/superset_core/semantic_layers/testing.py | 61 +
.../src/superset_core/semantic_layers/types.py | 42 +-
.../src/superset_core/semantic_layers/view.py | 25 +-
.../tests/semantic_layers/example_provider.py | 167 +
.../semantic_layers/test_execution_context.py | 71 +
.../tests/semantic_layers/test_registration.py | 153 +
superset-embedded-sdk/package-lock.json | 34 +-
superset-embedded-sdk/package.json | 2 +-
.../src/superset_extensions_cli/cli.py | 7 +-
.../templates/frontend/package.json.j2 | 9 +-
superset-extensions-cli/tests/test_cli_build.py | 4 +-
superset-frontend/.storybook/main.mjs | 10 +-
.../playwright.storybook-ci.config.ts} | 24 +-
superset-frontend/.storybook/setup-stories.test.ts | 156 +
superset-frontend/.storybook/setup-stories.ts | 179 +
.../external.d.ts => .storybook/stories.spec.ts} | 14 +-
superset-frontend/.storybook/test-runner.ts | 38 -
superset-frontend/jest.config.js | 7 +-
superset-frontend/package-lock.json | 34727 +++++++++----------
superset-frontend/package.json | 46 +-
.../packages/superset-core/package.json | 2 +-
.../packages/superset-core/tsconfig.json | 18 +-
.../src/operators/utils/extractExtraMetrics.ts | 4 +-
.../components/RadioButtonControl.tsx | 9 +-
.../src/utils/getTemporalColumns.ts | 4 +-
.../src/utils/metricColumnFilter.ts | 4 +-
.../superset-ui-chart-controls/tsconfig.json | 18 +-
.../packages/superset-ui-core/package.json | 4 +-
.../src/components/CronPicker/CronPicker.test.tsx | 28 +-
.../src/components/CronPicker/index.tsx | 6 +-
.../DropdownContainer/DropdownContainer.test.tsx | 28 +
.../src/components/DropdownContainer/types.ts | 4 +-
.../src/components/Loading/Loading.stories.tsx | 5 +-
.../src/components/SafeMarkdown/SafeMarkdown.tsx | 2 +-
.../src/components/TableCollection/utils.tsx | 3 +-
.../src/components/Typography/index.tsx | 3 +-
.../src/connection/SupersetClientClass.ts | 4 +-
.../src/number-format/NumberFormatterRegistry.ts | 28 +-
.../factories/createSmartNumberFormatter.ts | 56 +-
.../packages/superset-ui-core/src/utils/tooltip.ts | 31 +
.../test/connection/SupersetClientClass.test.ts | 5 +-
.../number-format/NumberFormatterRegistry.test.ts | 18 +
.../factories/createSmartNumberFormatter.test.ts | 14 +
.../superset-ui-core/test/utils/tooltip.test.ts | 34 +
.../packages/superset-ui-core/tsconfig.json | 18 +-
.../packages/superset-ui-switchboard/tsconfig.json | 18 +-
.../playwright/helpers/api/assertions.ts | 16 +-
.../playwright/helpers/api/dashboard.ts | 28 +
.../playwright/helpers/api/semanticLayer.test.ts | 65 +
.../playwright/helpers/api/semanticLayer.ts | 136 +
.../playwright/helpers/fixtures/testAssets.ts | 25 +-
superset-frontend/playwright/pages/ExplorePage.ts | 23 +-
.../playwright/tests/chart/chart-list.spec.ts | 4 +-
.../tests/dashboard/dashboard-list.spec.ts | 4 +-
.../tests/dashboard/dashboard-test-helpers.ts | 20 +-
.../tests/dashboard/featured-charts-render.spec.ts | 234 +
.../dashboard/version-history-placement.spec.ts | 39 +-
.../playwright/tests/dataset/dataset-list.spec.ts | 4 +-
.../tests/explore/explore-download-image.spec.ts | 65 +
.../semantic-view/semantic-view-dashboard.spec.ts | 204 +
.../tests/version-history/activity-log.spec.ts | 14 +-
.../src/utils/useTableTheme.ts | 42 -
.../plugin-chart-ag-grid-table/tsconfig.json | 18 +-
.../plugins/plugin-chart-calendar/tsconfig.json | 18 +-
.../src/components/OlChartMap.tsx | 18 +-
.../test/components/OlChartMap.test.tsx | 108 +
.../plugin-chart-cartodiagram/tsconfig.json | 18 +-
.../plugin-chart-cartodiagram/types/external.d.ts | 2 +
.../plugins/plugin-chart-chord/tsconfig.json | 18 +-
.../plugins/plugin-chart-country-map/tsconfig.json | 18 +-
.../src/Candlestick/constants.ts | 12 +-
.../src/Candlestick/controlPanel.tsx | 8 +-
.../src/Histogram/transformProps.ts | 8 +-
.../src/Sunburst/EchartsSunburst.tsx | 99 +-
.../src/Sunburst/transformProps.ts | 36 +-
.../plugin-chart-echarts/src/Sunburst/types.ts | 4 +
.../plugin-chart-echarts/src/Sunburst/utils.ts | 190 +
.../src/Timeseries/EchartsTimeseries.tsx | 4 +
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 28 +
.../src/Timeseries/Regular/Line/controlPanel.tsx | 19 +
.../src/Timeseries/transformProps.ts | 77 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 2 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 30 +
.../plugins/plugin-chart-echarts/src/types.ts | 2 -
.../plugin-chart-echarts/src/utils/forecast.ts | 20 +-
.../src/utils/mergeCustomEChartOptions.test.ts | 67 +
.../src/utils/mergeCustomEChartOptions.ts | 17 +
.../src/utils/xAxisDrillByFilter.ts | 37 +-
.../test/Candlestick/controlPanel.test.ts | 10 +
.../test/Candlestick/transformProps.test.ts | 17 +
.../test/Histogram/transformProps.test.ts | 11 +
.../test/MixedTimeseries/transformProps.test.ts | 8 +-
.../test/Rose/buildQuery.test.ts | 12 +-
.../test/Sunburst/EchartsSunburst.test.tsx | 474 +
.../test/Sunburst/transformProps.test.ts | 149 +-
.../test/Sunburst/utils.test.ts | 52 +
.../test/Timeseries/Bar/controlPanel.test.ts | 28 +
.../test/Timeseries/EchartsTimeseries.test.tsx | 46 +
.../test/Timeseries/Line/controlPanel.test.ts | 42 +
.../test/Timeseries/helpers.ts | 1 +
.../test/Timeseries/transformProps.test.ts | 142 +-
.../test/utils/forecast.test.ts | 63 +-
.../plugins/plugin-chart-echarts/tsconfig.json | 18 +-
.../plugins/plugin-chart-handlebars/tsconfig.json | 18 +-
.../plugins/plugin-chart-horizon/tsconfig.json | 18 +-
.../plugin-chart-paired-t-test/tsconfig.json | 18 +-
.../tsconfig.json | 18 +-
.../plugins/plugin-chart-partition/tsconfig.json | 18 +-
.../src/PivotTableChart.tsx | 2 +
.../src/plugin/buildQuery.ts | 35 +-
.../src/plugin/controlPanel.tsx | 54 +-
.../src/plugin/resultAggregation.ts | 121 +
.../src/plugin/transformProps.ts | 37 +-
.../src/plugin/utilities.ts | 42 +-
.../src/react-pivottable/Styles.ts | 98 +-
.../src/react-pivottable/TableRenderers.tsx | 106 +-
.../src/react-pivottable/utilities.ts | 739 +-
.../plugins/plugin-chart-pivot-table/src/types.ts | 1 +
.../test/PivotTableChart.test.tsx | 22 +
.../test/plugin/buildQuery.test.ts | 21 +
.../test/plugin/transformProps.test.ts | 82 +-
.../test/plugin/utilities.test.ts | 49 +-
.../test/react-pivottable/Styles.test.tsx | 328 +
.../test/react-pivottable/tableRenders.test.tsx | 90 +-
.../test/react-pivottable/utilities.test.ts | 890 +-
.../plugin-chart-pivot-table/test/testData.ts | 68 +
.../plugins/plugin-chart-pivot-table/tsconfig.json | 18 +-
.../src/MapLibre.tsx | 35 +-
.../test/MapLibre.test.tsx | 69 +-
.../plugin-chart-point-cluster-map/tsconfig.json | 16 +-
.../types/external.d.ts | 2 +
.../plugins/plugin-chart-table/src/Styles.tsx | 4 +
.../plugins/plugin-chart-table/src/TableChart.tsx | 7 +-
.../plugin-chart-table/test/TableChart.test.tsx | 129 +-
.../plugins/plugin-chart-table/tsconfig.json | 18 +-
.../plugins/plugin-chart-word-cloud/tsconfig.json | 18 +-
.../plugins/plugin-chart-world-map/tsconfig.json | 18 +-
.../src/CategoricalDeckGLContainer.test.tsx | 213 +-
.../src/CategoricalDeckGLContainer.tsx | 73 +-
.../src/DeckGLContainer.test.tsx | 28 +
.../preset-chart-deckgl/src/DeckGLContainer.tsx | 11 +
.../preset-chart-deckgl/src/Multi/Multi.tsx | 25 +-
.../preset-chart-deckgl/src/Multi/MultiV1.test.tsx | 66 +-
.../plugins/preset-chart-deckgl/src/Multi/index.ts | 2 +-
.../src/Multi/transformProps.test.ts | 43 +
.../src/Multi/transformProps.ts} | 22 +-
.../preset-chart-deckgl/src/factory.test.tsx | 117 +
.../plugins/preset-chart-deckgl/src/factory.tsx | 25 +
.../preset-chart-deckgl/src/layers/Arc/Arc.test.ts | 6 +
.../src/layers/Contour/Contour.test.ts | 56 +
.../src/layers/Contour/Contour.tsx | 2 +-
.../src/layers/Polygon/Polygon.test.tsx | 100 +
.../src/layers/Polygon/Polygon.tsx | 22 +
.../plugins/preset-chart-deckgl/tsconfig.json | 16 +-
.../preset-chart-deckgl/types/external.d.ts | 2 +
.../types/{external.d.ts => global.d.ts} | 13 +-
superset-frontend/spec/helpers/runStopButton.ts | 55 +
.../src/SqlLab/actions/sqlLab.test.ts | 308 +
superset-frontend/src/SqlLab/actions/sqlLab.ts | 68 +-
.../SqlLab/components/ResultSet/ResultSet.test.tsx | 13 +-
.../src/SqlLab/components/ResultSet/index.tsx | 10 +-
.../RunQueryActionButton.test.tsx | 545 +-
.../components/RunQueryActionButton/index.tsx | 37 +-
.../SqlLab/components/SqlEditor/SqlEditor.test.tsx | 17 +-
.../src/SqlLab/components/SqlEditor/index.tsx | 10 +-
.../TableExploreTree/TableExploreTree.test.tsx | 13 +-
.../SqlLab/components/TableExploreTree/index.tsx | 10 +-
.../components/TablePreview/TablePreview.test.tsx | 13 +-
.../src/SqlLab/components/TablePreview/index.tsx | 8 +-
.../src/components/Chart/Chart.test.tsx | 38 +
superset-frontend/src/components/Chart/Chart.tsx | 8 +
.../components/Chart/ChartErrorMessage.test.tsx | 2 +-
.../src/components/Chart/ChartErrorMessage.tsx | 3 +-
.../Chart/ChartRenderer.refresh.test.tsx | 302 +
.../src/components/Chart/ChartRenderer.test.tsx | 19 +
.../src/components/Chart/ChartRenderer.tsx | 90 +-
.../Chart/DrillBy/DrillByTemporalFilters.test.tsx | 256 +
.../src/components/Chart/chartAction.ts | 34 +
.../src/components/Chart/chartActions.test.ts | 62 +
.../FoldersEditor/FoldersEditor.test.tsx | 17 +-
.../components/Datasource/FoldersEditor/index.tsx | 12 +-
.../DatasourceEditor/DatasourceEditor.tsx | 45 +-
...atasourceEditorNormalizeColumnsWarning.test.tsx | 146 +
.../src/components/Datasource/utils/index.ts | 12 +-
.../src/components/Datasource/utils/utils.test.tsx | 28 +-
.../components/ErrorMessage/ErrorAlert.test.tsx | 41 +
.../src/components/GridTable/GridTable.test.tsx | 46 +-
.../src/components/GridTable/index.tsx | 19 +-
.../src/components/JsonModal/JsonModal.test.tsx | 18 +
.../src/components/JsonModal/utils.ts | 10 +-
.../src/dashboard/actions/hydrate.test.ts | 43 +
superset-frontend/src/dashboard/actions/hydrate.ts | 32 +-
.../components/AnchorLink/AnchorLink.test.tsx | 2 +-
.../DashboardBuilder/DashboardBuilder.test.tsx | 137 +-
.../DashboardBuilder/DashboardBuilder.tsx | 155 +-
.../DashboardBuilder/DashboardWrapper.tsx | 2 +-
.../src/dashboard/components/Header/index.tsx | 4 +-
.../PropertiesModal.manyCharts.test.tsx | 107 +
.../dashboard/components/PropertiesModal/index.tsx | 9 +-
.../PropertiesModal/sections/AccessSection.tsx | 2 +-
.../RefreshFrequencySelect.test.tsx | 99 +-
.../RefreshFrequency/RefreshFrequencySelect.tsx | 43 +-
.../src/dashboard/components/SliceAdder.test.tsx | 2 +-
.../src/dashboard/components/SliceAdder.tsx | 8 +-
.../components/gridComponents/Header/Header.tsx | 2 +-
.../DownloadMenuItems/DownloadMenuItems.test.tsx | 4 +-
.../FilterControls.overflow.test.tsx | 269 +
.../FilterBar/FilterControls/FilterControls.tsx | 4 +-
.../FilterBar/FilterControls/FilterValue.test.tsx | 73 +
.../FilterBar/FilterControls/FilterValue.tsx | 28 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 22 +-
.../FiltersConfigForm/getControlItemsMap.test.tsx | 19 +-
.../FiltersConfigForm/getControlItemsMap.tsx | 1 +
.../FiltersConfigForm/utils.test.ts | 41 +
.../FiltersConfigModal/FiltersConfigForm/utils.ts | 27 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 40 +
.../hooks/useFilterOperations.test.ts | 145 +-
.../hooks/useItemStateManager.ts | 28 +-
.../src/dashboard/containers/DashboardPage.tsx | 5 +-
superset-frontend/src/dashboard/types.ts | 2 +-
.../util/charts/getFormDataWithExtraFilters.ts | 7 +-
.../util/getFormDataWithExtraFilters.test.ts | 49 +
superset-frontend/src/embedded/index.tsx | 5 +-
.../src/explore/actions/saveModalActions.test.ts | 212 +
.../src/explore/actions/saveModalActions.ts | 14 +
.../components/ChartPills.behavior.test.tsx | 158 +
.../DatasourcePanel.real-autosizer.test.tsx | 7 +-
.../DatasourcePanel/DatasourcePanel.test.tsx | 13 +-
.../explore/components/DatasourcePanel/index.tsx | 10 +-
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 289 +
.../ExploreChartPanel/ExploreChartPanel.test.tsx | 28 +-
.../explore/components/ExploreChartPanel/index.tsx | 6 +
.../ExploreViewContainer.test.tsx | 276 +-
.../components/ExploreViewContainer/index.tsx | 6 +-
.../components/LegacyAggregationAlert.test.tsx | 302 +
.../explore/components/LegacyAggregationAlert.tsx | 115 +
.../RunQueryButton/RunQueryButton.test.tsx | 361 +-
.../explore/components/RunQueryButton/index.tsx | 6 +-
.../ColorSchemeControl/ColorSchemeLabel.test.tsx | 14 +
.../ColorSchemeControl/ColorSchemeLabel.tsx | 3 +
.../ColumnConfigControl.popover.test.tsx | 293 +
.../ControlForm/ControlForm.test.tsx | 158 +
.../controls/ComparisonRangeLabel.test.tsx | 38 +-
.../components/controls/ComparisonRangeLabel.tsx | 24 +-
.../ConditionalFormattingControl.test.tsx | 331 +-
.../ConditionalFormattingControl.tsx | 12 +-
.../ContourControl/ContourControl.test.tsx | 128 +
.../controls/ContourControl/ContourOption.test.tsx | 111 +
.../controls/ContourControl/ContourOption.tsx | 8 +-
.../ContourControl/ContourPopoverControl.test.tsx | 277 +
.../ContourControl/ContourPopoverControl.tsx | 17 +-
.../ContourControl/ContourPopoverTrigger.test.tsx | 133 +
.../controls/ContourControl/index.test.tsx | 212 +
.../controls/CustomListItem/index.test.tsx | 48 +
.../DatasourceControl/DatasourceControl.test.tsx | 2 +-
.../components/DateFunctionTooltip.tsx | 2 +-
.../controls/FixedOrMetricControl/index.tsx | 2 +-
.../components/controls/JSEditorControl.test.tsx | 9 +-
.../components/controls/JSEditorControl.tsx | 10 +-
.../LayerConfigsControl.test.tsx | 271 +
.../MapViewControl/MapViewControl.test.tsx | 134 +
.../MapViewControl/MapViewPopoverContent.test.tsx | 78 +
.../components/controls/SliderControl.test.tsx | 71 +
.../components/controls/SwitchControl.test.tsx | 57 +
.../controls/TimeRangeControl/index.test.tsx | 55 +
.../controls/VerticalRadioControl.test.tsx | 83 +
.../controls/ViewQueryModalFooter.test.tsx | 142 +-
.../controls/VizTypeControl/VizTypeGallery.tsx | 24 +-
.../ZoomConfigControl/ZoomConfigControl.test.tsx | 195 +-
.../ZoomConfigControl/ZoomConfigsChart.test.tsx | 178 +
superset-frontend/src/explore/constants.ts | 10 +
.../exploreUtils/legacyAggregationTag.test.ts | 137 +
.../explore/exploreUtils/legacyAggregationTag.ts | 93 +
superset-frontend/src/explore/types.ts | 2 +
.../alerts/components/AlertStatusIcon.test.tsx | 14 +
.../features/alerts/components/AlertStatusIcon.tsx | 1 +
.../src/features/charts/ChartCard.test.tsx | 32 +
.../src/features/charts/ChartCard.tsx | 10 +-
.../src/features/dashboards/DashboardCard.test.tsx | 47 +-
.../src/features/dashboards/DashboardCard.tsx | 14 +-
.../src/features/home/DashboardTable.test.tsx | 58 +-
.../src/features/home/DashboardTable.tsx | 31 +-
.../src/features/home/RightMenu.test.tsx | 76 +
superset-frontend/src/features/home/RightMenu.tsx | 16 +
.../semanticViews/AddSemanticViewModal.test.tsx | 251 +-
.../semanticViews/AddSemanticViewModal.tsx | 121 +-
.../src/features/semanticViews/creationResult.ts | 90 +
superset-frontend/src/features/tags/tags.ts | 2 +-
.../src/features/versionHistory/ActionRow.tsx | 5 +-
.../versionHistory/CurrentVersionSection.tsx | 12 +-
.../DashboardVersionHistory.test.tsx | 4 +-
.../versionHistory/RelatedUpdateRow.test.tsx | 27 +
.../features/versionHistory/RelatedUpdateRow.tsx | 5 +-
.../features/versionHistory/SaveGroupItem.test.tsx | 88 +-
.../src/features/versionHistory/SaveGroupItem.tsx | 66 +-
.../versionHistory/VersionHistoryPanel.test.tsx | 139 +-
.../versionHistory/VersionHistoryPanel.tsx | 54 +-
.../src/features/versionHistory/display.test.ts | 75 +
.../src/features/versionHistory/display.ts | 61 +-
.../versionHistory/useVersionActivity.test.ts | 4 +-
.../filters/components/Range/RangeChart.test.tsx | 115 +
.../components/Range/RangeFilterPlugin.test.tsx | 475 +-
.../filters/components/Range/RangeFilterPlugin.tsx | 195 +-
.../filters/components/Range/buildQuery.test.ts | 50 +
.../src/filters/components/Range/buildQuery.ts | 4 +
.../src/filters/components/Range/index.ts | 2 +
.../filters/components/Range/isSemanticRange.ts} | 22 +-
.../src/filters/components/Range/transformProps.ts | 2 +-
.../src/hooks/apiResources/dashboards.test.ts | 48 +
.../src/hooks/apiResources/dashboards.ts | 1 +
superset-frontend/src/hooks/useRunStopButton.ts | 181 +
.../src/pages/ActionLog/ActionLog.test.tsx | 76 +
superset-frontend/src/pages/ActionLog/index.tsx | 67 +-
.../pages/ChartList/ChartList.permissions.test.tsx | 27 +-
superset-frontend/src/pages/ChartList/index.tsx | 19 +-
.../DashboardList/DashboardList.cardview.test.tsx | 77 +-
.../DashboardList.permissions.test.tsx | 34 +-
.../src/pages/DashboardList/index.tsx | 34 +-
.../DatasetList/DatasetList.permissions.test.tsx | 30 +
superset-frontend/src/pages/DatasetList/index.tsx | 28 +-
superset-frontend/src/types/Dashboard.ts | 1 +
superset-frontend/src/types/bootstrapTypes.ts | 1 +
superset-frontend/src/utils/lazyWithRetry.test.tsx | 140 +
superset-frontend/src/utils/lazyWithRetry.ts | 135 +
.../src/utils/semanticViewStructure.test.ts | 50 +
.../src/utils/semanticViewStructure.ts | 2 +-
superset-frontend/src/views/routes.tsx | 83 +-
superset-frontend/tsconfig.json | 18 +-
superset-frontend/webpack.config.js | 36 +-
superset-websocket/README.md | 25 +
superset-websocket/config.example.json | 10 +-
superset-websocket/package-lock.json | 550 +-
superset-websocket/package.json | 8 +-
superset-websocket/spec/config.test.ts | 42 +
superset-websocket/spec/index.test.ts | 161 +-
superset-websocket/src/config.ts | 75 +
superset-websocket/src/index.ts | 93 +-
.../utils/client-ws-app/package-lock.json | 147 +-
.../utils/client-ws-app/package.json | 2 +-
superset/app.py | 36 +-
superset/charts/api.py | 32 +-
superset/charts/client_processing.py | 302 +-
superset/charts/data/api.py | 48 +-
superset/charts/data/dashboard_filter_context.py | 22 +
superset/charts/filters.py | 8 +
superset/cli/update.py | 17 -
superset/commands/chart/create.py | 4 +
superset/commands/chart/data/get_data_command.py | 37 +-
superset/commands/chart/exceptions.py | 4 +
superset/commands/chart/export.py | 34 +-
superset/commands/chart/update.py | 19 +
superset/commands/chart/utils.py | 39 +
superset/commands/dashboard/export.py | 51 +-
superset/commands/dataset/create.py | 69 +-
superset/commands/dataset/duplicate.py | 48 +-
superset/commands/dataset/exceptions.py | 46 +
superset/commands/dataset/importers/v1/utils.py | 194 +-
superset/commands/dataset/update.py | 127 +-
superset/commands/export/assets.py | 75 +-
superset/commands/export/models.py | 18 +-
superset/commands/importers/v1/examples.py | 8 +-
superset/commands/importers/v1/utils.py | 73 +-
superset/commands/report/base.py | 73 +
superset/commands/semantic_layer/create.py | 55 +-
superset/commands/semantic_layer/utils.py | 2 +-
superset/commands/sql_lab/execute.py | 12 +
superset/commands/streaming_export/base.py | 34 +-
superset/common/db_query_status.py | 6 +
superset/common/form_data_query_context.py | 30 +
superset/common/query_context_factory.py | 20 +-
superset/common/query_context_processor.py | 26 +-
superset/common/query_object_factory.py | 31 +-
superset/common/tags.py | 496 -
superset/common/utils/dataframe_utils.py | 64 +
superset/common/utils/time_range_utils.py | 32 +-
superset/config.py | 65 +
superset/connectors/sqla/utils.py | 49 +-
superset/constants.py | 1 +
superset/daos/dashboard.py | 158 +-
superset/daos/query.py | 26 +-
superset/dashboards/api.py | 37 +-
superset/dashboards/filters.py | 7 +
superset/dashboards/schemas.py | 3 +
superset/databases/api.py | 39 +-
superset/datasets/api.py | 33 +-
superset/datasets/schemas.py | 17 +-
superset/datasource/api.py | 150 +-
superset/db_engine_specs/README.md | 2 +
superset/db_engine_specs/base.py | 3 +
superset/db_engine_specs/bigquery.py | 15 +-
superset/db_engine_specs/impala.py | 48 +-
superset/db_engine_specs/oceanbase.py | 86 +
superset/db_engine_specs/trino.py | 35 +-
superset/errors.py | 1 +
superset/exceptions.py | 27 +
superset/extensions/metadb.py | 3 +-
superset/importexport/api.py | 45 +-
superset/initialization/__init__.py | 27 +-
superset/jinja_context.py | 21 +-
superset/key_value/types.py | 3 +
superset/mcp_service/README.md | 41 +
superset/mcp_service/app.py | 4 +-
superset/mcp_service/chart/chart_helpers.py | 30 +
superset/mcp_service/chart/chart_utils.py | 16 +-
superset/mcp_service/chart/compile.py | 176 +-
.../chart/prompts/create_chart_guided.py | 4 +-
.../mcp_service/chart/resources/chart_configs.py | 14 +-
superset/mcp_service/chart/schemas.py | 133 +-
superset/mcp_service/chart/tool/get_chart_data.py | 183 +-
.../mcp_service/chart/tool/get_chart_preview.py | 145 +-
superset/mcp_service/constants.py | 1 +
superset/mcp_service/dashboard/layout_placement.py | 21 +-
superset/mcp_service/dashboard/permalink.py | 6 +-
superset/mcp_service/dashboard/schemas.py | 139 +-
.../dashboard/tool/apply_dashboard_filters.py | 34 +-
.../dashboard/tool/duplicate_dashboard.py | 14 +-
.../dashboard/tool/get_dashboard_data.py | 96 +-
superset/mcp_service/dashboard_scope_sql.py | 25 +-
superset/mcp_service/database/schemas.py | 8 +-
superset/mcp_service/dataset/schemas.py | 30 +-
.../dataset/tool/update_dataset_metric.py | 2 +-
superset/mcp_service/jwt_verifier.py | 28 +-
superset/mcp_service/mcp_config.py | 3 +
superset/mcp_service/middleware.py | 54 +
superset/mcp_service/report/schemas.py | 4 +
superset/mcp_service/tag/tool/get_tag_info.py | 6 +-
superset/mcp_service/tag/tool/list_tags.py | 6 +-
superset/mcp_service/utils/response_size_utils.py | 4 +
superset/mcp_service/utils/sanitization.py | 114 +-
superset/mcp_service/utils/schema_utils.py | 19 +
superset/mcp_service/utils/validation.py | 89 +-
...141b8ada7731_tag_pivot_tables_with_restored_.py | 334 +
...ep_legacy_password_view_perms_from_all_roles.py | 120 +
superset/models/core.py | 5 +-
superset/models/dashboard.py | 13 +
superset/models/helpers.py | 370 +-
superset/queries/api.py | 18 +-
superset/queries/saved_queries/api.py | 33 +-
superset/queries/schemas.py | 2 +-
superset/reports/api.py | 15 +-
superset/reports/filters.py | 37 +
superset/result_set.py | 5 +
superset/security/manager.py | 65 +-
superset/security/password_change.py | 101 +-
superset/semantic_layers/api.py | 71 +-
superset/semantic_layers/cache_host.py | 19 +-
superset/semantic_layers/cache_policy.py | 14 +-
superset/semantic_layers/cache_repository.py | 14 +-
superset/semantic_layers/cache_transform.py | 17 +-
superset/semantic_layers/dimension_resolution.py | 117 +
superset/semantic_layers/execution.py | 286 +
superset/semantic_layers/mapper.py | 341 +-
superset/semantic_layers/models.py | 167 +-
superset/semantic_layers/ordering.py | 59 +
superset/sql/execution/celery_task.py | 541 +-
superset/sql/execution/executor.py | 252 +-
superset/sql/execution/serialization.py | 130 +
superset/sql/execution/utils.py | 260 +
superset/sql/parse.py | 81 +-
superset/sql_lab.py | 366 +-
superset/sqllab/api.py | 4 +-
superset/subjects/utils.py | 19 +-
superset/tags/core.py | 98 +-
superset/tags/models.py | 311 +-
superset/tasks/async_queries.py | 34 +-
superset/tasks/schemas.py | 9 +
superset/themes/api.py | 7 +-
superset/translations/ar/LC_MESSAGES/messages.po | 374 +-
superset/translations/ca/LC_MESSAGES/messages.po | 348 +-
superset/translations/cs/LC_MESSAGES/messages.po | 356 +-
superset/translations/de/LC_MESSAGES/messages.po | 348 +-
superset/translations/en/LC_MESSAGES/messages.po | 330 +-
superset/translations/es/LC_MESSAGES/messages.po | 348 +-
superset/translations/fa/LC_MESSAGES/messages.po | 342 +-
superset/translations/fi/LC_MESSAGES/messages.po | 364 +-
superset/translations/fr/LC_MESSAGES/messages.po | 350 +-
superset/translations/it/LC_MESSAGES/messages.po | 370 +-
superset/translations/ja/LC_MESSAGES/messages.po | 344 +-
superset/translations/ko/LC_MESSAGES/messages.po | 357 +-
superset/translations/lv/LC_MESSAGES/messages.po | 356 +-
superset/translations/messages.pot | 355 +-
superset/translations/mi/LC_MESSAGES/messages.po | 348 +-
superset/translations/nl/LC_MESSAGES/messages.po | 342 +-
superset/translations/pl/LC_MESSAGES/messages.po | 345 +-
superset/translations/pt/LC_MESSAGES/messages.po | 370 +-
.../translations/pt_BR/LC_MESSAGES/messages.po | 342 +-
superset/translations/ro/LC_MESSAGES/messages.po | 359 +-
superset/translations/ru/LC_MESSAGES/messages.po | 357 +-
superset/translations/sk/LC_MESSAGES/messages.po | 356 +-
superset/translations/sl/LC_MESSAGES/messages.po | 364 +-
superset/translations/sr/LC_MESSAGES/messages.po | 378 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 378 +-
superset/translations/ta/LC_MESSAGES/messages.po | 348 +-
superset/translations/th/LC_MESSAGES/messages.po | 356 +-
superset/translations/tr/LC_MESSAGES/messages.po | 343 +-
superset/translations/uk/LC_MESSAGES/messages.po | 364 +-
superset/translations/zh/LC_MESSAGES/messages.po | 334 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 334 +-
superset/utils/core.py | 11 +-
superset/utils/date_parser.py | 7 +-
superset/utils/error_sanitization.py | 38 +
superset/utils/excel.py | 36 +-
superset/utils/filters.py | 111 +-
superset/utils/number_format.py | 94 +
superset/utils/pandas_postprocessing/compare.py | 14 +-
superset/utils/screenshot_utils.py | 34 +-
superset/utils/webdriver.py | 4 +-
superset/versioning/changes/shadow_queries.py | 9 +-
superset/versioning/diff.py | 124 +-
superset/versioning/restore.py | 41 +-
superset/views/api.py | 5 +
superset/views/archived_assets.py | 18 +-
superset/views/base.py | 4 +
superset/views/base_api.py | 24 +
superset/views/datasource/views.py | 80 +-
.../src/superset_e2e_semantic_stub/__init__.py | 294 +
.../semantic_stub/dist/manifest.json | 10 +
tests/integration_tests/charts/api_tests.py | 8 +-
tests/integration_tests/dashboards/api_tests.py | 119 +-
.../dashboards/version_restore_tests.py | 358 +
tests/integration_tests/datasets/api_tests.py | 45 +
tests/integration_tests/datasource/api_tests.py | 237 +-
tests/integration_tests/queries/api_tests.py | 59 +-
.../security/row_level_security_tests.py | 69 +
tests/integration_tests/security_tests.py | 113 +-
tests/integration_tests/sqllab_tests.py | 29 +-
.../superset_test_config_semantic.py | 34 +-
tests/integration_tests/tagging_tests.py | 294 -
tests/integration_tests/tags/dao_tests.py | 94 +-
tests/integration_tests/tags/race_tests.py | 94 +
tests/integration_tests/tasks/api_tests.py | 78 +-
.../mypy_fixtures/__init__.py | 13 +-
tests/mypy_fixtures/uuid_mixin_nullable.py | 44 +
tests/testcontainers/db_engine_specs/test_mysql.py | 113 +
.../db_engine_specs/test_oceanbase.py | 94 +-
.../db_engine_specs/test_postgres.py | 690 +
.../charts/commands/data/test_get_data_command.py | 63 +-
.../charts/commands/importers/v1/import_test.py | 46 +
.../charts/data/streaming_filename_test.py | 18 +-
tests/unit_tests/charts/test_client_processing.py | 863 +-
.../charts/test_exact_integer_chart_data.py | 824 +
tests/unit_tests/charts/test_filters.py | 110 +
tests/unit_tests/commands/chart/create_test.py | 252 +-
tests/unit_tests/commands/chart/export_test.py | 576 +
tests/unit_tests/commands/chart/update_test.py | 266 +-
tests/unit_tests/commands/dashboard/export_test.py | 8 +-
tests/unit_tests/commands/dataset/test_create.py | 268 +-
.../unit_tests/commands/dataset/test_duplicate.py | 136 +-
tests/unit_tests/commands/dataset/update_test.py | 475 +-
.../commands/importers/v1/examples_test.py | 51 +
.../unit_tests/commands/importers/v1/utils_test.py | 233 +
tests/unit_tests/commands/report/base_test.py | 239 +
.../unit_tests/commands/report/conftest.py | 10 +-
.../commands/report/semantic_view_report_test.py | 232 +
.../commands/semantic_layer/create_test.py | 193 +-
.../commands/semantic_layer/update_test.py | 12 +-
tests/unit_tests/commands/sql_lab/test_estimate.py | 27 +
tests/unit_tests/commands/sql_lab/test_execute.py | 92 +
.../commands/streaming_export}/__init__.py | 0
.../commands/streaming_export/base_test.py | 51 +
tests/unit_tests/common/test_dataframe_utils.py | 53 +
.../unit_tests/common/test_query_cache_manager.py | 38 +
.../common/test_query_context_factory.py | 35 +
.../common/test_query_context_processor.py | 126 +-
tests/unit_tests/common/test_time_range_utils.py | 27 +
tests/unit_tests/conftest.py | 53 +-
tests/unit_tests/connectors/sqla/utils_test.py | 26 +
tests/unit_tests/dao/dashboard_test.py | 581 +
tests/unit_tests/dao/queries_test.py | 30 +-
tests/unit_tests/dao/query_stop_isolation_test.py | 126 +
.../dao/test_copy_dashboard_legacy_ids.py | 81 +-
tests/unit_tests/dao/test_query_stop_race.py | 73 +-
tests/unit_tests/daos/test_query_dao.py | 619 +
tests/unit_tests/dashboards/datasets_test.py | 86 +
.../dashboards/semantic_view_access_test.py | 141 +-
tests/unit_tests/databases/api_test.py | 91 +-
.../datasets/commands/importers/v1/import_test.py | 608 +-
tests/unit_tests/datasets/schema_tests.py | 80 +
tests/unit_tests/datasource/test_compatible_api.py | 98 +
tests/unit_tests/datasource/test_query_api.py | 24 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 70 +
.../db_engine_specs/test_impala_pending.py | 132 +-
tests/unit_tests/db_engine_specs/test_oceanbase.py | 228 +
tests/unit_tests/db_engine_specs/test_trino.py | 1104 +-
tests/unit_tests/exceptions_test.py | 46 +
tests/unit_tests/importexport/api_test.py | 141 +-
tests/unit_tests/initialization_test.py | 9 +-
tests/unit_tests/jinja_context_test.py | 74 +
.../mcp_service/chart/test_bullet_chart.py | 18 +-
.../mcp_service/chart/test_bullet_tool_paths.py | 24 +-
.../mcp_service/chart/test_chart_examples.py | 48 +
.../mcp_service/chart/test_chart_helpers.py | 67 +
.../mcp_service/chart/test_chart_schemas.py | 21 +
tests/unit_tests/mcp_service/chart/test_compile.py | 464 +
.../chart/test_native_chart_regressions.py | 24 +
.../mcp_service/chart/test_new_chart_types.py | 26 +-
.../test_review_query_and_preview_regressions.py | 7 +-
.../chart/test_time_grain_generic_axes.py | 171 +
.../mcp_service/chart/tool/test_get_chart_data.py | 693 +-
.../chart/tool/test_get_chart_preview.py | 453 +
.../common/test_list_scope_validation.py | 105 +
.../dashboard/test_dashboard_schemas.py | 39 +
.../mcp_service/dashboard/test_permalink.py | 40 +-
.../dashboard/tool/test_apply_dashboard_filters.py | 67 +-
.../dashboard/tool/test_duplicate_dashboard.py | 86 +-
.../dashboard/tool/test_get_dashboard_data.py | 507 +
.../dashboard/tool/test_list_dashboards.py | 85 +
.../mcp_service/dataset/tool/test_query_dataset.py | 44 +-
.../mcp_service/native_tool_inventory.json | 112 +-
.../test_compatibility_selection_validation.py | 9 +-
.../semantic_layer/tool/test_get_table.py | 27 +-
.../semantic_layer/tool/test_list_metrics.py | 25 +-
.../mcp_service/test_browser_hello_middleware.py | 126 +
.../mcp_service/test_dashboard_scope_sql.py | 75 +
tests/unit_tests/mcp_service/test_mcp_config.py | 9 +
.../mcp_service/test_mcp_tool_registration.py | 23 +
tests/unit_tests/mcp_service/test_middleware.py | 5 +-
.../mcp_service/test_native_tool_surface.py | 10 +-
.../test_sanitization_warning_inputs.py | 450 +-
.../unit_tests/mcp_service/test_tool_inventory.py | 21 +-
.../mcp_service/test_validation_contract.py | 42 +-
.../mcp_service/utils/test_sanitization.py | 163 +
.../test_sweep_legacy_password_view_perms.py | 190 +
...t_tag_pivot_tables_with_restored_aggregation.py | 461 +
.../models/groupby_literal_column_test.py | 288 +
tests/unit_tests/models/helpers_test.py | 793 +-
.../models/normalize_df_large_integer_test.py | 307 +
tests/unit_tests/models/template_params_test.py | 68 +
.../models/test_hours_offset_bound_truncation.py | 480 +-
tests/unit_tests/models/test_multivalue_filter.py | 138 +
.../pandas_postprocessing/test_compare.py | 109 +
tests/unit_tests/reports/filters_test.py | 53 +
tests/unit_tests/scripts/change_detector_test.py | 13 +
.../scripts/translations/babel_update_test.py | 105 +-
tests/unit_tests/security/manager_test.py | 174 +
tests/unit_tests/security/test_password_change.py | 63 +
.../unit_tests/security/test_password_recovery.py | 12 +-
tests/unit_tests/semantic_layers/api_test.py | 379 +-
.../unit_tests/semantic_layers/cache_host_test.py | 6 +
.../semantic_layers/cache_policy_test.py | 3 +-
.../semantic_layers/cache_transform_test.py | 8 +-
tests/unit_tests/semantic_layers/conftest.py | 171 +
.../semantic_layers/default_order_test.py | 376 +
.../semantic_layers/dimension_resolution_test.py | 161 +
.../semantic_layers/e2e_stub_extension_test.py | 246 +
.../semantic_layers/execution_context_test.py | 1141 +
.../semantic_layers/grain_validation_test.py | 6 +-
.../semantic_layers/import_export_test.py | 6 +-
.../semantic_layers/integer_precision_test.py | 14 +-
tests/unit_tests/semantic_layers/mapper_test.py | 989 +-
.../semantic_layers/metadata_contract_test.py | 92 +-
.../semantic_layers/metric_filter_test.py | 209 +-
tests/unit_tests/semantic_layers/models_test.py | 252 +-
.../semantic_layers/query_errors_test.py | 301 +-
.../semantic_layers/simple_cache_clear_test.py | 106 +-
.../semantic_layers/values_endpoint_test.py | 212 +
tests/unit_tests/sql/execution/conftest.py | 6 +-
.../unit_tests/sql/execution/test_async_results.py | 1500 +
tests/unit_tests/sql/execution/test_celery_task.py | 2351 +-
tests/unit_tests/sql/execution/test_executor.py | 42 +-
tests/unit_tests/sql/execution/test_utils.py | 207 +
tests/unit_tests/sql/parse_tests.py | 154 +
tests/unit_tests/sql_lab_test.py | 1714 +
tests/unit_tests/sqllab/api_test.py | 24 +-
tests/unit_tests/tags/models_test.py | 6 +-
tests/unit_tests/tags/race_test.py | 84 +
tests/unit_tests/tasks/test_async_queries.py | 139 +-
tests/unit_tests/tasks/test_schemas.py | 62 +
tests/unit_tests/test_app_reinitialization.py | 114 +
tests/unit_tests/test_sqllab_error_stacktrace.py | 17 +-
tests/unit_tests/themes/api_test.py | 33 +
tests/unit_tests/utils/csv_tests.py | 14 +
tests/unit_tests/utils/excel_tests.py | 51 +
tests/unit_tests/utils/filters_test.py | 260 +-
tests/unit_tests/utils/number_format_test.py | 31 +
tests/unit_tests/utils/test_core.py | 20 +
tests/unit_tests/utils/test_error_sanitization.py | 94 +
tests/unit_tests/utils/test_screenshot_utils.py | 134 +
.../versioning/test_dataset_child_extra.py | 148 +
.../versioning/test_diff_save_defaults.py | 264 +
tests/unit_tests/versioning/test_shadow_queries.py | 79 +
tests/unit_tests/views/datasource/views_test.py | 440 +-
tests/unit_tests/views/test_archived_assets.py | 86 +
tests/unit_tests/views/test_base.py | 72 +
.../unit_tests/views/test_parse_json_form_field.py | 54 +
754 files changed, 86086 insertions(+), 27087 deletions(-)
create mode 100755 .github/workflows/scripts/check-code-scanning-available.sh
create mode 100755
.github/workflows/scripts/check-code-scanning-available.test.sh
create mode 100644 docs/admin_docs/security/oauth.mdx
copy docs/developer_docs/extensions/{contribution-types.md =>
extension-points/semantic-layers.md} (52%)
delete mode 100644 docs/developer_docs/extensions/semantic-filters.md
create mode 100644 docs/static/img/logos/plum.svg
create mode 100644 superset-core/src/superset_core/semantic_layers/context.py
create mode 100644 superset-core/src/superset_core/semantic_layers/testing.py
create mode 100644 superset-core/tests/semantic_layers/example_provider.py
create mode 100644
superset-core/tests/semantic_layers/test_execution_context.py
create mode 100644 superset-core/tests/semantic_layers/test_registration.py
copy
superset-frontend/{plugins/plugin-chart-point-cluster-map/types/external.d.ts
=> .storybook/playwright.storybook-ci.config.ts} (64%)
create mode 100644 superset-frontend/.storybook/setup-stories.test.ts
create mode 100644 superset-frontend/.storybook/setup-stories.ts
copy superset-frontend/{plugins/preset-chart-deckgl/types/external.d.ts =>
.storybook/stories.spec.ts} (77%)
delete mode 100644 superset-frontend/.storybook/test-runner.ts
create mode 100644
superset-frontend/playwright/helpers/api/semanticLayer.test.ts
create mode 100644 superset-frontend/playwright/helpers/api/semanticLayer.ts
create mode 100644
superset-frontend/playwright/tests/dashboard/featured-charts-render.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-download-image.spec.ts
create mode 100644
superset-frontend/playwright/tests/semantic-view/semantic-view-dashboard.spec.ts
delete mode 100644
superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/useTableTheme.ts
create mode 100644
superset-frontend/plugins/plugin-chart-cartodiagram/test/components/OlChartMap.test.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/utils.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/EchartsSunburst.test.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/utils.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/src/plugin/resultAggregation.ts
create mode 100644
superset-frontend/plugins/plugin-chart-pivot-table/test/react-pivottable/Styles.test.tsx
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/Multi/transformProps.test.ts
copy
superset-frontend/plugins/{plugin-chart-point-cluster-map/types/external.d.ts
=> preset-chart-deckgl/src/Multi/transformProps.ts} (62%)
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/factory.test.tsx
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/layers/Contour/Contour.test.ts
copy superset-frontend/plugins/preset-chart-deckgl/types/{external.d.ts =>
global.d.ts} (74%)
create mode 100644 superset-frontend/spec/helpers/runStopButton.ts
create mode 100644
superset-frontend/src/components/Chart/ChartRenderer.refresh.test.tsx
create mode 100644
superset-frontend/src/components/Chart/DrillBy/DrillByTemporalFilters.test.tsx
create mode 100644
superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/DatasourceEditorNormalizeColumnsWarning.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/PropertiesModal/PropertiesModal.manyCharts.test.tsx
create mode 100644
superset-frontend/src/explore/components/ChartPills.behavior.test.tsx
create mode 100644
superset-frontend/src/explore/components/LegacyAggregationAlert.test.tsx
create mode 100644
superset-frontend/src/explore/components/LegacyAggregationAlert.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ColumnConfigControl.popover.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/ControlForm.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourOption.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/index.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/CustomListItem/index.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/LayerConfigsControl/LayerConfigsControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/MapViewControl/MapViewControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/MapViewControl/MapViewPopoverContent.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/SliderControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/SwitchControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/TimeRangeControl/index.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/VerticalRadioControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.test.tsx
create mode 100644
superset-frontend/src/explore/exploreUtils/legacyAggregationTag.test.ts
create mode 100644
superset-frontend/src/explore/exploreUtils/legacyAggregationTag.ts
create mode 100644
superset-frontend/src/features/semanticViews/creationResult.ts
create mode 100644
superset-frontend/src/filters/components/Range/RangeChart.test.tsx
create mode 100644
superset-frontend/src/filters/components/Range/buildQuery.test.ts
copy
superset-frontend/{plugins/plugin-chart-point-cluster-map/types/external.d.ts
=> src/filters/components/Range/isSemanticRange.ts} (64%)
create mode 100644 superset-frontend/src/hooks/useRunStopButton.ts
create mode 100644 superset-frontend/src/utils/lazyWithRetry.test.tsx
create mode 100644 superset-frontend/src/utils/lazyWithRetry.ts
delete mode 100644 superset/common/tags.py
create mode 100644
superset/migrations/versions/2026-09-25_00-00_141b8ada7731_tag_pivot_tables_with_restored_.py
create mode 100644
superset/migrations/versions/2026-09-30_00-00_d623a0cb6bb0_sweep_legacy_password_view_perms_from_all_roles.py
create mode 100644 superset/semantic_layers/dimension_resolution.py
create mode 100644 superset/semantic_layers/execution.py
create mode 100644 superset/semantic_layers/ordering.py
create mode 100644 superset/sql/execution/serialization.py
create mode 100644 superset/sql/execution/utils.py
create mode 100644
tests/e2e_extensions/semantic_stub/dist/backend/src/superset_e2e_semantic_stub/__init__.py
create mode 100644 tests/e2e_extensions/semantic_stub/dist/manifest.json
copy superset/common/db_query_status.py =>
tests/integration_tests/superset_test_config_semantic.py (50%)
delete mode 100644 tests/integration_tests/tagging_tests.py
create mode 100644 tests/integration_tests/tags/race_tests.py
copy RELEASING/requirements.txt => tests/mypy_fixtures/__init__.py (65%)
create mode 100644 tests/mypy_fixtures/uuid_mixin_nullable.py
create mode 100644 tests/unit_tests/charts/test_exact_integer_chart_data.py
create mode 100644 tests/unit_tests/commands/chart/export_test.py
copy RELEASING/requirements.txt =>
tests/unit_tests/commands/report/conftest.py (82%)
create mode 100644
tests/unit_tests/commands/report/semantic_view_report_test.py
copy {scripts => tests/unit_tests/commands/streaming_export}/__init__.py (100%)
create mode 100644 tests/unit_tests/commands/streaming_export/base_test.py
create mode 100644 tests/unit_tests/dao/query_stop_isolation_test.py
create mode 100644 tests/unit_tests/daos/test_query_dao.py
create mode 100644 tests/unit_tests/datasource/test_compatible_api.py
create mode 100644 tests/unit_tests/exceptions_test.py
create mode 100644
tests/unit_tests/mcp_service/common/test_list_scope_validation.py
create mode 100644
tests/unit_tests/mcp_service/dashboard/tool/test_list_dashboards.py
create mode 100644
tests/unit_tests/mcp_service/test_browser_hello_middleware.py
create mode 100644
tests/unit_tests/migrations/test_sweep_legacy_password_view_perms.py
create mode 100644
tests/unit_tests/migrations/test_tag_pivot_tables_with_restored_aggregation.py
create mode 100644 tests/unit_tests/models/groupby_literal_column_test.py
create mode 100644 tests/unit_tests/models/normalize_df_large_integer_test.py
create mode 100644 tests/unit_tests/models/template_params_test.py
create mode 100644 tests/unit_tests/semantic_layers/default_order_test.py
create mode 100644
tests/unit_tests/semantic_layers/dimension_resolution_test.py
create mode 100644 tests/unit_tests/semantic_layers/e2e_stub_extension_test.py
create mode 100644 tests/unit_tests/semantic_layers/execution_context_test.py
create mode 100644 tests/unit_tests/sql/execution/test_async_results.py
create mode 100644 tests/unit_tests/sql/execution/test_utils.py
create mode 100644 tests/unit_tests/tags/race_test.py
create mode 100644 tests/unit_tests/test_app_reinitialization.py
create mode 100644 tests/unit_tests/versioning/test_dataset_child_extra.py
create mode 100644 tests/unit_tests/versioning/test_diff_save_defaults.py
create mode 100644 tests/unit_tests/views/test_archived_assets.py
create mode 100644 tests/unit_tests/views/test_parse_json_form_field.py