diff --git a/freecad/silo_commands.py b/freecad/silo_commands.py index 452f0f9..b3c7442 100644 --- a/freecad/silo_commands.py +++ b/freecad/silo_commands.py @@ -717,6 +717,28 @@ class Silo_New: return _server_mode == "normal" +def _push_dag_after_upload(doc, part_number, revision_number): + """Extract and push the feature DAG after a successful upload. + + Failures are logged as warnings -- DAG sync must never block save. + """ + try: + from dag import extract_dag + + nodes, edges = extract_dag(doc) + if not nodes: + return + + result = _client.push_dag(part_number, revision_number, nodes, edges) + node_count = result.get("node_count", len(nodes)) + edge_count = result.get("edge_count", len(edges)) + FreeCAD.Console.PrintMessage( + f"DAG synced: {node_count} nodes, {edge_count} edges\n" + ) + except Exception as e: + FreeCAD.Console.PrintWarning(f"DAG sync failed: {e}\n") + + class Silo_Save: """Save locally and upload to MinIO.""" @@ -787,6 +809,8 @@ class Silo_Save: new_rev = result["revision_number"] FreeCAD.Console.PrintMessage(f"Uploaded as revision {new_rev}\n") + _push_dag_after_upload(doc, part_number, new_rev) + except Exception as e: FreeCAD.Console.PrintWarning(f"Upload failed: {e}\n") FreeCAD.Console.PrintMessage("File saved locally but not uploaded.\n") @@ -841,6 +865,8 @@ class Silo_Commit: new_rev = result["revision_number"] FreeCAD.Console.PrintMessage(f"Committed revision {new_rev}: {comment}\n") + _push_dag_after_upload(doc, part_number, new_rev) + except Exception as e: FreeCAD.Console.PrintError(f"Commit failed: {e}\n")