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"
