mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
fix(mcp): add missing __init__.py for chart, dashboard, dataset packages (#38400)
This commit is contained in:
@@ -37,3 +37,56 @@ def test_mcp_prompts_registered():
|
||||
|
||||
prompts = mcp._prompt_manager._prompts
|
||||
assert len(prompts) > 0
|
||||
|
||||
|
||||
def test_mcp_resources_registered():
|
||||
"""Test that MCP resources are registered.
|
||||
|
||||
Resources are registered via @mcp.resource() decorators in resource files.
|
||||
They require __init__.py in parent packages for find_packages() to include
|
||||
them in distributions. This test ensures all expected resources are found.
|
||||
"""
|
||||
from superset.mcp_service.app import mcp
|
||||
|
||||
resource_manager = mcp._resource_manager
|
||||
resources = resource_manager._resources
|
||||
assert len(resources) > 0, "No MCP resources registered"
|
||||
|
||||
# Verify the two documented resources are registered
|
||||
resource_uris = set(resources.keys())
|
||||
assert "chart://configs" in resource_uris, (
|
||||
"chart://configs resource not registered - "
|
||||
"check superset/mcp_service/chart/__init__.py exists"
|
||||
)
|
||||
assert "instance://metadata" in resource_uris, (
|
||||
"instance://metadata resource not registered - "
|
||||
"check superset/mcp_service/system/resources/ imports"
|
||||
)
|
||||
|
||||
|
||||
def test_mcp_packages_discoverable_by_setuptools():
|
||||
"""Test that all MCP sub-packages have __init__.py for setuptools.
|
||||
|
||||
setuptools.find_packages() only discovers directories with __init__.py.
|
||||
Without __init__.py, sub-packages (tool, resources, prompts) are excluded
|
||||
from built distributions, causing missing module errors in deployments.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
mcp_root = Path(__file__).parents[3] / "superset" / "mcp_service"
|
||||
assert mcp_root.is_dir(), f"MCP service root not found: {mcp_root}"
|
||||
|
||||
# All immediate sub-directories that contain Python files should be packages
|
||||
missing = []
|
||||
for subdir in sorted(mcp_root.iterdir()):
|
||||
if not subdir.is_dir() or subdir.name.startswith(("_", ".")):
|
||||
continue
|
||||
# Check if it has any .py files in it or its subdirectories
|
||||
has_py = any(subdir.rglob("*.py"))
|
||||
if has_py and not (subdir / "__init__.py").exists():
|
||||
missing.append(subdir.name)
|
||||
|
||||
assert not missing, (
|
||||
f"MCP sub-packages missing __init__.py (will be excluded from "
|
||||
f"setuptools distributions): {missing}"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user