bito-code-review[bot] commented on code in PR #37183:
URL: https://github.com/apache/superset/pull/37183#discussion_r2775343647


##########
superset/mcp_service/chart/tool/get_chart_info.py:
##########
@@ -83,9 +111,41 @@ async def get_chart_info(
     result = tool.run_tool(request.identifier)
 
     if isinstance(result, ChartInfo):
+        # If form_data_key is provided, override form_data with cached version
+        if request.form_data_key:
+            await ctx.info(
+                "Retrieving unsaved chart state from cache: form_data_key=%s"
+                % (request.form_data_key,)
+            )
+            cached_form_data = _get_cached_form_data(request.form_data_key)
+
+            if cached_form_data:
+                try:
+                    result.form_data = utils_json.loads(cached_form_data)
+                    result.form_data_key = request.form_data_key
+                    result.is_unsaved_state = True
+
+                    # Update viz_type from cached form_data if present
+                    if result.form_data and "viz_type" in result.form_data:
+                        result.viz_type = result.form_data["viz_type"]
+
+                    await ctx.info(
+                        "Chart form_data overridden with unsaved state from 
cache"
+                    )
+                except Exception as e:
+                    await ctx.warning(
+                        "Failed to parse cached form_data: %s. "
+                        "Using saved chart configuration." % (str(e),)

Review Comment:
   <!-- Bito Reply -->
   The broad exception catch in the MCP tool ensures unexpected errors are 
handled gracefully, converting them to structured warnings rather than crashing 
the tool at the system boundary. This improves robustness, though the 
suggestion to catch specific exceptions like ValueError and TypeError could 
work for known cases but might miss edge cases.
   
   **superset/mcp_service/chart/tool/get_chart_info.py**
   ```
   except (ValueError, TypeError) as e:
                       await ctx.warning(
                           "Failed to parse cached form_data: %s. "
                           "Using saved chart configuration." % (str(e),)
                       )
   ```



##########
superset/mcp_service/chart/tool/get_chart_data.py:
##########
@@ -42,6 +42,22 @@
 logger = logging.getLogger(__name__)
 
 
+def _get_cached_form_data(form_data_key: str) -> str | None:
+    """Retrieve form_data from cache using form_data_key.
+
+    Returns the JSON string of form_data if found, None otherwise.
+    """
+    from superset.commands.explore.form_data.get import GetFormDataCommand
+    from superset.commands.explore.form_data.parameters import 
CommandParameters
+
+    try:
+        cmd_params = CommandParameters(key=form_data_key)
+        return GetFormDataCommand(cmd_params).run()
+    except Exception as e:

Review Comment:
   <!-- Bito Reply -->
   No, the suggestion isn’t fully correct — adding TypeError to the exception 
handling may catch unintended errors, as the helper is designed to handle only 
known failure modes like KeyError, ValueError, and CommandException.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to