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

kasiazjc pushed a commit to branch fix/column-select-saved-tab-label
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 9f554ffbb30d21a71b5f23ec48538b3f3a6ef4c1
Author: Amin Ghadersohi <[email protected]>
AuthorDate: Fri May 15 01:45:58 2026 +0000

    fix(mcp): rename CreateDatasetRequest.schema to schema_name to avoid 
Pydantic v2 clash
    
    Pydantic v2 keeps BaseModel.schema() as a deprecated classmethod; a field
    named 'schema' is shadowed by it, so request.schema returns the bound method
    instead of the field value.  Rename the field to schema_name with 
alias='schema'
    (and populate_by_name=True) so callers still pass {"schema": "..."} in JSON
    but Python code uses request.schema_name.
    
    Also fix two test assertions that checked data["schema_name"] — the
    DatasetInfo model_serializer normalises the key to "schema" before 
returning.
---
 superset/mcp_service/dataset/schemas.py                          | 5 ++++-
 superset/mcp_service/dataset/tool/create_dataset.py              | 6 +++---
 tests/unit_tests/mcp_service/dataset/tool/test_create_dataset.py | 4 ++--
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/superset/mcp_service/dataset/schemas.py 
b/superset/mcp_service/dataset/schemas.py
index d5fc3517402..26d598b7e9e 100644
--- a/superset/mcp_service/dataset/schemas.py
+++ b/superset/mcp_service/dataset/schemas.py
@@ -326,16 +326,19 @@ class GetDatasetInfoRequest(MetadataCacheControl):
 class CreateDatasetRequest(BaseModel):
     """Request schema for create_dataset to register a physical table as a 
dataset."""
 
+    model_config = ConfigDict(populate_by_name=True)
+
     database_id: Annotated[
         int,
         Field(
             description="ID of the database connection to register the table 
against"
         ),
     ]
-    schema: Annotated[
+    schema_name: Annotated[
         str | None,
         Field(
             default=None,
+            alias="schema",
             description="Schema where the table lives (optional).",
         ),
     ]
diff --git a/superset/mcp_service/dataset/tool/create_dataset.py 
b/superset/mcp_service/dataset/tool/create_dataset.py
index c2e0c79bee2..8396e5c0d98 100644
--- a/superset/mcp_service/dataset/tool/create_dataset.py
+++ b/superset/mcp_service/dataset/tool/create_dataset.py
@@ -62,7 +62,7 @@ async def create_dataset(
     """
     await ctx.info(
         "Registering physical table as dataset: database_id=%s, schema=%r, 
table=%r"
-        % (request.database_id, request.schema, request.table_name)
+        % (request.database_id, request.schema_name, request.table_name)
     )
 
     # Verify the database exists and the caller has table-level access before
@@ -75,7 +75,7 @@ async def create_dataset(
             error_type="DatabaseNotFoundError",
         )
 
-    table = Table(request.table_name, request.schema, request.catalog)
+    table = Table(request.table_name, request.schema_name, request.catalog)
     try:
         security_manager.raise_for_access(database=database, table=table)
     except SupersetSecurityException as exc:
@@ -96,7 +96,7 @@ async def create_dataset(
             for k, v in {
                 "database": request.database_id,
                 "table_name": request.table_name,
-                "schema": request.schema,
+                "schema": request.schema_name,
                 "catalog": request.catalog,
                 "owners": request.owners,
             }.items()
diff --git a/tests/unit_tests/mcp_service/dataset/tool/test_create_dataset.py 
b/tests/unit_tests/mcp_service/dataset/tool/test_create_dataset.py
index 561a6664dd9..d64f4f90eb4 100644
--- a/tests/unit_tests/mcp_service/dataset/tool/test_create_dataset.py
+++ b/tests/unit_tests/mcp_service/dataset/tool/test_create_dataset.py
@@ -131,7 +131,7 @@ class TestCreateDataset:
         data = json.loads(result.content[0].text)
         assert data["id"] == 42
         assert data["table_name"] == "orders"
-        assert data["schema_name"] == "public"
+        assert data["schema"] == "public"
 
         call_kwargs = mock_command_class.call_args[0][0]
         assert call_kwargs["database"] == 1
@@ -328,7 +328,7 @@ class TestCreateDataset:
         data = json.loads(result.content[0].text)
         assert data["id"] == 99
         assert data["table_name"] == "sales"
-        assert data["schema_name"] == "dw"
+        assert data["schema"] == "dw"
         assert data["is_virtual"] is False
         assert len(data["columns"]) == 1
         assert data["columns"][0]["column_name"] == "amount"

Reply via email to