This is an automated email from the ASF dual-hosted git repository. aminghadersohi pushed a commit to branch oss-101877 in repository https://gitbox.apache.org/repos/asf/superset.git
commit 22d1d3a87813218cc7b36023b1e5a0a178408617 Author: Amin Ghadersohi <[email protected]> AuthorDate: Wed May 20 23:21:57 2026 +0000 refactor(mcp): extract _add_xy_limits helper and move series_limit tests Extract row/series limit assignment into a private helper to keep map_xy_config within the McCabe complexity threshold, removing the noqa: C901 suppression. Move series_limit schema tests out of TestRowLimit and into a dedicated TestSeriesLimit class. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> --- superset/mcp_service/chart/chart_utils.py | 13 +++-- .../mcp_service/chart/test_chart_schemas.py | 68 ++++++++++++---------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/superset/mcp_service/chart/chart_utils.py b/superset/mcp_service/chart/chart_utils.py index f62d65df816..3bd24e42385 100644 --- a/superset/mcp_service/chart/chart_utils.py +++ b/superset/mcp_service/chart/chart_utils.py @@ -648,7 +648,13 @@ def _resolve_default_x_axis( return config.model_copy(update={"x": ColumnRef(name=dataset.main_dttm_col)}) -def map_xy_config( # noqa: C901 +def _add_xy_limits(form_data: Dict[str, Any], config: XYChartConfig) -> None: + form_data["row_limit"] = config.row_limit + if config.series_limit is not None: + form_data["series_limit"] = config.series_limit + + +def map_xy_config( config: XYChartConfig, dataset_id: int | str | None = None ) -> Dict[str, Any]: """Map XY chart config to form_data with defensive validation.""" @@ -712,10 +718,7 @@ def map_xy_config( # noqa: C901 if x_is_temporal: _ensure_temporal_adhoc_filter(form_data, config.x.name) - form_data["row_limit"] = config.row_limit - - if config.series_limit is not None: - form_data["series_limit"] = config.series_limit + _add_xy_limits(form_data, config) # Add stacking configuration if getattr(config, "stacked", False): diff --git a/tests/unit_tests/mcp_service/chart/test_chart_schemas.py b/tests/unit_tests/mcp_service/chart/test_chart_schemas.py index 2d91cdd0048..d6f549c9af1 100644 --- a/tests/unit_tests/mcp_service/chart/test_chart_schemas.py +++ b/tests/unit_tests/mcp_service/chart/test_chart_schemas.py @@ -452,6 +452,42 @@ class TestRowLimit: row_limit=100000, ) + def test_table_chart_default_row_limit(self) -> None: + """Test that TableChartConfig has default row_limit of 1000.""" + config = TableChartConfig( + chart_type="table", + columns=[ColumnRef(name="product")], + ) + assert config.row_limit == 1000 + + def test_table_chart_custom_row_limit(self) -> None: + """Test that TableChartConfig accepts custom row_limit.""" + config = TableChartConfig( + chart_type="table", + columns=[ColumnRef(name="product")], + row_limit=500, + ) + assert config.row_limit == 500 + + def test_table_chart_row_limit_validation(self) -> None: + """Test that TableChartConfig rejects invalid row_limit.""" + with pytest.raises(ValidationError): + TableChartConfig( + chart_type="table", + columns=[ColumnRef(name="product")], + row_limit=0, + ) + with pytest.raises(ValidationError): + TableChartConfig( + chart_type="table", + columns=[ColumnRef(name="product")], + row_limit=100000, + ) + + +class TestSeriesLimit: + """Test series_limit field on XYChartConfig.""" + def test_xy_chart_series_limit_default_none(self) -> None: """Test that XYChartConfig series_limit defaults to None.""" config = XYChartConfig( @@ -489,38 +525,6 @@ class TestRowLimit: series_limit=10001, ) - def test_table_chart_default_row_limit(self) -> None: - """Test that TableChartConfig has default row_limit of 1000.""" - config = TableChartConfig( - chart_type="table", - columns=[ColumnRef(name="product")], - ) - assert config.row_limit == 1000 - - def test_table_chart_custom_row_limit(self) -> None: - """Test that TableChartConfig accepts custom row_limit.""" - config = TableChartConfig( - chart_type="table", - columns=[ColumnRef(name="product")], - row_limit=500, - ) - assert config.row_limit == 500 - - def test_table_chart_row_limit_validation(self) -> None: - """Test that TableChartConfig rejects invalid row_limit.""" - with pytest.raises(ValidationError): - TableChartConfig( - chart_type="table", - columns=[ColumnRef(name="product")], - row_limit=0, - ) - with pytest.raises(ValidationError): - TableChartConfig( - chart_type="table", - columns=[ColumnRef(name="product")], - row_limit=100000, - ) - class TestTableChartConfigExtraFields: """Test TableChartConfig rejects unknown fields."""
