feat(mcp): add series_limit to generate_chart XY config

Add series_limit parameter to XYChartConfig so callers can control
how many distinct series (group_by values) the chart renders.  When
set, the value is forwarded as form_data["series_limit"], which
Superset's echarts timeseries plugins interpret to cap the number of
rendered series lines/bars.
This commit is contained in:
Amin Ghadersohi
2026-05-20 22:48:41 +00:00
parent a273fe4d62
commit 188fea221d
4 changed files with 83 additions and 1 deletions

View File

@@ -804,6 +804,38 @@ class TestMapXYConfig:
assert result["row_limit"] == 10000
@patch("superset.mcp_service.chart.chart_utils.is_column_truly_temporal")
def test_map_xy_config_series_limit(self, mock_is_temporal) -> None:
"""Test that series_limit is mapped to form_data when set."""
mock_is_temporal.return_value = True
config = XYChartConfig(
chart_type="xy",
x=ColumnRef(name="date"),
y=[ColumnRef(name="revenue", aggregate="SUM")],
kind="line",
group_by=[ColumnRef(name="region")],
series_limit=10,
)
result = map_xy_config(config)
assert result["series_limit"] == 10
@patch("superset.mcp_service.chart.chart_utils.is_column_truly_temporal")
def test_map_xy_config_no_series_limit_by_default(self, mock_is_temporal) -> None:
"""Test that series_limit is omitted from form_data when not set."""
mock_is_temporal.return_value = True
config = XYChartConfig(
chart_type="xy",
x=ColumnRef(name="date"),
y=[ColumnRef(name="revenue", aggregate="SUM")],
kind="line",
)
result = map_xy_config(config)
assert "series_limit" not in result
@patch("superset.mcp_service.chart.chart_utils.is_column_truly_temporal")
def test_map_xy_config_saved_metric(self, mock_is_temporal: Any) -> None:
"""Test XY config with saved metric emits string in metrics list"""