This is an automated email from the ASF dual-hosted git repository.
msyavuz pushed a change to branch msyavuz/feat/canvas
in repository https://gitbox.apache.org/repos/asf/superset.git
from 5ef382f42ed feat(mcp): tell agents what canvas ops did
add f8b71c7c0ca feat(canvas): a placed widget takes the spot it lands on
add be453124eef chore(canvas): open the Canvas and Widget Framework
feature branch
add 522629ebb83 feat: initial commit for widgets
add 73ebe1e5f93 Merge remote-tracking branch 'origin/canvas' into
msyavuz/feat/canvas
add 60f132c74b7 feat(canvas): every non-structural widget is its own entity
No new revisions were added by this update.
Summary of changes:
docs/static/feature-flags.json | 2 +-
superset-core/src/superset_core/canvas/__init__.py | 4 +-
superset-core/src/superset_core/canvas/base.py | 40 +-
.../src/superset_core/widgets/__init__.py | 9 +-
.../src/superset_core/widgets/behavior.py | 3 +
.../src/superset_core/{queries => widgets}/daos.py | 33 +-
.../{semantic_layers => widgets}/models.py | 56 +--
.../packages/superset-core/src/canvas/index.ts | 8 +-
.../src/features/canvas/CanvasGrid.tsx | 13 +-
superset-frontend/src/features/canvas/types.ts | 14 +-
superset/canvas/api.py | 11 +-
superset/canvas/definition/ops.py | 145 +++++-
superset/canvas/definition/pending.py | 109 +++++
superset/canvas/definition/placements.py | 13 +-
superset/canvas/definition/registry.py | 23 +-
superset/canvas/definition/render.py | 12 +-
superset/canvas/definition/schemas.py | 39 +-
superset/canvas/definition/validation.py | 25 +-
superset/canvas/widgets.py | 79 ++++
superset/commands/canvas/apply_ops.py | 91 +++-
superset/commands/canvas/draft.py | 38 +-
superset/commands/canvas/exceptions.py | 30 +-
superset/commands/canvas/placement_data.py | 9 +-
{scripts => superset/commands/widget}/__init__.py | 0
.../{annotation_layer => widget}/create.py | 31 +-
.../commands/{dataset/metrics => widget}/delete.py | 34 +-
superset/commands/widget/exceptions.py | 68 +++
superset/commands/widget/update.py | 100 +++++
superset/config.py | 6 +-
superset/core/api/core_api_injection.py | 12 +-
superset/daos/{css.py => widget.py} | 7 +-
superset/initialization/__init__.py | 4 +-
superset/mcp_service/app.py | 10 +
superset/mcp_service/canvas/schemas.py | 10 +
.../canvas/tool/apply_canvas_draft_ops.py | 27 +-
.../mcp_service/canvas/tool/canvas_draft_common.py | 2 +
superset/mcp_service/canvas/tool/get_canvas.py | 11 +-
superset/mcp_service/canvas/tool/preview_widget.py | 14 +-
superset/mcp_service/dashboard_scope.py | 2 +
.../mcp_service/widget}/__init__.py | 0
superset/mcp_service/{tag => widget}/schemas.py | 100 +++--
.../{catalog => widget}/tool/__init__.py | 6 +-
.../tool/get_widget_info.py} | 68 ++-
superset/mcp_service/widget/tool/list_widgets.py | 144 ++++++
.../mcp_service/widgets/tool/list_widget_types.py | 4 +-
superset/mcp_service/worker.py | 2 +
...0-03_12-00_06373bc38605_create_widgets_table.py | 113 +++++
...2-00_e18dda53ce53_canvas_widgets_as_entities.py | 144 ++++++
superset/subjects/models.py | 38 ++
superset/widgets/api.py | 491 ++++++++++++---------
superset/widgets/builtin.py | 14 +-
superset/widgets/filters.py | 88 ++++
superset/widgets/models.py | 65 +++
superset/widgets/schemas.py | 107 +++++
superset/widgets/{api.py => types_api.py} | 0
tests/unit_tests/canvas/conftest.py | 3 +-
tests/unit_tests/canvas/draft_test.py | 63 ++-
tests/unit_tests/canvas/fixtures.py | 56 ++-
tests/unit_tests/canvas/ops_test.py | 210 ++++++++-
tests/unit_tests/canvas/placement_data_test.py | 6 +-
tests/unit_tests/canvas/validation_test.py | 31 +-
tests/unit_tests/canvas/widget_entities_test.py | 179 ++++++++
.../mcp_service/canvas/tool/test_canvas_tools.py | 26 ++
.../mcp_service/native_tool_inventory.json | 80 +++-
.../mcp_service/test_mcp_tool_registration.py | 8 +
.../unit_tests/mcp_service/test_tool_inventory.py | 2 +
.../unit_tests/mcp_service/widget}/__init__.py | 0
.../unit_tests/mcp_service/widget/conftest.py | 7 +-
.../mcp_service/widget/tool}/__init__.py | 0
.../mcp_service/widget/tool/test_widget_tools.py | 127 ++++++
.../migrations/test_canvas_widgets_as_entities.py | 88 ++++
.../migrations/test_create_widgets_table.py | 108 +++++
tests/unit_tests/widgets/api_test.py | 179 ++++++++
tests/unit_tests/widgets/commands_test.py | 169 +++++++
tests/unit_tests/widgets/conftest.py | 6 +
tests/unit_tests/widgets/filters_test.py | 86 ++++
tests/unit_tests/widgets/fixtures.py | 91 ++++
77 files changed, 3447 insertions(+), 606 deletions(-)
copy superset-core/src/superset_core/{queries => widgets}/daos.py (61%)
copy superset-core/src/superset_core/{semantic_layers => widgets}/models.py
(51%)
create mode 100644 superset/canvas/definition/pending.py
create mode 100644 superset/canvas/widgets.py
copy {scripts => superset/commands/widget}/__init__.py (100%)
copy superset/commands/{annotation_layer => widget}/create.py (59%)
copy superset/commands/{dataset/metrics => widget}/delete.py (60%)
create mode 100644 superset/commands/widget/exceptions.py
create mode 100644 superset/commands/widget/update.py
copy superset/daos/{css.py => widget.py} (83%)
copy {scripts => superset/mcp_service/widget}/__init__.py (100%)
copy superset/mcp_service/{tag => widget}/schemas.py (56%)
copy superset/mcp_service/{catalog => widget}/tool/__init__.py (86%)
copy superset/mcp_service/{theme/tool/get_theme_info.py =>
widget/tool/get_widget_info.py} (57%)
create mode 100644 superset/mcp_service/widget/tool/list_widgets.py
create mode 100644
superset/migrations/versions/2026-10-03_12-00_06373bc38605_create_widgets_table.py
create mode 100644
superset/migrations/versions/2026-10-23_12-00_e18dda53ce53_canvas_widgets_as_entities.py
create mode 100644 superset/widgets/filters.py
create mode 100644 superset/widgets/models.py
create mode 100644 superset/widgets/schemas.py
copy superset/widgets/{api.py => types_api.py} (100%)
create mode 100644 tests/unit_tests/canvas/widget_entities_test.py
copy {scripts => tests/unit_tests/mcp_service/widget}/__init__.py (100%)
copy superset/openapi/__init__.py =>
tests/unit_tests/mcp_service/widget/conftest.py (88%)
copy {scripts => tests/unit_tests/mcp_service/widget/tool}/__init__.py (100%)
create mode 100644
tests/unit_tests/mcp_service/widget/tool/test_widget_tools.py
create mode 100644
tests/unit_tests/migrations/test_canvas_widgets_as_entities.py
create mode 100644 tests/unit_tests/migrations/test_create_widgets_table.py
create mode 100644 tests/unit_tests/widgets/api_test.py
create mode 100644 tests/unit_tests/widgets/commands_test.py
create mode 100644 tests/unit_tests/widgets/filters_test.py
create mode 100644 tests/unit_tests/widgets/fixtures.py