[core][graphIO] PartialSerializer: fix List/GroupAttribute link serialization

Ensure attribute input connection is serialized, even for List/GroupAttributes.
Note: while connecting GroupAttributes is not yet supported, this will benefit
this type of attribute once it is.
This commit is contained in:
Yann Lanthony 2025-02-06 18:03:00 +01:00
parent 724e7fb387
commit 0594f593f2
2 changed files with 21 additions and 3 deletions

View file

@ -200,9 +200,13 @@ class PartialGraphSerializer(GraphSerializer):
Serialize `attribute` (recursively for list/groups) and deal with attributes being connected
to nodes that are not part of the partial list of nodes to serialize.
"""
# If the attribute is connected to a node that is not in the list of nodes to serialize,
# the link expression should not be serialized.
if attribute.isLink and attribute.getLinkParam().node not in self.nodes:
linkParam = attribute.getLinkParam()
if linkParam is not None:
# Use standard link serialization if upstream node is part of the serialization.
if linkParam.node in self.nodes:
return attribute.getExportValue()
# Skip link serialization otherwise.
# If part of a list, this entry can be discarded.
if isinstance(attribute.root, ListAttribute):
return None

View file

@ -243,6 +243,20 @@ class TestGraphPartialSerialization:
assert compareGraphsContent(graph, graphA)
assert compareGraphsContent(graphA, graphB)
def test_listAttributeToListAttributeConnectionIsSerialized(self):
graph = Graph("")
with registeredNodeTypes([NodeWithListAttributes]):
nodeA = graph.addNewNode(NodeWithListAttributes.__name__)
nodeB = graph.addNewNode(NodeWithListAttributes.__name__)
graph.addEdge(nodeA.listInput, nodeB.listInput)
otherGraph = Graph("")
otherGraph._deserialize(graph.serializePartial([nodeA, nodeB]))
assert otherGraph.node(nodeB.name).listInput.linkParam == otherGraph.node(nodeA.name).listInput
def test_singleNodeWithInputConnectionFromNonSerializedNodeRemovesEdge(self):
graph = Graph("")