You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by vi...@apache.org on 2026/09/20 18:00:45 UTC

(superset) branch 7.0 updated (0ec93ea42fa -> c636115d403)

This is an automated email from the ASF dual-hosted git repository.

villebro pushed a change to branch 7.0
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 0ec93ea42fa chore: format backported dataset API
     new c19cf2bd2ed fix(versioning): version-history panel design fidelity (#44181)
     new bdcfd754ac9 fix(mcp): advertise typed tool outputs (#43828)
     new 446f2f9a264 fix(theme): do not suppress a dashboard theme when the forwarded config equals the workspace default (#44173)
     new c217c9b381f fix(chart-data): keep non-numeric columns out of contribution post-processing (#43203)
     new ac12e37798c fix(histogram): compare groupby membership using column labels (#43219)
     new 60230e260bd fix(mcp): downgrade synthetic tool ToolError log level to WARNING (SC-120340) (#44171)
     new dfd0b3850b7 fix(datasets): catch MultipleResultsFound in get_or_create's schema-scoped lookup (#43725)
     new fe93e493049 fix(api): align sort and prophet option schemas with their operations (#43206)
     new 0048e9e8e40 fix(chart): include Decimal metrics in contribution totals (#43222)
     new ac74dc8354d fix(themes): render brand spinner SVG via <img> data URI (#43504)
     new db1b997b9d3 fix(security): handle self-referential catalog qualifiers (#43974)
     new 66f00fdcca2 fix(rls): match the RLS predicate lookup on case-normalized table identifiers (#43993)
     new c620ba713bb fix(mcp): bound chart_ids length in the generate-dashboard request (#44071)
     new 8c0995011fc fix(db): honor connect_args returned by adjust_engine_params (#44078)
     new c2741f2de7b fix(jinja): escape current_username/current_user_email like sibling macros (#44081)
     new 6be49d7a551 fix(sqla): run column metadata probe statement exactly once (#44242)
     new 9f2574d26fa fix(dashboard): require published for the read-gate's datasource fallback (#44093)
     new 47eb66376d5 fix(dashboard): keep Save enabled when the properties modal name is set (#44356)
     new e55bd52f305 fix(time-format): stop reading short digit-only strings as epoch offsets (#44352)
     new 0480534dee1 fix(charts): don't auto-migrate table charts to ag-grid-table on import unless enabled (#44151)
     new 38499ae3272 fix(versioning): scope stream_results to the activity SELECTs instead of mutating the session connection (#44261)
     new eefab414c26 fix(dataset): lock the If-Match validator's transaction-id read (#44091)
     new 93df0387a25 fix(dashboard): make system default/dark themes assignable to a dashboard (#44361)
     new 5391b3e77b6 fix(charts): align week-grain time comparison offsets to whole weeks (#43936)
     new d4cf550c72b fix(mypy): narrow chart.uuid before RestoreChartVersionCommand in restore tests (#44394)
     new 90d70d7feb6 fix(sqla): guard unprotected Jinja template rendering in ExploreMixin (#44172)
     new 9e1e477229d fix(versioning): refuse a version restore whose child history was pruned (sc-120012) (#44251)
     new 30c81f03e98 fix(mcp): return a structured Unsupported marker for semantic-view get_chart_sql (#44267)
     new e337377f682 fix(mcp): include semantic views in get_dashboard_datasets (#44269)
     new cf12231d03d fix(i18n): make module-level error constants lazy gettext (#44180)
     new e5d81d244aa fix(table): preserve semantic temporal column references (#44369)
     new 665007db447 fix(dashboard): resolve display-control and drill datasources by type, not id alone (#42539)
     new c688f54d123 fix(mcp): preserve dashboard filter values for restricted users (#44107)
     new 01dd2f247bd fix(query): resolve sub-day "Last <unit>" time_range shorthand (#44254)
     new 0e160a69ab1 fix(mcp): accept a time grain in get_table on semantic views (#44270)
     new d31bd3da66a fix(mcp): keep the default list_metrics page under the response-token cap (#44266)
     new 0fb37784415 fix(semantic-layers): mask nested and union secrets in layer configuration (#43827)
     new 7796a0f644c fix(datasets): return 400, not 500, for a body-less purge POST; point the database-delete refusal at the purge flow (#44264)
     new eb13c2b3f9c fix(charts): allow saving charts on semantic views (create/update rejected non-table datasource types) (#44416)
     new 28b249d13fa fix(semantic-layer): mapper honors the SemanticView ABC contract (#43886)
     new ce3103fb78f fix(versioning): map the restore registry guard's LookupError to 422 instead of 500 (#44253)
     new b38e8c99eba fix(mcp): pre-validate metric/dimension compatibility in semantic-view get_table (#44265)
     new ee9ef1744ae fix(mcp): rebuild full parent chains in dashboard layouts (#44405)
     new e7274ffa3da fix(databricks): prefer python-connector spec over legacy Hive spec for unrecognized drivers (#44449)
     new 779d5482694 fix(embedded): report content height independent of iframe height (#44313)
     new d26c7548383 fix(versioning): mount the dashboard version-history panel inside the content area, below the header (#44255)
     new 5cb9e3770be fix(presto): require PyHive 0.7 for SQLAlchemy 2 (#44285)
     new a20ea26fa7b fix(charts): type-aware datasource access parity for the chart list (#43848)
     new 08e958ca97e fix(semantic-layer): preserve independent source permissions (#43887)
     new 810e460bea7 fix(explore): anchor the add column/metric/filter popovers to their trigger (#44274)
     new c636115d403 test(versioning): mock the restore locking re-read in the #44253 LookupError tests (fixes red master) (#44445)

The 51 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 AGENTS.md                                          |   7 +
 UPDATING.md                                        |  51 ++
 docs/admin_docs/configuration/mcp-server.mdx       |  59 +-
 docs/docs/using-superset/exploring-data.mdx        |   5 +
 docs/src/data/databases.json                       |   1 +
 docs/static/resources/openapi.json                 |  61 +-
 pyproject.toml                                     |   2 +-
 .../src/time-format/utils/stringifyTimeInput.ts    |  21 +-
 .../time-format/utils/stringifyTimeInput.test.ts   |  28 +
 .../playwright/helpers/embeddedAppServer.ts        | 130 +++
 .../dashboard/version-history-placement.spec.ts    | 198 +++++
 .../tests/embedded/embedded-dashboard.spec.ts      | 129 +--
 .../tests/embedded/embedded-iframe-sizing.spec.ts  | 433 ++++++++++
 .../tests/embedded/pivot-collapse-state.spec.ts    |  93 +--
 .../src/Histogram/transformProps.ts                |   2 +-
 .../test/Histogram/transformProps.test.ts          | 112 +++
 .../src/react-pivottable/TableRenderers.tsx        |  15 +-
 .../test/react-pivottable/tableRenders.test.tsx    |  21 +
 .../plugins/plugin-chart-table/src/buildQuery.ts   |   6 +
 .../plugin-chart-table/test/buildQuery.test.ts     | 109 ++-
 .../ChartContextMenu/ChartContextMenu.test.tsx     |  80 ++
 .../Chart/DrillDetail/DrillDetailPane.test.tsx     |  31 +
 .../DashboardBuilder/DashboardBuilder.test.tsx     | 240 +++++-
 .../DashboardBuilder/DashboardBuilder.tsx          | 187 +++--
 .../src/dashboard/components/DashboardGrid.tsx     |   3 +-
 .../PropertiesModal.lateFieldMount.test.tsx        |  94 +++
 .../PropertiesModal/PropertiesModal.test.tsx       |  26 +
 .../dashboard/components/PropertiesModal/index.tsx |  16 +-
 .../FilterControls/GroupByFilterCard.test.tsx      | 330 +++++++-
 .../FilterBar/FilterControls/GroupByFilterCard.tsx | 192 +++--
 .../nativeFilters/FilterBar/Vertical.tsx           |  76 +-
 .../components/nativeFilters/FilterBar/index.tsx   |  16 +-
 .../nativeFilters/FilterBar/utils.test.ts          |  38 +
 .../components/nativeFilters/FilterBar/utils.ts    |  15 +
 .../FiltersConfigForm/ColumnSelect.tsx             |  27 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |  34 +-
 .../FiltersConfigForm/utils.test.ts                |  78 ++
 .../FiltersConfigModal/FiltersConfigForm/utils.ts  |  52 +-
 .../useDisplayControlDatasource.test.ts            | 192 +++++
 .../nativeFilters/useDisplayControlDatasource.ts   | 181 +++++
 .../util/embeddedLayout.ts}                        |  21 +-
 superset-frontend/src/embedded/api.test.ts         |  84 ++
 superset-frontend/src/embedded/api.tsx             |  65 +-
 .../ColorBreakpointPopoverTrigger.tsx              |   7 +-
 .../ContourControl/ContourPopoverTrigger.tsx       |   7 +-
 .../ControlPopover/PopoverTriggerAnchors.test.tsx  |  53 ++
 .../ColumnSelectPopoverTrigger.tsx                 |  10 +-
 .../DndColumnSelect.test.tsx                       |  37 +
 .../AdhocFilterPopoverTrigger/index.tsx            |  10 +-
 .../MetricControl/AdhocMetricPopoverTrigger.tsx    |  10 +-
 .../src/features/versionHistory/ActionRow.tsx      |  18 +-
 .../features/versionHistory/PreviewBanner.test.tsx |  17 +
 .../src/features/versionHistory/PreviewBanner.tsx  |  28 +-
 .../features/versionHistory/SaveGroupItem.test.tsx | 131 ++++
 .../src/features/versionHistory/SaveGroupItem.tsx  |  56 +-
 .../versionHistory/VersionHistoryPanel.test.tsx    |  29 +
 .../versionHistory/VersionHistoryPanel.tsx         |  15 +-
 .../src/hooks/apiResources/datasets.test.ts        |  84 ++
 .../src/hooks/apiResources/datasets.ts             |  66 +-
 .../DatabaseList.semanticLayerDelete.test.tsx      | 139 +++-
 superset-frontend/src/pages/DatabaseList/index.tsx | 166 ++--
 .../DatasetList.connectionPermissions.test.tsx     |  70 ++
 .../pages/DatasetList/DatasetList.testHelpers.tsx  |   1 +
 superset-frontend/src/pages/DatasetList/index.tsx  |   6 +-
 superset-frontend/src/theme/ThemeController.ts     |  21 +-
 .../src/theme/tests/ThemeController.test.ts        | 105 ++-
 .../src/utils/semanticViewStructure.test.ts        |  85 ++
 .../src/utils/semanticViewStructure.ts             | 129 +++
 superset/charts/api.py                             |   2 +
 superset/charts/filters.py                         |  61 +-
 superset/charts/schemas.py                         |  36 +-
 superset/commands/chart/create.py                  |  18 +-
 superset/commands/chart/importers/v1/utils.py      |  12 +-
 superset/commands/chart/update.py                  |  43 +-
 superset/commands/chart/utils.py                   |  12 +
 superset/commands/database/exceptions.py           |  10 +-
 superset/commands/semantic_layer/create.py         |   3 +-
 superset/commands/semantic_layer/update.py         |  63 +-
 superset/commands/semantic_layer/utils.py          |  56 ++
 superset/commands/version_restore.py               |  17 +-
 superset/common/query_context_processor.py         |  22 +-
 superset/connectors/sqla/models.py                 |  71 +-
 superset/connectors/sqla/utils.py                  |   1 -
 superset/core/mcp/core_mcp_injection.py            | 106 ++-
 superset/daos/version.py                           |   4 +
 superset/dashboards/filters.py                     |  46 +-
 superset/datasets/api.py                           | 144 +++-
 superset/datasource/api.py                         |   4 +-
 superset/db_engine_specs/base.py                   |  21 +
 superset/db_engine_specs/databricks.py             | 400 +++++-----
 superset/db_engine_specs/mssql.py                  | 122 +++
 superset/db_engine_specs/presto.py                 |   4 +
 superset/exceptions.py                             |  21 +-
 superset/explore/utils.py                          |  15 +
 superset/jinja_context.py                          |  18 +-
 superset/mcp_service/CLAUDE.md                     |  23 +-
 superset/mcp_service/PRODUCTION.md                 |   2 +-
 superset/mcp_service/__main__.py                   |  21 +-
 superset/mcp_service/app.py                        |   5 +-
 superset/mcp_service/chart/schemas.py              |  23 +-
 superset/mcp_service/chart/tool/get_chart_info.py  |  22 +-
 superset/mcp_service/chart/tool/get_chart_sql.py   |  51 +-
 .../chart/tool/get_chart_type_schema.py            |  18 +-
 .../mcp_service/chart/tool/update_chart_preview.py |   9 +-
 .../mcp_service/common/time_range_validation.py    |  32 +-
 .../mcp_service/dashboard/layout_validation.py     |  54 ++
 superset/mcp_service/dashboard/permalink.py        |   4 +-
 superset/mcp_service/dashboard/schemas.py          | 263 ++++++-
 .../tool/add_chart_to_existing_dashboard.py        |  33 +-
 .../dashboard/tool/duplicate_dashboard.py          |   6 +
 .../dashboard/tool/generate_dashboard.py           |  21 +-
 .../dashboard/tool/get_dashboard_datasets.py       |  21 +-
 .../dashboard/tool/get_dashboard_info.py           |  28 +-
 .../dashboard/tool/remove_chart_from_dashboard.py  |  13 +-
 .../mcp_service/dashboard/tool/update_dashboard.py |  14 +-
 .../mcp_service/dataset/tool/get_dataset_info.py   |  21 +-
 superset/mcp_service/mcp_config.py                 |  10 +-
 superset/mcp_service/middleware.py                 |  71 +-
 superset/mcp_service/semantic_layer/schemas.py     |  66 +-
 .../mcp_service/semantic_layer/tool/get_table.py   | 179 ++++-
 .../semantic_layer/tool/list_metrics.py            |   9 +-
 superset/mcp_service/server.py                     |  45 +-
 superset/mcp_service/utils/response_utils.py       |   9 +-
 superset/migrations/shared/migrate_viz/base.py     |   7 +
 .../migrations/shared/migrate_viz/processors.py    |   6 +
 superset/models/core.py                            |   1 +
 superset/models/dashboard.py                       |  30 +-
 superset/models/helpers.py                         | 197 ++++-
 superset/security/manager.py                       | 135 +++-
 superset/semantic_layers/api.py                    |  81 +-
 superset/semantic_layers/mapper.py                 |  31 +-
 superset/semantic_layers/masking.py                | 481 ++++++++++++
 superset/semantic_layers/models.py                 |   4 +-
 superset/sql/parse.py                              |  59 ++
 superset/sqllab/query_render.py                    |   9 +-
 superset/tasks/async_queries.py                    |   3 +-
 superset/templates/superset/spa.html               |  13 +-
 superset/translations/messages.pot                 |  14 +-
 superset/utils/core.py                             |   4 +-
 superset/utils/date_parser.py                      |  42 +-
 superset/utils/filters.py                          |  98 ++-
 .../utils/pandas_postprocessing/contribution.py    |  48 +-
 superset/utils/rls.py                              | 156 ++--
 superset/versioning/activity/queries.py            |  11 +-
 superset/versioning/api_helpers.py                 |  40 +-
 superset/versioning/baseline/__init__.py           |   2 +
 superset/versioning/baseline/shadow.py             |   5 +
 superset/versioning/changes/shadow_queries.py      |  11 +-
 superset/versioning/db_errors.py                   |  75 ++
 superset/versioning/queries.py                     | 194 ++++-
 superset/versioning/restore.py                     | 223 +++++-
 superset/views/base.py                             |  21 +-
 superset/views/base_api.py                         |  83 +-
 superset/views/core.py                             |  16 +-
 .../charts/semantic_save_tests.py                  | 140 ++++
 .../charts/version_restore_tests.py                |   3 +
 tests/integration_tests/datasets/api_tests.py      | 108 +++
 .../security/row_level_security_tests.py           |  33 +
 .../versioning/activity_write_after_read_tests.py  | 124 +++
 .../versioning/conditional_token_lock_tests.py     | 363 +++++++++
 .../versioning/restore_fails_closed_tests.py       | 621 +++++++++++++++
 .../charts/commands/importers/v1/utils_test.py     |  69 ++
 .../charts/semantic_view_chart_filter_test.py      | 481 ++++++++++++
 tests/unit_tests/charts/test_schemas.py            |  78 ++
 tests/unit_tests/commands/chart/create_test.py     |  54 +-
 tests/unit_tests/commands/chart/update_test.py     |  72 +-
 .../commands/semantic_layer/create_test.py         |  17 +-
 .../commands/semantic_layer/update_test.py         |  64 +-
 .../commands/test_base_restore_version_command.py  |  84 ++
 .../common/test_query_context_processor.py         | 117 +++
 tests/unit_tests/common/test_time_shifts.py        | 318 +++++++-
 tests/unit_tests/connectors/sqla/models_test.py    | 212 +++++
 tests/unit_tests/connectors/sqla/utils_test.py     |  56 +-
 .../dashboards/semantic_view_access_test.py        | 264 ++++++-
 tests/unit_tests/databases/commands/delete_test.py |  21 +-
 tests/unit_tests/datasets/api_tests.py             | 216 ++++-
 tests/unit_tests/db_engine_specs/test_base.py      |  18 +
 .../unit_tests/db_engine_specs/test_databricks.py  |  31 +
 tests/unit_tests/db_engine_specs/test_mssql.py     | 438 +++++++++++
 tests/unit_tests/db_engine_specs/test_presto.py    |  14 +-
 tests/unit_tests/explore/utils_test.py             |  65 ++
 tests/unit_tests/jinja_context_test.py             |  41 +
 .../mcp_service/chart/tool/test_get_chart_info.py  |  29 +-
 .../mcp_service/chart/tool/test_get_chart_sql.py   | 165 ++++
 .../chart/tool/test_update_chart_preview.py        |  48 +-
 .../common/test_time_range_validation.py           |  41 +-
 .../dashboard/test_dashboard_schemas.py            | 236 ++++++
 .../dashboard/test_layout_validation.py            | 174 +++++
 .../tool/test_add_chart_to_existing_dashboard.py   |  98 +++
 .../dashboard/tool/test_dashboard_generation.py    | 178 ++++-
 .../dashboard/tool/test_dashboard_tools.py         | 306 ++++++--
 .../dashboard/tool/test_duplicate_dashboard.py     |  55 ++
 .../dashboard/tool/test_get_dashboard_datasets.py  | 331 +++++++-
 .../tool/test_remove_chart_from_dashboard.py       |  44 ++
 .../dashboard/tool/test_update_dashboard.py        |  78 +-
 .../database/tool/test_database_tools.py           |   2 +-
 .../mcp_service/dataset/tool/test_dataset_tools.py |  26 +-
 .../mcp_service/query/tool/test_query_tools.py     |   2 +-
 .../saved_query/tool/test_saved_query_tools.py     |   2 +-
 .../semantic_layer/tool/test_get_table.py          | 816 ++++++++++++++++++-
 .../semantic_layer/tool/test_list_metrics.py       | 235 +++++-
 .../unit_tests/mcp_service/test_main_entrypoint.py |   7 +-
 tests/unit_tests/mcp_service/test_mcp_config.py    |  16 +
 tests/unit_tests/mcp_service/test_mcp_e2e_smoke.py | 123 ++-
 tests/unit_tests/mcp_service/test_mcp_server.py    | 106 ++-
 .../mcp_service/test_mcp_tool_registration.py      | 243 +++++-
 tests/unit_tests/mcp_service/test_middleware.py    | 122 ++-
 .../mcp_service/test_middleware_logging.py         |  16 +-
 .../mcp_service/test_tool_search_transform.py      |  40 +
 .../mcp_service/utils/test_response_utils.py       |  24 +
 tests/unit_tests/models/core_test.py               |  23 +
 .../pandas_postprocessing/test_contribution.py     | 106 +++
 tests/unit_tests/security/manager_test.py          | 633 +++++++++++++++
 tests/unit_tests/semantic_layers/api_test.py       | 352 ++++++++-
 .../semantic_layers/connections_access_test.py     | 402 ++++++++++
 .../fixtures/snowflake_configuration.json          | 172 ++++
 tests/unit_tests/semantic_layers/mapper_test.py    | 213 +++--
 tests/unit_tests/semantic_layers/masking_test.py   | 870 +++++++++++++++++++++
 tests/unit_tests/semantic_layers/models_test.py    |  32 +
 .../semantic_layers/provider_masking_test.py       | 107 +++
 tests/unit_tests/sql/parse_tests.py                |  50 ++
 tests/unit_tests/sql_lab_test.py                   | 105 +++
 .../subjects/test_report_executor_remediation.py   | 148 ++++
 tests/unit_tests/tasks/test_async_queries.py       |  43 +
 tests/unit_tests/utils/date_parser_tests.py        | 107 +++
 tests/unit_tests/utils/filters_test.py             |  43 +-
 tests/unit_tests/versioning/test_db_errors.py      | 205 ++++-
 tests/unit_tests/versioning/test_restore.py        | 245 +++++-
 .../versioning/test_version_info_locking.py        | 108 +++
 tests/unit_tests/views/test_base_theme_helpers.py  |  62 ++
 tests/unit_tests/views/test_i18n_constants.py      | 640 +++++++++++++++
 231 files changed, 19914 insertions(+), 1803 deletions(-)
 create mode 100644 superset-frontend/playwright/helpers/embeddedAppServer.ts
 create mode 100644 superset-frontend/playwright/tests/dashboard/version-history-placement.spec.ts
 create mode 100644 superset-frontend/playwright/tests/embedded/embedded-iframe-sizing.spec.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Histogram/transformProps.test.ts
 create mode 100644 superset-frontend/src/dashboard/components/PropertiesModal/PropertiesModal.lateFieldMount.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/useDisplayControlDatasource.test.ts
 create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/useDisplayControlDatasource.ts
 copy superset-frontend/src/{visualizations/TimeTable/utils/rowProcessing/rowProcessing.ts => dashboard/util/embeddedLayout.ts} (61%)
 create mode 100644 superset-frontend/src/explore/components/controls/ControlPopover/PopoverTriggerAnchors.test.tsx
 create mode 100644 superset-frontend/src/features/versionHistory/SaveGroupItem.test.tsx
 create mode 100644 superset-frontend/src/pages/DatasetList/DatasetList.connectionPermissions.test.tsx
 create mode 100644 superset-frontend/src/utils/semanticViewStructure.test.ts
 create mode 100644 superset-frontend/src/utils/semanticViewStructure.ts
 create mode 100644 superset/commands/semantic_layer/utils.py
 create mode 100644 superset/semantic_layers/masking.py
 create mode 100644 tests/integration_tests/charts/semantic_save_tests.py
 create mode 100644 tests/integration_tests/versioning/activity_write_after_read_tests.py
 create mode 100644 tests/integration_tests/versioning/conditional_token_lock_tests.py
 create mode 100644 tests/integration_tests/versioning/restore_fails_closed_tests.py
 create mode 100644 tests/unit_tests/charts/semantic_view_chart_filter_test.py
 create mode 100644 tests/unit_tests/semantic_layers/connections_access_test.py
 create mode 100644 tests/unit_tests/semantic_layers/fixtures/snowflake_configuration.json
 create mode 100644 tests/unit_tests/semantic_layers/masking_test.py
 create mode 100644 tests/unit_tests/semantic_layers/provider_masking_test.py
 create mode 100644 tests/unit_tests/subjects/test_report_executor_remediation.py
 create mode 100644 tests/unit_tests/versioning/test_version_info_locking.py
 create mode 100644 tests/unit_tests/views/test_i18n_constants.py