Copilot commented on code in PR #34418:
URL: https://github.com/apache/superset/pull/34418#discussion_r2260940319


##########
superset/commands/dashboard/importers/v1/utils.py:
##########
@@ -139,7 +139,47 @@ def update_id_refs(  # pylint: disable=too-many-locals  # 
noqa: C901
             native_filter["scope"]["excluded"] = [
                 id_map[old_id] for old_id in scope_excluded if old_id in id_map
             ]
+    fixed = update_cross_filter_scoping(fixed, id_map)
+    return fixed
+
 
+def update_cross_filter_scoping(
+    config: dict[str, Any], id_map: dict[int, int]
+) -> dict[str, Any]:
+    # fix cross filter references
+    fixed = config.copy()
+
+    cross_filter_global_config = fixed.get("metadata", {}).get(
+        "global_chart_configuration", {}
+    )
+    scope_excluded = cross_filter_global_config.get("scope", 
{}).get("excluded", [])
+    if scope_excluded:
+        cross_filter_global_config["scope"]["excluded"] = [
+            id_map[old_id] for old_id in scope_excluded if old_id in id_map
+        ]
+
+    if "chart_configuration" in (metadata := fixed.get("metadata", {})):

Review Comment:
   [nitpick] The walrus operator assignment within the if condition makes the 
code harder to read. Consider extracting the metadata assignment to a separate 
line for better clarity.
   ```suggestion
       metadata = fixed.get("metadata", {})
       if "chart_configuration" in metadata:
   ```



##########
superset/commands/dashboard/importers/v1/utils.py:
##########
@@ -139,7 +139,47 @@ def update_id_refs(  # pylint: disable=too-many-locals  # 
noqa: C901
             native_filter["scope"]["excluded"] = [
                 id_map[old_id] for old_id in scope_excluded if old_id in id_map
             ]
+    fixed = update_cross_filter_scoping(fixed, id_map)
+    return fixed
+
 
+def update_cross_filter_scoping(
+    config: dict[str, Any], id_map: dict[int, int]
+) -> dict[str, Any]:
+    # fix cross filter references
+    fixed = config.copy()
+
+    cross_filter_global_config = fixed.get("metadata", {}).get(
+        "global_chart_configuration", {}
+    )
+    scope_excluded = cross_filter_global_config.get("scope", 
{}).get("excluded", [])
+    if scope_excluded:
+        cross_filter_global_config["scope"]["excluded"] = [
+            id_map[old_id] for old_id in scope_excluded if old_id in id_map
+        ]
+
+    if "chart_configuration" in (metadata := fixed.get("metadata", {})):
+        # in cross_filter_scopes the key is the chart ID as a string; we need 
to update
+        # them to be the new ID as a string:
+        metadata["chart_configuration"] = {
+            str(id_map[int(old_id)]): columns
+            for old_id, columns in metadata["chart_configuration"].items()
+            if int(old_id) in id_map
+        }
+        # now update scope excluded to use new IDs:
+        for chart_config in metadata["chart_configuration"].values():
+            if "id" in chart_config and int(chart_config["id"]) in id_map:
+                chart_config["id"] = id_map[int(chart_config["id"])]

Review Comment:
   This code assumes chart_config['id'] can be converted to int, but there's no 
guarantee of the data type. This could raise a ValueError if the id is not a 
valid integer. Consider adding proper type checking or exception handling.
   ```suggestion
               if "id" in chart_config:
                   try:
                       chart_id_int = int(chart_config["id"])
                   except (ValueError, TypeError):
                       logger.warning(
                           "Chart config 'id' is not a valid integer: %r", 
chart_config["id"]
                       )
                       continue
                   if chart_id_int in id_map:
                       chart_config["id"] = id_map[chart_id_int]
   ```



##########
superset/commands/dashboard/importers/v1/utils.py:
##########
@@ -139,7 +139,47 @@ def update_id_refs(  # pylint: disable=too-many-locals  # 
noqa: C901
             native_filter["scope"]["excluded"] = [
                 id_map[old_id] for old_id in scope_excluded if old_id in id_map
             ]
+    fixed = update_cross_filter_scoping(fixed, id_map)
+    return fixed
+
 
+def update_cross_filter_scoping(
+    config: dict[str, Any], id_map: dict[int, int]
+) -> dict[str, Any]:
+    # fix cross filter references
+    fixed = config.copy()
+
+    cross_filter_global_config = fixed.get("metadata", {}).get(
+        "global_chart_configuration", {}
+    )
+    scope_excluded = cross_filter_global_config.get("scope", 
{}).get("excluded", [])
+    if scope_excluded:
+        cross_filter_global_config["scope"]["excluded"] = [
+            id_map[old_id] for old_id in scope_excluded if old_id in id_map
+        ]
+
+    if "chart_configuration" in (metadata := fixed.get("metadata", {})):
+        # in cross_filter_scopes the key is the chart ID as a string; we need 
to update
+        # them to be the new ID as a string:
+        metadata["chart_configuration"] = {
+            str(id_map[int(old_id)]): columns
+            for old_id, columns in metadata["chart_configuration"].items()
+            if int(old_id) in id_map
+        }
+        # now update scope excluded to use new IDs:
+        for chart_config in metadata["chart_configuration"].values():
+            if "id" in chart_config and int(chart_config["id"]) in id_map:
+                chart_config["id"] = id_map[int(chart_config["id"])]

Review Comment:
   Same issue as above - int(chart_config['id']) could raise a ValueError. This 
conversion is done twice without proper error handling.
   ```suggestion
               if "id" in chart_config:
                   try:
                       chart_id_int = int(chart_config["id"])
                   except (ValueError, TypeError):
                       logger.warning(
                           "Invalid chart_config['id']: %r; skipping ID 
update.", chart_config["id"]
                       )
                       continue
                   if chart_id_int in id_map:
                       chart_config["id"] = id_map[chart_id_int]
   ```



-- 
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