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/10/15 22:31:00 UTC
(superset) branch fix/uuidmixin-uuid-declared-attr updated (cf16a885fde -> 76f2112c2a4)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch fix/uuidmixin-uuid-declared-attr
in repository https://gitbox.apache.org/repos/asf/superset.git
omit cf16a885fde fix(mypy): make UUIDMixin.uuid's nullable type resolve deterministically
omit 8854e88b9f5 test(mypy): add sole-input CI guard for UUIDMixin.uuid's nullable type
add 90dc7ac3289 fix(databricks): enable equality operators for boolean filters (#36765) (#44355)
add c58db3b704d chore(deps): bump maplibre-gl from 6.11.2 to 6.12.0 in /superset-frontend (#45199)
add 42bbfa49079 chore(deps-dev): update thrift requirement from <1.0.0,>=0.24.0 to >=0.25.0,<1.0.0 (#45191)
add f4fe4e13c47 fix(mcp): support custom user models during dashboard and chart operations (#45036)
add 88a14e9be56 docs(i18n): add a translation guide with shared principles (#45181)
add a4cf0ff09e7 chore(ci): correct download-artifact version comment to v8.0.1 (#45212)
add 209bdafc124 fix(tests): narrow nullable uuid before passing it to KeyValueDAO.get_entry (#45171)
add 2747094d4c2 feat(mcp): add typed Bullet chart support (#43770)
add 02304af9a99 fix(mypy): narrow nullable uuid/perm reads in chart restore version tests (#45080)
add cd526f9e97d chore(deps-dev): bump fastmcp from 3.4.7 to 4.0.3 (#44200)
add ea0687222a5 fix(dashboard): honour DASHBOARD_AUTO_REFRESH_INTERVALS in the refresh dropdown (#44982)
add 11b6997a488 fix(dashboard): drop missing semantic-view controls on restore (#45130)
add f923be702a1 fix(semantic-layer): report incompatible dashboard filters on semantic views instead of dropping them (#45105)
add f774479c990 fix(mcp): allow chart filtering by dataset ID (#44950)
add 60c66fe8d50 fix(explore): honor chart edit permissions for titles (#45146)
add 59404f47cd3 feat(mcp): target semantic views in chart tools (#44393)
add 945d8bbd632 fix(mcp): promote tools whose full names appear in a search query (#45149)
add 63a7a6e4eca chore(deps): bump chrono-node from 2.10.1 to 2.10.2 in /superset-frontend (#45227)
add dd1312b3c2b chore(deps-dev): bump the typescript-eslint group across 1 directory with 2 updates (#45224)
add aa321aab31d chore(deps): bump chromaui/action from 18.10.2 to 18.11.0 (#45222)
add a26c984279c chore(deps-dev): bump oxlint from 1.86.0 to 1.87.0 in /docs (#45226)
add 962272b6f20 feat(semantic-layer): allow toggling SEMANTIC_LAYERS at runtime (#45061)
add f154d23a954 fix(dashboard): reconcile position_json against membership on save (#44028)
add b39e1e0db71 chore(ci): correct upload-artifact version comment to v7.0.1 (#45229)
add 8f13b2b2e69 chore(ci): correct upload-artifact version comment in translations workflow (#45213)
add 9c70fa40159 chore(deps-dev): bump oxfmt from 0.71.0 to 0.72.0 in /docs (#45225)
add 1cedab01e9e chore(deps): bump geostyler-openlayers-parser from 5.7.1 to 5.8.0 in /superset-frontend (#45077)
add 0f875cadbe0 fix(network): refine address classification (#45230)
add 1578b8cbc11 fix(semantic-layer): restore value suggestions for semantic view filters (#45109)
add 6d974e19c51 fix(mcp): keep the saved chart variant when update_chart omits it (#45221)
add f18c034a689 fix(connection): let SupersetClient.postForm accept an absolute url (#45204)
add 1caea41f425 docs: give bare relative links an explicit extension (#43170)
add e7ca70c784e fix(datasource): apply target-table access check on same-database repoint (#44080)
add 1b10345f3bf docs(semantic-layer): write down member identity, grain, NULL and ordering rules in the SDK (#45108)
add 61a0fd28ec6 fix(semantic-layer): improve credential entry and connection feedback (#45173)
add 7aadf35e7d7 feat(mcp): accept a callable for MCP_DATASET_ROLE_ALLOWLIST (#45231)
add 139a06eee15 chore(ci): correct upload-artifact version comment to v7.0.1 (#45211)
add 4da3ab9277b refactor(db_engine_specs): dedupe boolean-coercion logic for Databricks/Spark (#45202)
add 952ff3b22f4 perf(filters): use useDeferredValue in SelectFilterPlugin (#44880)
add 488810d8395 fix(db-engine): make cachetools import optional in aws_iam (#38269)
add 8503b6b0b5a fix: clamp table pagination index when filtered data shrinks (#31403) (#39661)
add fb99e4b530a fix(embedded): fail closed when the guest-user check can't resolve a principal (#43896)
add bffb5638015 fix(post-processing): raise when a rename would duplicate a column label (#45043)
add 0cd13e92c1d fix(post-processing): keep the caller's index when parsing geography columns (#45086)
add 6d4dc0d3363 fix(bigquery): expose STRUCT fields as columns on virtual datasets (#45150)
add 333b6be7d71 fix(country-map): keep South Africa's islands in frame and fix hover … (#45000)
add 85aa56420a8 fix(explore): XAxisSortControl follows the value prop (#44956)
add fe46e76c510 fix(dashboard): remove duplicate spacing above out-of-scope filters section (#44954)
add 8ace079d8de feat(semantic-layers): add safe containment result cache (#42760)
add c0b713746b1 fix(mcp): make authlib.jose deprecation filter survive authlib's own simplefilter (#45219)
add 963031c209f fix(graph): distinguish null categories from literal labels (#44790)
add 1c4aba2453d docs(databases): refresh ClickHouse guide and support dark-theme logos (#44901)
add 718572cf29a chore(deps-dev): bump sqlalchemy-hana from 3.0.3 to 5.0.0 (#45189)
add d6c7ac23183 fix(mypy): silence superset-core mirror-case union-attr/assignment errors (#45138)
add f7a1c8f33bd docs: fix broken anchor links in intro, README and tasks guide (#45206)
add 8796ba16ae7 fix(clickhouse): bump Altinity.Cloud's documented clickhouse-connect floor (#45249)
add 6ded7caa0a9 fix(mcp): refuse an update that would drop a SQL trendline column (#45236)
add b840a4cef38 feat(plugin-chart-echarts): add cross-filtering to the Bubble chart (#45223)
add 48eb96aa843 fix(releasing): various release tooling improvements (#45253)
add f19a71be433 fix(semantic-layer): narrow ValidatedQueryObject.metrics to list[str] (#45185)
add 3cbdff6b6b7 fix(mcp): reject unknown semantic compatibility selections (#45153)
add 1fced034d37 fix(semantic-layer): return 4xx for provider validation errors in chart data (#45110)
add 114d32b12d1 feat(semantic-layer): gate Table pagination on row offset support (#44452)
add 55cb2eb0df5 fix(mcp): only flag get_catalog pages truncated when entries are held back (#45148)
add f5404f7eae3 fix(semantic-layer): preserve NULL selections in chart filters (#45133)
add 8175e0ecc7b fix(semantic-views): hide stale dependent options while they refresh (#44995)
add d970d634f71 fix(mcp): reject apply_dashboard_filters select values missing from the data (#45242)
add bf0a9cc3271 fix(semantic-layer): require data access for semantic view edits (#45154)
add 81d4137b98b fix(semantic-layer): block deletion of sources with dependent assets (#45071)
add 7f1bfaba4b2 fix(reports): apply the server-pagination row limit to embedded chart data (#45099)
add f8e8cfe6e43 chore(openapi): regenerate the published spec for the semantic delete 409s (#45262)
add ffee0a843f1 feat(db_engine_specs): enable MEDIAN/STDDEV_SAMP/VAR_SAMP for Databricks and Snowflake (#44627)
add 0ce9b6ca46c chore(deps): bump urllib3 to 2.8.0 and werkzeug to 3.1.9 (#45255)
add 5cf0b8c6046 test(semantic views): finish selected refreshes before test teardown (#45282)
add bbc61ac3a78 chore(deps-dev): bump the swc group across 1 directory with 2 updates (#45290)
add b411454508c chore(deps): bump the babel group across 2 directories with 5 updates (#45289)
add 37c33788f69 fix(dashboard): bind native filter datasources by type so semantic views load (#45069)
add fa0999745fb fix(explore): raise a validation error instead of asserting when an IN filter has no value (SC-124271) (#44986)
add b9709c39576 chore(deps): bump js-yaml from 5.4.2 to 5.4.3 in /docs (#45291)
add 367b6f5cbf5 chore(deps): bump maplibre-gl from 6.12.0 to 6.13.0 in /superset-frontend (#45295)
add c969ac425d6 chore(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 (#45284)
add 54d2421ded3 test(bigquery): verify string-literal escaping against a real GoogleSQL engine (#44546)
add 9e4adb98717 fix(alerts): handle report filter loading states and errors (#45142)
add 96e22f4eaba fix(contour): preserve undefined unused fields (#44967)
add 9659a13ae8e docs(config): document AFTER_ASSET_CREATE hook (#44126)
add 564b85aa395 build: group Dependabot PRs for GHA refs from `actions` org (#45296)
add 8db419ce1ab feat(build): migrate custom lint rule to Oxlint (#44201)
add 6a7cfd5ba12 chore(deps): bump actions/setup-node from 7.0.0 to 7.1.0 (#45285)
add 9bd8cd9f33f chore(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2 (#45286)
add 1aeb8642447 chore(deps-dev): bump baseline-browser-mapping from 2.11.26 to 2.11.27 in /superset-frontend (#45299)
add 0dc57e9a9de fix(semantic-views): stop debounced refreshes after the modal unmounts (#45281)
add e6b1d766183 feat(auth): add self-service forgot-password recovery for AUTH_DB (sip-201) (#45277)
add 4c546edbd8f perf(security): resolve user_view_menu_names via role semi-join (#45303)
add f7ad2aba62f chore(deps): bump the codeql group across 1 directory with 3 updates (#45326)
add f808b982a59 fix(charts): reject query_context missing datasource/queries on save (#44549)
add 72bfc4134f2 fix(semantic-layer): classify provider errors in value suggestions (#45147)
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 31c08c81d81 test(mypy): add sole-input CI guard for UUIDMixin.uuid's nullable type
add 76f2112c2a4 fix(mypy): make UUIDMixin.uuid's nullable type resolve deterministically
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 (cf16a885fde)
\
N -- N -- N refs/heads/fix/uuidmixin-uuid-declared-attr (76f2112c2a4)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/actions/change-detector/action.yml | 3 +
.github/dependabot.yml | 5 +-
.github/workflows/chromatic.yml | 2 +-
.github/workflows/codeql-analysis.yml | 4 +-
.github/workflows/docker.yml | 2 +-
.github/workflows/embedded-sdk-release.yml | 2 +-
.github/workflows/embedded-sdk-test.yml | 2 +-
.github/workflows/github-action-validator.yml | 2 +-
.github/workflows/pre-commit.yml | 2 +-
.github/workflows/release.yml | 2 +-
.github/workflows/superset-docs-deploy.yml | 2 +-
.github/workflows/superset-docs-verify.yml | 4 +-
.github/workflows/superset-e2e.yml | 8 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 19 +-
.../workflows/superset-python-integrationtest.yml | 52 +-
.../workflows/superset-python-unittest-report.yml | 4 +-
.github/workflows/superset-python-unittest.yml | 4 +-
.../workflows/superset-translations-comment.yml | 2 +-
.github/workflows/superset-translations.yml | 4 +-
.github/workflows/superset-websocket.yml | 2 +-
.github/workflows/tag-release.yml | 4 +-
.github/workflows/tech-debt.yml | 2 +-
.github/workflows/testcontainers.yml | 3 +-
README.md | 4 +-
RELEASING/Dockerfile.from_local_tarball | 13 +-
RELEASING/Dockerfile.from_svn_tarball | 13 +-
RELEASING/README.md | 23 +-
RELEASING/changelog.py | 220 +-
RELEASING/requirements.txt | 2 +
UPDATING.md | 144 +-
docs/admin_docs/configuration/alerts-reports.mdx | 10 +
docs/admin_docs/configuration/cache.mdx | 36 +
.../configuration/configuring-superset.mdx | 79 +
docs/admin_docs/configuration/feature-flags.mdx | 29 +
.../importing-exporting-datasources.mdx | 22 +
docs/admin_docs/configuration/mcp-server.mdx | 195 +-
docs/developer_docs/contributing/howtos.md | 12 +-
.../contributing/translation-guide.md | 104 +
.../extensions/contribution-types.md | 170 +-
docs/developer_docs/extensions/mcp.md | 19 +
docs/developer_docs/extensions/overview.md | 22 +-
docs/developer_docs/extensions/semantic-filters.md | 79 +
docs/developer_docs/extensions/tasks.md | 2 +-
docs/developer_docs/semantic-query-errors.md | 80 +
docs/docs/index.mdx | 4 +-
.../creating-your-first-dashboard.mdx | 14 +
docs/docs/using-superset/exploring-data.mdx | 7 +
docs/docs/using-superset/number-formatting.mdx | 2 +-
docs/docs/using-superset/recently-archived.mdx | 12 +
.../using-superset/semantic-layer-connections.mdx | 63 +
.../using-superset/semantic-member-selections.mdx | 56 +-
.../docs/using-superset/using-ai-with-superset.mdx | 10 +-
docs/docs/using-superset/version-history.mdx | 20 +
docs/package.json | 6 +-
docs/scripts/generate-database-docs.mjs | 84 +
docs/sidebarTutorials.js | 2 +
docs/sip/pivot-table-aggregation-parity.md | 112 +
docs/src/components/databases/DatabaseLogo.tsx | 62 +
docs/src/components/databases/DatabaseLogoWall.tsx | 9 +-
docs/src/components/databases/DatabasePage.tsx | 59 +-
docs/src/components/databases/types.ts | 8 +
docs/src/data/databases.json | 90 +-
docs/src/pages/index.tsx | 11 +-
docs/static/feature-flags.json | 7 +
docs/static/img/databases/clickhouse-dark.svg | Bin 0 -> 4480 bytes
docs/static/img/databases/clickhouse-mark-dark.svg | Bin 0 -> 960 bytes
docs/static/img/databases/clickhouse-mark.svg | Bin 0 -> 963 bytes
docs/static/img/databases/clickhouse.svg | Bin 0 -> 4483 bytes
docs/static/resources/openapi.json | 1152 ++++-
docs/yarn.lock | 500 +-
pyproject.toml | 42 +-
requirements/base.in | 6 +-
requirements/base.txt | 4 +-
requirements/development.in | 7 +-
requirements/development.txt | 20 +-
scripts/change_detector.py | 15 +
scripts/eslint.sh | 30 -
.../src/superset_core/semantic_layers/errors.py | 36 +-
.../src/superset_core/semantic_layers/layer.py | 63 +-
.../src/superset_core/semantic_layers/types.py | 173 +-
.../src/superset_core/semantic_layers/view.py | 46 +
superset-core/tests/semantic_layers/test_view.py | 75 +-
superset-embedded-sdk/package-lock.json | 144 +-
superset-embedded-sdk/package.json | 6 +-
.../src/superset_extensions_cli/cli.py | 7 +-
.../templates/frontend/package.json.j2 | 8 +-
superset-extensions-cli/tests/test_cli_build.py | 4 +-
.../i18n-strings/index.js} | 116 +-
.../i18n-strings}/no-eager-t-in-config.test.ts | 13 +-
.../i18n-strings}/no-template-vars.test.ts | 12 +-
.../i18n-strings}/package.json | 9 +-
.../index.ts => custom-lint-rules/icons/index.js} | 61 +-
.../icons}/no-fontawesome.test.ts | 13 +-
.../icons}/package.json | 9 +-
.../theme-colors/colors.js} | 7 +-
.../theme-colors/index.js} | 111 +-
.../theme-colors/no-literal-colors.test.ts | 81 +
.../theme-colors}/package.json | 12 +-
superset-frontend/eslint.config.minimal.js | 130 -
superset-frontend/jest.config.js | 5 +-
superset-frontend/oxlint.custom-lint-rules.mts | 121 +
superset-frontend/oxlint.json | 20 +-
superset-frontend/package-lock.json | 1946 +------
superset-frontend/package.json | 50 +-
.../src/shared-controls/dndControls.tsx | 1 +
.../src/shared-controls/matrixifyControls.tsx | 1 +
.../superset-ui-chart-controls/src/utils/index.ts | 1 +
.../src/utils/isServerPaginationUnsupported.ts | 70 +
.../packages/superset-ui-core/package.json | 2 +-
.../components/CachedLabel/TooltipContent.test.tsx | 25 +
.../src/components/CachedLabel/TooltipContent.tsx | 21 +-
.../src/components/CachedLabel/index.tsx | 14 +-
.../src/components/CachedLabel/types.ts | 3 +
.../superset-ui-core/src/components/index.ts | 6 +-
.../src/connection/SupersetClientClass.ts | 31 +-
.../superset-ui-core/src/query/buildQueryObject.ts | 10 +-
.../superset-ui-core/src/query/processFilters.ts | 3 +
.../src/query/types/QueryResponse.ts | 8 +
.../test/connection/SupersetClientClass.test.ts | 27 +
.../test/query/buildQueryObject.test.ts | 76 +-
.../components/modals/EditDatasetModal.ts | 7 +-
.../src/controlPanel.tsx | 50 +-
.../test/buildQuery.test.ts | 23 +
.../test/controlPanel.test.tsx | 364 ++
.../scripts/Country Map GeoJSON Generator.ipynb | Bin 227629 -> 228908 bytes
.../plugin-chart-country-map/src/CountryMap.ts | 7 +-
.../src/ReactCountryMap.tsx | 5 +-
.../src/countries/south_africa.geojson | Bin 57043 -> 57075 bytes
.../test/south_africa.geojson.test.ts | 57 +
.../src/Bubble/EchartsBubble.tsx | 137 +-
.../plugin-chart-echarts/src/Bubble/constants.ts | 3 +-
.../plugin-chart-echarts/src/Bubble/crossFilter.ts | 226 +
.../plugin-chart-echarts/src/Bubble/index.ts | 8 +-
.../src/Bubble/transformProps.ts | 39 +-
.../plugin-chart-echarts/src/Bubble/types.ts | 9 +-
.../src/Graph/transformProps.ts | 51 +-
.../test/Bubble/EchartsBubble.test.tsx | 335 ++
.../test/Bubble/crossFilter.test.ts | 129 +
.../test/Bubble/transformProps.test.ts | 134 +
.../test/Bullet/buildQuery.test.ts | 15 +
.../test/Bullet/transformProps.test.ts | 172 +-
.../test/Graph/categoryIdentity.test.ts | 398 ++
.../test/Graph/transformProps.test.ts | 38 +
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../plugin-chart-table/src/DataTable/DataTable.tsx | 9 +
.../plugin-chart-table/src/controlPanel.tsx | 50 +-
.../test/DataTable/DataTable.test.tsx | 31 +
.../plugin-chart-table/test/buildQuery.test.ts | 53 +
.../plugin-chart-table/test/controlPanel.test.tsx | 546 +-
.../plugins/preset-chart-deckgl/package.json | 2 +-
.../src/layers/Geojson/Geojson.test.tsx | 22 +
superset-frontend/scripts/check-custom-rules.js | 6 +-
.../scripts/internal/oxlint-metrics-uploader.js | 174 +-
.../fixtures/mockSemanticDashboardDatasources.ts | 177 +
.../spec/scripts/oxlint-metrics-uploader.test.ts | 327 +-
.../ExploreCtasResultsButton.test.tsx | 11 +-
.../src/components/Chart/Chart.test.tsx | 26 +
.../DetailsPanel/DetailsPanel.test.tsx | 19 +
.../components/FiltersBadge/DetailsPanel/index.tsx | 22 +
.../components/FiltersBadge/FiltersBadge.test.tsx | 40 +
.../dashboard/components/FiltersBadge/index.tsx | 20 +-
.../RefreshFrequencySelect.test.tsx | 261 +
.../RefreshFrequency/RefreshFrequencySelect.tsx | 147 +-
.../dashboard/components/RefreshFrequency/index.ts | 3 +
.../components/RefreshIntervalModal.test.tsx | 43 +
.../FilterControls/FilterControls.test.tsx | 65 +
.../FilterBar/FilterControls/FilterControls.tsx | 12 +-
.../FilterBar/FilterControls/FilterValue.test.tsx | 53 +
.../FilterBar/FilterControls/FilterValue.tsx | 16 +-
.../ColumnSelect.requestLifetime.test.tsx | 155 +
.../FiltersConfigForm/ColumnSelect.tsx | 38 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 338 +-
.../FiltersConfigForm/getControlItemsMap.test.tsx | 19 +-
.../FiltersConfigForm/getControlItemsMap.tsx | 3 +-
.../FiltersConfigForm/utils.test.ts | 120 +-
.../FiltersConfigModal/FiltersConfigForm/utils.ts | 48 +-
.../FiltersConfigModal.semanticDefault.test.tsx | 1173 +++++
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 72 +-
.../nativeFilters/FiltersConfigModal/types.ts | 4 +
.../components/nativeFilters/selectors.test.ts | 71 +
.../components/nativeFilters/selectors.ts | 8 +-
.../src/explore/components/ChartPills.test.tsx | 134 +
.../src/explore/components/ChartPills.tsx | 36 +-
.../src/explore/components/Control.test.tsx | 20 +-
.../src/explore/components/ControlHeader.test.tsx | 92 +-
.../src/explore/components/ControlHeader.tsx | 37 +-
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 160 +
.../components/ExploreChartHeader/index.tsx | 37 +-
.../src/explore/components/SaveModal.test.tsx | 55 +
.../src/explore/components/SaveModal.tsx | 15 +-
.../components/controls/CheckboxControl.test.tsx | 146 +-
.../components/controls/CheckboxControl.tsx | 73 +-
.../CollectionControl/CollectionControl.test.tsx | 14 +-
.../ContourPopoverControl-unused-fields.test.tsx | 60 +
.../ContourControl/ContourPopoverControl.tsx | 4 +-
.../DndAdhocFilterOption.tsx | 3 +
.../DndFilterSelect.test.tsx | 76 +-
.../DndColumnSelectControl/DndFilterSelect.tsx | 6 +
.../FilterControl/AdhocFilterControl/index.tsx | 15 +-
.../FilterControl/AdhocFilterEditPopover/index.tsx | 3 +
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 175 +-
.../index.tsx | 62 +-
.../FilterControl/AdhocFilterOption/index.tsx | 3 +
.../AdhocFilterPopoverTrigger/index.tsx | 3 +
.../controls/MatrixifyDimensionControl.test.tsx | 72 +-
.../controls/MatrixifyDimensionControl.tsx | 25 +-
.../components/controls/XAxisSortControl.test.tsx | 80 +
.../components/controls/XAxisSortControl.tsx | 10 +-
superset-frontend/src/explore/controls.tsx | 8 +-
.../src/explore/exploreUtils/index.ts | 7 +-
.../src/explore/reducers/exploreReducer.test.ts | 26 +
.../src/explore/reducers/exploreReducer.ts | 15 +-
.../src/features/alerts/AlertReportModal.test.tsx | 1128 +++++
.../src/features/alerts/AlertReportModal.tsx | 338 +-
.../semanticLayers/MultiEnumControl.test.tsx | 36 +
.../semanticLayers/SemanticLayerModal.test.tsx | 410 +-
.../features/semanticLayers/SemanticLayerModal.tsx | 97 +-
.../semanticLayers/jsonFormsAntdRenderers.test.tsx | 269 +
.../features/semanticLayers/jsonFormsHelpers.tsx | 139 +-
.../semanticViews/AddSemanticViewModal.test.tsx | 953 +++-
.../semanticViews/AddSemanticViewModal.tsx | 290 +-
.../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} | 18 +-
.../src/filters/components/Range/transformProps.ts | 2 +-
.../components/Select/SelectFilterPlugin.test.tsx | 346 +-
.../components/Select/SelectFilterPlugin.tsx | 178 +-
.../DatabaseList.semanticLayerDelete.test.tsx | 51 +-
.../DatasetList/DatasetList.behavior.test.tsx | 101 +
superset-frontend/src/pages/DatasetList/index.tsx | 38 +-
.../pages/ForgotPassword/ForgotPassword.test.tsx | 157 +
.../src/pages/ForgotPassword/index.tsx | 168 +
superset-frontend/src/pages/Login/Login.test.tsx | 39 +
superset-frontend/src/pages/Login/index.tsx | 39 +-
.../XAxisSortControl.tsx => pages/Login/styles.ts} | 44 +-
.../src/pages/ResetPassword/ResetPassword.test.tsx | 301 ++
.../src/pages/ResetPassword/index.tsx | 285 ++
superset-frontend/src/types/Chart.ts | 1 +
.../src/utils/semanticViewStructure.test.ts | 50 +
.../src/utils/semanticViewStructure.ts | 2 +-
superset-frontend/src/views/routePaths.ts | 2 +
superset-frontend/src/views/routes.test.tsx | 10 +
superset-frontend/src/views/routes.tsx | 21 +
superset-frontend/tsconfig.json | 2 +-
superset-websocket/package-lock.json | 320 +-
superset-websocket/package.json | 4 +-
superset/charts/api.py | 12 +-
superset/charts/data/api.py | 33 +-
superset/charts/schemas.py | 16 +-
superset/commands/chart/update.py | 10 +
superset/commands/chart/utils.py | 9 +
superset/commands/chart/warm_up_cache.py | 26 +-
superset/commands/dashboard/exceptions.py | 4 +
superset/commands/dashboard/restore.py | 132 +
superset/commands/dashboard/update.py | 55 +-
superset/commands/report/execute.py | 76 +-
superset/commands/restore.py | 7 +-
superset/commands/security/exceptions.py | 15 +
superset/commands/security/password_recovery.py | 315 ++
superset/commands/security/reset.py | 3 +-
superset/commands/semantic_layer/delete.py | 243 +
superset/commands/semantic_layer/exceptions.py | 28 +-
superset/commands/semantic_layer/update.py | 4 +
superset/common/query_actions.py | 1 +
superset/common/query_context_factory.py | 1 +
superset/common/query_context_processor.py | 29 +-
superset/common/query_object.py | 28 +
superset/common/utils/query_cache_manager.py | 9 +-
superset/config.py | 33 +
superset/connectors/sqla/models.py | 26 +-
superset/connectors/sqla/utils.py | 2 +-
superset/constants.py | 39 +
superset/coordination/cache_backend.py | 72 +
superset/daos/chart.py | 7 +-
superset/daos/dashboard.py | 310 +-
superset/daos/datasource.py | 15 +-
superset/daos/key_value.py | 29 +-
superset/dashboards/api.py | 14 +
superset/dataframe.py | 4 +
superset/datasource/api.py | 192 +-
superset/db_engine_specs/README.md | 1 +
superset/db_engine_specs/aws_iam.py | 42 +-
superset/db_engine_specs/base.py | 35 +
superset/db_engine_specs/bigquery.py | 63 +
superset/db_engine_specs/clickhouse.py | 80 +-
superset/db_engine_specs/databricks.py | 27 +-
superset/db_engine_specs/hive.py | 18 +-
superset/db_engine_specs/lib.py | 11 +
superset/db_engine_specs/postgres.py | 3 +-
superset/db_engine_specs/snowflake.py | 18 +-
superset/db_engine_specs/spark.py | 6 +-
superset/explore/api.py | 5 +
superset/explore/form_data/api.py | 9 +-
superset/explore/permalink/api.py | 5 +-
superset/explore/utils.py | 6 +
superset/initialization/__init__.py | 109 +-
superset/key_value/types.py | 4 +
superset/mcp_service/CLAUDE.md | 5 +-
superset/mcp_service/__init__.py | 10 +
superset/mcp_service/app.py | 4 +-
superset/mcp_service/caching.py | 2 +-
superset/mcp_service/catalog/schemas.py | 12 +-
superset/mcp_service/catalog/tool/get_catalog.py | 46 +-
superset/mcp_service/chart/chart_helpers.py | 75 +-
superset/mcp_service/chart/chart_utils.py | 859 +++-
superset/mcp_service/chart/compile.py | 314 +-
superset/mcp_service/chart/datasource_resolver.py | 412 ++
superset/mcp_service/chart/plugin.py | 55 +-
superset/mcp_service/chart/plugins/__init__.py | 3 +
superset/mcp_service/chart/plugins/big_number.py | 78 +-
superset/mcp_service/chart/plugins/bullet.py | 596 +++
superset/mcp_service/chart/plugins/gantt.py | 1 +
superset/mcp_service/chart/plugins/geographic.py | 2 +
.../mcp_service/chart/plugins/mixed_timeseries.py | 15 +
superset/mcp_service/chart/plugins/table.py | 20 +
superset/mcp_service/chart/plugins/waterfall.py | 15 +
superset/mcp_service/chart/plugins/xy.py | 55 +-
superset/mcp_service/chart/preview_utils.py | 1131 ++++-
superset/mcp_service/chart/query_result.py | 218 +-
.../mcp_service/chart/resources/chart_configs.py | 45 +
superset/mcp_service/chart/schemas.py | 805 ++-
superset/mcp_service/chart/tool/generate_chart.py | 171 +-
superset/mcp_service/chart/tool/get_chart_data.py | 88 +-
.../mcp_service/chart/tool/get_chart_preview.py | 64 +-
.../chart/tool/get_chart_type_schema.py | 25 +-
superset/mcp_service/chart/tool/list_charts.py | 4 +-
superset/mcp_service/chart/tool/update_chart.py | 506 +-
.../mcp_service/chart/tool/update_chart_preview.py | 1 +
.../chart/validation/dataset_validator.py | 36 +
superset/mcp_service/chart/validation/pipeline.py | 73 +-
superset/mcp_service/dashboard/permalink.py | 6 +-
superset/mcp_service/dashboard/schemas.py | 10 +-
.../dashboard/tool/apply_dashboard_filters.py | 390 +-
.../dashboard/tool/duplicate_dashboard.py | 16 +-
.../dashboard/tool/restore_dashboard.py | 14 +-
superset/mcp_service/dataset_scope.py | 146 +-
.../explore/tool/generate_explore_link.py | 151 +-
superset/mcp_service/mcp_config.py | 37 +-
superset/mcp_service/middleware.py | 6 +-
.../tool/get_compatible_dimensions.py | 50 +-
.../semantic_layer/tool/get_compatible_metrics.py | 50 +-
.../mcp_service/semantic_layer/tool/get_table.py | 10 +
.../semantic_layer/tool/list_metrics.py | 13 +-
superset/mcp_service/server.py | 93 +-
superset/mcp_service/simple_proxy.py | 2 +-
superset/mcp_service/utils/query_utils.py | 18 +-
superset/models/dashboard.py | 88 +-
superset/models/helpers.py | 30 +-
superset/models/slice.py | 23 +-
superset/reports/notifications/slack_mixin.py | 4 +-
superset/security/api.py | 214 +-
superset/security/manager.py | 43 +-
superset/security/password_change.py | 9 +-
superset/security/password_recovery.py | 316 ++
superset/semantic_layers/access.py | 50 +
superset/semantic_layers/api.py | 143 +-
superset/semantic_layers/cache.py | 496 ++
superset/semantic_layers/cache_coordination.py | 240 +
superset/semantic_layers/cache_host.py | 248 +
superset/semantic_layers/cache_identity.py | 336 ++
superset/semantic_layers/cache_policy.py | 417 ++
superset/semantic_layers/cache_repository.py | 453 ++
superset/semantic_layers/cache_transform.py | 268 +
superset/semantic_layers/cache_types.py | 133 +
superset/semantic_layers/exceptions.py | 127 +
superset/semantic_layers/labels.py | 7 +-
superset/semantic_layers/mapper.py | 307 +-
superset/semantic_layers/members.py | 52 +
superset/semantic_layers/models.py | 77 +-
superset/subjects/utils.py | 19 +-
superset/superset_typing.py | 10 +-
superset/translations/messages.pot | 179 +-
superset/utils/cache_manager.py | 17 +
superset/utils/core.py | 4 +
superset/utils/csv.py | 14 +-
superset/utils/error_sanitization.py | 109 +-
superset/utils/network.py | 23 +-
superset/utils/pandas_postprocessing/geography.py | 8 +-
superset/utils/pandas_postprocessing/rename.py | 11 +-
superset/utils/schema.py | 60 +
superset/views/auth.py | 22 +-
superset/views/base.py | 2 +
superset/views/core.py | 2 +-
superset/views/datasource/views.py | 176 +-
superset/views/error_handling.py | 11 +-
superset/views/filters.py | 5 +-
tests/integration_tests/charts/api_tests.py | 2 +
.../charts/semantic_metadata_authz_tests.py | 13 +-
.../charts/semantic_save_tests.py | 46 +
tests/integration_tests/dashboards/api_tests.py | 440 +-
tests/integration_tests/dashboards/dao_tests.py | 120 +-
tests/integration_tests/datasource/api_tests.py | 36 +-
tests/integration_tests/reports/commands_tests.py | 61 +-
.../security/row_level_security_tests.py | 69 +
tests/integration_tests/security_tests.py | 8 +
.../semantic_layers/api_flag_test.py | 423 ++
.../semantic_layers/cache_coordination_tests.py | 200 +
.../db_engine_specs/_bigquery_container.py | 79 +
.../db_engine_specs/test_bigquery.py | 183 +
tests/unit_tests/charts/test_chart_data_api.py | 87 +-
tests/unit_tests/charts/test_schemas.py | 51 +-
tests/unit_tests/commands/chart/create_test.py | 2 +
.../commands/chart/test_warm_up_cache.py | 135 +
tests/unit_tests/commands/chart/update_test.py | 2 +
.../dashboard/restore_semantic_filters_test.py | 363 ++
.../unit_tests/commands/dashboard/restore_test.py | 3 +
.../deletion_retention/test_purge_chart_detach.py | 2 +-
tests/unit_tests/commands/report/execute_test.py | 195 +-
.../commands/semantic_layer/delete_test.py | 634 ++-
.../semantic_layer/view_data_access_test.py | 148 +
tests/unit_tests/common/test_query_actions.py | 31 +-
.../unit_tests/common/test_query_cache_manager.py | 18 +
.../common/test_query_context_processor.py | 115 +-
.../common/test_query_context_processor_timing.py | 79 +
tests/unit_tests/config_test.py | 10 +-
tests/unit_tests/conftest.py | 17 +
tests/unit_tests/connectors/sqla/models_test.py | 87 +-
tests/unit_tests/connectors/sqla/utils_test.py | 38 +
.../unit_tests/coordination/test_cache_backend.py | 189 +
tests/unit_tests/dao/dashboard_test.py | 551 +-
tests/unit_tests/dao/key_value_test.py | 1 +
.../dao/test_copy_dashboard_legacy_ids.py | 213 +
tests/unit_tests/daos/test_chart_dao.py | 59 +
tests/unit_tests/dashboards/datasets_test.py | 2 +
tests/unit_tests/dataframe_test.py | 86 +
tests/unit_tests/db_engine_specs/test_aws_iam.py | 61 +
tests/unit_tests/db_engine_specs/test_base.py | 11 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 225 +
.../unit_tests/db_engine_specs/test_databricks.py | 180 +-
.../test_extended_aggregations_unverified.py | 8 +-
tests/unit_tests/db_engine_specs/test_lib.py | 31 +-
tests/unit_tests/db_engine_specs/test_snowflake.py | 25 +
tests/unit_tests/explore/utils_test.py | 2 +
tests/unit_tests/initialization_test.py | 73 +
.../mcp_service/catalog/tool/test_get_catalog.py | 238 +-
.../mcp_service/chart/test_bullet_chart.py | 5308 ++++++++++++++++++++
.../mcp_service/chart/test_bullet_tool_paths.py | 2337 +++++++++
.../mcp_service/chart/test_chart_helpers.py | 68 +-
.../chart/test_chart_plugin_contract.py | 85 +-
.../mcp_service/chart/test_chart_target_schemas.py | 213 +
.../mcp_service/chart/test_chart_utils.py | 32 +
tests/unit_tests/mcp_service/chart/test_compile.py | 43 +
.../chart/test_dashboard_time_binding.py | 90 +
.../mcp_service/chart/test_datasource_resolver.py | 622 +++
.../mcp_service/chart/test_gantt_chart.py | 35 +
.../mcp_service/chart/test_gauge_chart.py | 98 +-
.../chart/test_live_chart_datasource.py | 2 +
.../chart/test_native_chart_regressions.py | 351 ++
...ative_form_data_and_dataset_rebind_contracts.py | 4 +-
.../mcp_service/chart/test_response_preflight.py | 4 +-
.../test_review_query_and_preview_regressions.py | 92 +
.../mcp_service/chart/test_sunburst_chart.py | 5 +
.../tool/test_generate_chart_semantic_view.py | 412 ++
.../mcp_service/chart/tool/test_get_chart_data.py | 53 +-
.../chart/tool/test_get_chart_preview.py | 7 +-
.../mcp_service/chart/tool/test_get_chart_sql.py | 6 +-
.../mcp_service/chart/tool/test_list_charts.py | 148 +
.../chart/tool/test_saved_chart_datasource.py | 24 +-
.../mcp_service/chart/tool/test_update_chart.py | 512 +-
.../chart/tool/test_update_chart_preview.py | 77 +-
.../chart/tool/test_update_chart_rebind.py | 1006 ++++
.../mcp_service/dashboard/test_permalink.py | 40 +-
.../dashboard/tool/test_apply_dashboard_filters.py | 1299 ++++-
.../dashboard/tool/test_duplicate_dashboard.py | 59 +-
.../dashboard/tool/test_get_dashboard_datasets.py | 2 +
.../dashboard/tool/test_get_dashboard_layout.py | 4 +-
.../dashboard/tool/test_restore_dashboard.py | 3 +
.../test_generate_explore_link_semantic_view.py | 245 +
.../mcp_service/native_tool_inventory.json | 108 +-
.../mcp_service/semantic_layer/test_flag_off.py | 203 +
.../test_compatibility_selection_validation.py | 139 +
.../tool/test_get_compatible_dimensions.py | 12 +
.../tool/test_get_compatible_metrics.py | 11 +
.../semantic_layer/tool/test_get_table.py | 69 +
.../semantic_layer/tool/test_list_metrics.py | 7 +
.../system/resources/test_schema_discovery.py | 2 +-
.../mcp_service/system/tool/test_get_schema.py | 11 +
.../mcp_service/test_chart_tool_inventory.py | 42 +-
tests/unit_tests/mcp_service/test_dataset_scope.py | 247 +-
tests/unit_tests/mcp_service/test_mcp_server.py | 28 +
tests/unit_tests/mcp_service/test_middleware.py | 34 +-
.../mcp_service/test_middleware_logging.py | 2 +-
tests/unit_tests/mcp_service/test_simple_proxy.py | 47 +
.../unit_tests/mcp_service/test_tool_inventory.py | 6 +-
.../mcp_service/test_tool_search_transform.py | 227 +-
.../mcp_service/test_validation_contract.py | 52 +-
.../mcp_service/test_worker_metadata_pool.py | 6 +-
tests/unit_tests/models/dashboard_test.py | 191 +
tests/unit_tests/models/helpers_test.py | 174 +
tests/unit_tests/models/slice_test.py | 87 +
.../pandas_postprocessing/test_geography.py | 81 +
.../pandas_postprocessing/test_rename.py | 96 +
tests/unit_tests/queries/query_object_test.py | 29 +
.../reports/notifications/slack_tests.py | 20 +-
tests/unit_tests/scripts/change_detector_test.py | 16 +
tests/unit_tests/security/manager_test.py | 134 +-
.../unit_tests/security/test_password_recovery.py | 1067 ++++
.../security/test_password_recovery_rate_limit.py | 71 +
tests/unit_tests/semantic_layers/api_test.py | 84 +
.../semantic_layers/cache_coordination_test.py | 525 ++
.../unit_tests/semantic_layers/cache_host_test.py | 369 ++
.../semantic_layers/cache_identity_test.py | 285 ++
.../semantic_layers/cache_integration_test.py | 998 ++++
.../semantic_layers/cache_or_filters_test.py | 220 +
.../semantic_layers/cache_policy_test.py | 963 ++++
.../semantic_layers/cache_repository_test.py | 929 ++++
tests/unit_tests/semantic_layers/cache_test.py | 956 ++++
.../semantic_layers/cache_transform_test.py | 223 +
tests/unit_tests/semantic_layers/conftest.py | 92 +
.../semantic_layers/import_export_test.py | 22 +
tests/unit_tests/semantic_layers/labels_test.py | 13 +
tests/unit_tests/semantic_layers/layer_test.py | 91 +
tests/unit_tests/semantic_layers/mapper_test.py | 196 +-
tests/unit_tests/semantic_layers/members_test.py | 83 +
.../semantic_layers/metric_filter_test.py | 288 ++
tests/unit_tests/semantic_layers/models_test.py | 227 +-
.../semantic_layers/null_filters_test.py | 339 ++
.../semantic_layers/query_errors_test.py | 567 +++
.../semantic_layers/simple_cache_clear_test.py | 11 +-
tests/unit_tests/semantic_layers/test_access.py | 42 +
.../semantic_layers/test_runtime_flag.py | 216 +
.../semantic_layers/values_endpoint_test.py | 180 +
.../soft_delete/test_restore_purge_hoist.py | 13 +
.../subjects/test_creator_group_call_sites.py | 22 +-
tests/unit_tests/tasks/test_async_queries.py | 31 +
tests/unit_tests/utils/test_cache_manager.py | 33 +
tests/unit_tests/utils/test_error_sanitization.py | 132 +-
tests/unit_tests/utils/test_network.py | 29 +
tests/unit_tests/utils/test_schema.py | 138 +
.../versioning/test_restore_datasource_race.py | 4 +
.../versioning/test_restore_missing_datasource.py | 6 +
tests/unit_tests/views/datasource/views_test.py | 559 ++-
tests/unit_tests/views/test_error_handling.py | 38 +
538 files changed, 61775 insertions(+), 5010 deletions(-)
create mode 100644 docs/developer_docs/contributing/translation-guide.md
create mode 100644 docs/developer_docs/extensions/semantic-filters.md
create mode 100644 docs/developer_docs/semantic-query-errors.md
create mode 100644 docs/docs/using-superset/semantic-layer-connections.mdx
create mode 100644 docs/sip/pivot-table-aggregation-parity.md
create mode 100644 docs/src/components/databases/DatabaseLogo.tsx
create mode 100644 docs/static/img/databases/clickhouse-dark.svg
create mode 100644 docs/static/img/databases/clickhouse-mark-dark.svg
create mode 100644 docs/static/img/databases/clickhouse-mark.svg
create mode 100644 docs/static/img/databases/clickhouse.svg
delete mode 100755 scripts/eslint.sh
rename superset-frontend/{eslint-rules/eslint-plugin-i18n-strings/index.ts => custom-lint-rules/i18n-strings/index.js} (69%)
rename superset-frontend/{eslint-rules/eslint-plugin-i18n-strings => custom-lint-rules/i18n-strings}/no-eager-t-in-config.test.ts (92%)
rename superset-frontend/{eslint-rules/eslint-plugin-i18n-strings => custom-lint-rules/i18n-strings}/no-template-vars.test.ts (88%)
rename superset-frontend/{eslint-rules/eslint-plugin-i18n-strings => custom-lint-rules/i18n-strings}/package.json (64%)
rename superset-frontend/{eslint-rules/eslint-plugin-icons/index.ts => custom-lint-rules/icons/index.js} (66%)
rename superset-frontend/{eslint-rules/eslint-plugin-icons => custom-lint-rules/icons}/no-fontawesome.test.ts (88%)
rename superset-frontend/{eslint-rules/eslint-plugin-icons => custom-lint-rules/icons}/package.json (66%)
rename superset-frontend/{eslint-rules/eslint-plugin-theme-colors/colors.ts => custom-lint-rules/theme-colors/colors.js} (97%)
rename superset-frontend/{eslint-rules/eslint-plugin-theme-colors/index.ts => custom-lint-rules/theme-colors/index.js} (67%)
create mode 100644 superset-frontend/custom-lint-rules/theme-colors/no-literal-colors.test.ts
rename superset-frontend/{eslint-rules/eslint-plugin-theme-colors => custom-lint-rules/theme-colors}/package.json (54%)
delete mode 100644 superset-frontend/eslint.config.minimal.js
create mode 100644 superset-frontend/oxlint.custom-lint-rules.mts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/isServerPaginationUnsupported.ts
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/south_africa.geojson.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Bubble/crossFilter.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Bubble/EchartsBubble.test.tsx
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Bubble/crossFilter.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Graph/categoryIdentity.test.ts
create mode 100644 superset-frontend/spec/fixtures/mockSemanticDashboardDatasources.ts
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.requestLifetime.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.semanticDefault.test.tsx
create mode 100644 superset-frontend/src/explore/components/ChartPills.test.tsx
create mode 100644 superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverControl-unused-fields.test.tsx
create mode 100644 superset-frontend/src/explore/components/controls/XAxisSortControl.test.tsx
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/{packages/superset-ui-core/src/components/CachedLabel/types.ts => src/filters/components/Range/isSemanticRange.ts} (64%)
create mode 100644 superset-frontend/src/pages/ForgotPassword/ForgotPassword.test.tsx
create mode 100644 superset-frontend/src/pages/ForgotPassword/index.tsx
copy superset-frontend/src/{explore/components/controls/XAxisSortControl.tsx => pages/Login/styles.ts} (55%)
create mode 100644 superset-frontend/src/pages/ResetPassword/ResetPassword.test.tsx
create mode 100644 superset-frontend/src/pages/ResetPassword/index.tsx
create mode 100644 superset/commands/security/password_recovery.py
create mode 100644 superset/mcp_service/chart/datasource_resolver.py
create mode 100644 superset/mcp_service/chart/plugins/bullet.py
create mode 100644 superset/security/password_recovery.py
create mode 100644 superset/semantic_layers/access.py
create mode 100644 superset/semantic_layers/cache.py
create mode 100644 superset/semantic_layers/cache_coordination.py
create mode 100644 superset/semantic_layers/cache_host.py
create mode 100644 superset/semantic_layers/cache_identity.py
create mode 100644 superset/semantic_layers/cache_policy.py
create mode 100644 superset/semantic_layers/cache_repository.py
create mode 100644 superset/semantic_layers/cache_transform.py
create mode 100644 superset/semantic_layers/cache_types.py
create mode 100644 superset/semantic_layers/exceptions.py
create mode 100644 superset/semantic_layers/members.py
create mode 100644 tests/integration_tests/semantic_layers/api_flag_test.py
create mode 100644 tests/integration_tests/semantic_layers/cache_coordination_tests.py
create mode 100644 tests/testcontainers/db_engine_specs/_bigquery_container.py
create mode 100644 tests/testcontainers/db_engine_specs/test_bigquery.py
create mode 100644 tests/unit_tests/commands/chart/test_warm_up_cache.py
create mode 100644 tests/unit_tests/commands/dashboard/restore_semantic_filters_test.py
create mode 100644 tests/unit_tests/commands/semantic_layer/view_data_access_test.py
create mode 100644 tests/unit_tests/dao/test_copy_dashboard_legacy_ids.py
create mode 100644 tests/unit_tests/daos/test_chart_dao.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_bullet_chart.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_bullet_tool_paths.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_chart_target_schemas.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_datasource_resolver.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_native_chart_regressions.py
create mode 100644 tests/unit_tests/mcp_service/chart/tool/test_generate_chart_semantic_view.py
create mode 100644 tests/unit_tests/mcp_service/chart/tool/test_update_chart_rebind.py
create mode 100644 tests/unit_tests/mcp_service/explore/tool/test_generate_explore_link_semantic_view.py
create mode 100644 tests/unit_tests/mcp_service/semantic_layer/test_flag_off.py
create mode 100644 tests/unit_tests/mcp_service/semantic_layer/tool/test_compatibility_selection_validation.py
create mode 100644 tests/unit_tests/mcp_service/test_simple_proxy.py
create mode 100644 tests/unit_tests/security/test_password_recovery.py
create mode 100644 tests/unit_tests/security/test_password_recovery_rate_limit.py
create mode 100644 tests/unit_tests/semantic_layers/cache_coordination_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_host_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_identity_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_integration_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_or_filters_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_policy_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_repository_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_test.py
create mode 100644 tests/unit_tests/semantic_layers/cache_transform_test.py
create mode 100644 tests/unit_tests/semantic_layers/conftest.py
create mode 100644 tests/unit_tests/semantic_layers/layer_test.py
create mode 100644 tests/unit_tests/semantic_layers/members_test.py
create mode 100644 tests/unit_tests/semantic_layers/metric_filter_test.py
create mode 100644 tests/unit_tests/semantic_layers/null_filters_test.py
create mode 100644 tests/unit_tests/semantic_layers/query_errors_test.py
create mode 100644 tests/unit_tests/semantic_layers/test_access.py
create mode 100644 tests/unit_tests/semantic_layers/test_runtime_flag.py
create mode 100644 tests/unit_tests/utils/test_schema.py