You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2026/05/30 04:08:43 UTC
(superset) branch amin/mcp-list-reports updated (602b229c68f -> 81a3e5cf5b8)
This is an automated email from the ASF dual-hosted git repository.
aminghadersohi pushed a change to branch amin/mcp-list-reports
in repository https://gitbox.apache.org/repos/asf/superset.git
omit 602b229c68f ci: trigger integration tests
omit 6192f9570a5 Merge branch 'master' into amin/mcp-list-reports
omit 0e1284e14dd fix(mcp): address eschutho review — privacy, error handling, cleanup
omit c03ef01ca58 fix(mcp): fix two test failures from CI
omit de2a1d9b349 fix(mcp): DRY owner_filter_column, gate get_schema on ALERT_REPORTS, harden ReportError sanitization
omit f6d712db811 fix(mcp): gate report tools on ALERT_REPORTS flag and add prompt-injection regression tests
omit dac10c24907 fix(mcp): address permission gap and sanitize report name/description
omit 2158b6a7abb fix(mcp): align get_schema report columns with ReportInfo serializer
omit c5a3720e58d fix(mcp): align get_schema report columns with ReportInfo serializer
omit 1047c6abfa0 fix(mcp): restrict columns_available to ReportInfo fields
omit 63e75441d18 test(mcp): add test for created_by_fk_or_owner combined filter case
omit 28b81515347 test(mcp): add exception path and schema coverage tests for report tools
omit 40b467c320d fix(mcp): fix test kwarg assertions and ruff 0.9.7 formatting
omit 251090701bf fix(mcp): fix TypeError in list_reports DAO call and OR semantics for self-lookup filters
omit 394c20e9f77 fix(mcp): fix naive datetime in _humanize_timestamp and add logger.warning to exception handler
omit 3fe17ecaefe fix(mcp): remove created_by_fk from ReportFilter public schema and use ColumnOperator for filters_applied
omit 7976fffcd83 fix(mcp): add created_by_fk to ReportFilter allowed columns
omit 9e09f2324d7 fix(mcp): restore created_by_fk as public filter column, keep owners.id for reports
omit 3097bd8e105 fix(mcp): inject owners.id and created_by_fk filters for report list tools
omit 2116e9ef502 refactor(mcp): address review findings for list/get report tools
omit 2398af19bac feat(mcp): add list and get tools for alerts and reports
add b2320820b4a feat(core): SoftDeleteMixin and restore infrastructure (#39977)
add 8f88bbcc796 chore(deps-dev): bump @swc/core from 1.15.33 to 1.15.40 in /superset-frontend (#40519)
add 63ae80ab623 chore(deps-dev): bump baseline-browser-mapping from 2.10.31 to 2.10.32 in /superset-frontend (#40518)
add e1948c87c6d chore(deps-dev): bump webpack-sources from 3.4.1 to 3.5.0 in /superset-frontend (#40517)
add cf9ee99b5ae chore(deps-dev): bump eslint-plugin-react-you-might-not-need-an-effect from 0.10.1 to 0.10.2 in /superset-frontend (#40516)
add 61cb0aeae74 chore(deps): bump @swc/core from 1.15.33 to 1.15.40 in /docs (#40515)
add c3bda6baea9 chore(deps): bump fs-extra from 11.3.2 to 11.3.5 in /superset-frontend (#40487)
add ead21d9789d chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#40486)
add 661ff31c6d5 chore(deps): bump yeoman-generator from 8.1.2 to 8.2.2 in /superset-frontend (#40485)
add 63e3a18e8f4 chore(deps): bump baseline-browser-mapping from 2.10.31 to 2.10.32 in /docs (#40484)
add ae5823fb9c2 chore(deps-dev): bump tmp from 0.2.5 to 0.2.7 in /superset-frontend (#40480)
add e73d2d0bf60 chore(deps): bump tmp from 0.2.4 to 0.2.7 in /superset-frontend/cypress-base (#40476)
add 53e2793bc3c fix: coerce out-of-bounds nanosecond timestamps to NaT instead of raising (#40127)
add f614863ed78 feat(mcp): add list and get tools for annotation layers and annotations (#40342)
add a69bbcb044c feat(mcp): add list and get tools for saved queries and query history (#40346)
add 8d8eeb35053 feat(mcp): add list_tags and get_tag_info MCP tools (#40349)
add b8ea4448d69 feat(ci): perform static security analysis for GHA workflows (#40510)
add 40de44f6de6 feat(mcp): add list and get tools for action log and tasks (#40344)
add 43c3c06035f chore(deps): bump vm2 from 3.11.3 to 3.11.5 in /superset-frontend (#40529)
add 62b4ee3d9e0 feat(mcp): add list and get tools for users and roles (#40345)
add 37b1349db45 feat(mcp): add list and get tools for alerts and reports
add 0631197743d refactor(mcp): address review findings for list/get report tools
add 00f8ecb2bac fix(mcp): inject owners.id and created_by_fk filters for report list tools
add d4d9a1b322c fix(mcp): restore created_by_fk as public filter column, keep owners.id for reports
add 3329e2accaa fix(mcp): add created_by_fk to ReportFilter allowed columns
add fe76444ec77 fix(mcp): remove created_by_fk from ReportFilter public schema and use ColumnOperator for filters_applied
add 2936991e48e fix(mcp): fix naive datetime in _humanize_timestamp and add logger.warning to exception handler
add 9548fe7f890 fix(mcp): fix TypeError in list_reports DAO call and OR semantics for self-lookup filters
add 8c9fd646595 fix(mcp): fix test kwarg assertions and ruff 0.9.7 formatting
add 2c03bfbf191 test(mcp): add exception path and schema coverage tests for report tools
add d560a0cf8a8 test(mcp): add test for created_by_fk_or_owner combined filter case
add 49dabd517dd fix(mcp): restrict columns_available to ReportInfo fields
add 256bcae4736 fix(mcp): align get_schema report columns with ReportInfo serializer
add 155786d1d2b fix(mcp): align get_schema report columns with ReportInfo serializer
add 3f18e4caccb fix(mcp): address permission gap and sanitize report name/description
add 5ef3064dfb5 fix(mcp): gate report tools on ALERT_REPORTS flag and add prompt-injection regression tests
add faf35b52544 fix(mcp): DRY owner_filter_column, gate get_schema on ALERT_REPORTS, harden ReportError sanitization
add ab5f3b43405 fix(mcp): fix two test failures from CI
add 929704dcc92 fix(mcp): address eschutho review — privacy, error handling, cleanup
add af531dd7729 ci: trigger integration tests
add 81a3e5cf5b8 test(mcp): add report schema owners.id exclusion test; align serializer param
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 (602b229c68f)
\
N -- N -- N refs/heads/amin/mcp-list-reports (81a3e5cf5b8)
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/workflows/github-action-validator.yml | 12 +-
docs/package.json | 4 +-
docs/yarn.lock | 160 +++---
superset-frontend/cypress-base/package-lock.json | 12 +-
superset-frontend/package-lock.json | 258 +++++-----
superset-frontend/package.json | 8 +-
.../packages/generator-superset/package.json | 2 +-
.../packages/superset-ui-core/package.json | 2 +-
superset/commands/dataset/importers/v1/utils.py | 39 +-
superset/commands/importers/v1/utils.py | 47 ++
superset/commands/restore.py | 98 ++++
superset/constants.py | 1 +
superset/daos/base.py | 88 +++-
superset/daos/database.py | 7 +
superset/daos/{security.py => role.py} | 11 +-
superset/initialization/__init__.py | 24 +
.../mcp_service/action_log}/__init__.py | 0
superset/mcp_service/action_log/schemas.py | 302 +++++++++++
.../{database => action_log}/tool/__init__.py | 8 +-
.../action_log/tool/get_action_log_info.py | 97 ++++
.../action_log/tool/list_action_logs.py | 152 ++++++
.../mcp_service/annotation_layer}/__init__.py | 0
superset/mcp_service/annotation_layer/schemas.py | 367 +++++++++++++
.../{explore => annotation_layer}/tool/__init__.py | 17 +-
.../tool/get_annotation_layer_info.py | 97 ++++
.../tool/get_layer_annotation_info.py | 130 +++++
.../tool/list_annotation_layers.py | 123 +++++
.../tool/list_layer_annotations.py | 144 ++++++
superset/mcp_service/app.py | 112 +++-
superset/mcp_service/chart/schemas.py | 17 +-
superset/mcp_service/dashboard/schemas.py | 13 +-
.../dashboard/tool/generate_dashboard.py | 6 +-
superset/mcp_service/database/schemas.py | 14 +-
superset/mcp_service/dataset/schemas.py | 13 +-
.../mcp_service/query}/__init__.py | 0
superset/mcp_service/{report => query}/schemas.py | 214 ++++----
.../mcp_service/{report => query}/tool/__init__.py | 8 +-
superset/mcp_service/query/tool/get_query_info.py | 122 +++++
superset/mcp_service/query/tool/list_queries.py | 156 ++++++
superset/mcp_service/report/tool/list_reports.py | 2 +-
.../mcp_service/role}/__init__.py | 0
superset/mcp_service/{report => role}/schemas.py | 191 +++----
.../mcp_service/{report => role}/tool/__init__.py | 8 +-
superset/mcp_service/role/tool/get_role_info.py | 97 ++++
superset/mcp_service/role/tool/list_roles.py | 135 +++++
.../mcp_service/saved_query}/__init__.py | 0
.../mcp_service/{report => saved_query}/schemas.py | 184 +++----
.../{database => saved_query}/tool/__init__.py | 8 +-
.../saved_query/tool/get_saved_query_info.py | 129 +++++
.../saved_query/tool/list_saved_queries.py | 158 ++++++
.../mcp_service/tag}/__init__.py | 0
superset/mcp_service/tag/schemas.py | 251 +++++++++
.../execution => mcp_service/tag/tool}/__init__.py | 8 +-
superset/mcp_service/tag/tool/get_tag_info.py | 108 ++++
superset/mcp_service/tag/tool/list_tags.py | 157 ++++++
.../mcp_service/task}/__init__.py | 0
superset/mcp_service/task/schemas.py | 259 ++++++++++
.../mcp_service/{report => task}/tool/__init__.py | 8 +-
superset/mcp_service/task/tool/get_task_info.py | 107 ++++
superset/mcp_service/task/tool/list_tasks.py | 140 +++++
.../mcp_service/user}/__init__.py | 0
superset/mcp_service/{report => user}/schemas.py | 221 ++++----
.../mcp_service/{report => user}/tool/__init__.py | 8 +-
superset/mcp_service/user/tool/get_user_info.py | 107 ++++
superset/mcp_service/user/tool/list_users.py | 151 ++++++
superset/mcp_service/utils/response_utils.py | 11 +
superset/mcp_service/utils/sanitization.py | 12 +-
superset/models/helpers.py | 260 +++++++++-
superset/result_set.py | 4 +-
superset/security/manager.py | 44 +-
superset/views/filters.py | 213 +++++++-
.../importers/v1/test_find_existing_for_import.py | 180 +++++++
.../unit_tests/commands/importers/v1/utils_test.py | 119 +++++
.../commands/test_base_restore_command.py | 187 +++++++
tests/unit_tests/dao/base_dao_test.py | 7 +
tests/unit_tests/daos/test_base_dao_soft_delete.py | 100 ++++
.../unit_tests/mcp_service/action_log}/__init__.py | 0
.../mcp_service/action_log/tool}/__init__.py | 0
.../action_log/tool/test_action_log_tools.py | 401 +++++++++++++++
.../mcp_service/annotation_layer}/__init__.py | 0
.../mcp_service/annotation_layer/tool}/__init__.py | 0
.../tool/test_annotation_layer_tools.py | 562 ++++++++++++++++++++
.../unit_tests/mcp_service/query}/__init__.py | 0
.../unit_tests/mcp_service/query/tool}/__init__.py | 0
.../mcp_service/query/tool/test_query_tools.py | 328 ++++++++++++
.../unit_tests/mcp_service/role}/__init__.py | 0
.../unit_tests/mcp_service/role/tool}/__init__.py | 0
.../mcp_service/role/tool/test_role_tools.py | 336 ++++++++++++
.../mcp_service/saved_query}/__init__.py | 0
.../mcp_service/saved_query/tool}/__init__.py | 0
.../saved_query/tool/test_saved_query_tools.py | 337 ++++++++++++
.../mcp_service/system/tool/test_get_schema.py | 34 ++
.../unit_tests/mcp_service/tag}/__init__.py | 0
.../unit_tests/mcp_service/tag/tool}/__init__.py | 0
.../mcp_service/tag/tool/test_tag_tools.py | 268 ++++++++++
.../unit_tests/mcp_service/task}/__init__.py | 0
.../unit_tests/mcp_service/task/tool}/__init__.py | 0
.../mcp_service/task/tool/test_task_tools.py | 284 +++++++++++
.../mcp_service/test_mcp_tool_registration.py | 138 ++++-
.../unit_tests/mcp_service/user}/__init__.py | 0
.../unit_tests/mcp_service/user/tool}/__init__.py | 0
.../mcp_service/user/tool/test_user_tools.py | 449 ++++++++++++++++
tests/unit_tests/models/test_soft_delete_mixin.py | 566 +++++++++++++++++++++
tests/unit_tests/result_set_test.py | 20 +
tests/unit_tests/views/test_soft_delete_filter.py | 356 +++++++++++++
105 files changed, 9739 insertions(+), 799 deletions(-)
create mode 100644 superset/commands/restore.py
copy superset/daos/{security.py => role.py} (78%)
copy {superset-core/src/superset_core/common => superset/mcp_service/action_log}/__init__.py (100%)
create mode 100644 superset/mcp_service/action_log/schemas.py
copy superset/mcp_service/{database => action_log}/tool/__init__.py (84%)
create mode 100644 superset/mcp_service/action_log/tool/get_action_log_info.py
create mode 100644 superset/mcp_service/action_log/tool/list_action_logs.py
copy {superset-core/src/superset_core/common => superset/mcp_service/annotation_layer}/__init__.py (100%)
create mode 100644 superset/mcp_service/annotation_layer/schemas.py
copy superset/mcp_service/{explore => annotation_layer}/tool/__init__.py (68%)
create mode 100644 superset/mcp_service/annotation_layer/tool/get_annotation_layer_info.py
create mode 100644 superset/mcp_service/annotation_layer/tool/get_layer_annotation_info.py
create mode 100644 superset/mcp_service/annotation_layer/tool/list_annotation_layers.py
create mode 100644 superset/mcp_service/annotation_layer/tool/list_layer_annotations.py
copy {superset-core/src/superset_core/common => superset/mcp_service/query}/__init__.py (100%)
copy superset/mcp_service/{report => query}/schemas.py (54%)
copy superset/mcp_service/{report => query}/tool/__init__.py (86%)
create mode 100644 superset/mcp_service/query/tool/get_query_info.py
create mode 100644 superset/mcp_service/query/tool/list_queries.py
copy {superset-core/src/superset_core/common => superset/mcp_service/role}/__init__.py (100%)
copy superset/mcp_service/{report => role}/schemas.py (53%)
copy superset/mcp_service/{report => role}/tool/__init__.py (86%)
create mode 100644 superset/mcp_service/role/tool/get_role_info.py
create mode 100644 superset/mcp_service/role/tool/list_roles.py
copy {superset-core/src/superset_core/common => superset/mcp_service/saved_query}/__init__.py (100%)
copy superset/mcp_service/{report => saved_query}/schemas.py (57%)
copy superset/mcp_service/{database => saved_query}/tool/__init__.py (83%)
create mode 100644 superset/mcp_service/saved_query/tool/get_saved_query_info.py
create mode 100644 superset/mcp_service/saved_query/tool/list_saved_queries.py
copy {superset-core/src/superset_core/common => superset/mcp_service/tag}/__init__.py (100%)
create mode 100644 superset/mcp_service/tag/schemas.py
copy superset/{sql/execution => mcp_service/tag/tool}/__init__.py (86%)
create mode 100644 superset/mcp_service/tag/tool/get_tag_info.py
create mode 100644 superset/mcp_service/tag/tool/list_tags.py
copy {superset-core/src/superset_core/common => superset/mcp_service/task}/__init__.py (100%)
create mode 100644 superset/mcp_service/task/schemas.py
copy superset/mcp_service/{report => task}/tool/__init__.py (86%)
create mode 100644 superset/mcp_service/task/tool/get_task_info.py
create mode 100644 superset/mcp_service/task/tool/list_tasks.py
copy {superset-core/src/superset_core/common => superset/mcp_service/user}/__init__.py (100%)
copy superset/mcp_service/{report => user}/schemas.py (53%)
copy superset/mcp_service/{report => user}/tool/__init__.py (86%)
create mode 100644 superset/mcp_service/user/tool/get_user_info.py
create mode 100644 superset/mcp_service/user/tool/list_users.py
create mode 100644 tests/unit_tests/commands/importers/v1/test_find_existing_for_import.py
create mode 100644 tests/unit_tests/commands/importers/v1/utils_test.py
create mode 100644 tests/unit_tests/commands/test_base_restore_command.py
create mode 100644 tests/unit_tests/daos/test_base_dao_soft_delete.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/action_log}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/action_log/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/action_log/tool/test_action_log_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/annotation_layer}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/annotation_layer/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/annotation_layer/tool/test_annotation_layer_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/query}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/query/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/query/tool/test_query_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/role}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/role/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/role/tool/test_role_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/saved_query}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/saved_query/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/saved_query/tool/test_saved_query_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/tag}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/tag/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/tag/tool/test_tag_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/task}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/task/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/task/tool/test_task_tools.py
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/user}/__init__.py (100%)
copy {superset-core/src/superset_core/common => tests/unit_tests/mcp_service/user/tool}/__init__.py (100%)
create mode 100644 tests/unit_tests/mcp_service/user/tool/test_user_tools.py
create mode 100644 tests/unit_tests/models/test_soft_delete_mixin.py
create mode 100644 tests/unit_tests/views/test_soft_delete_filter.py