From c4c8d7e04c074f0bcacde676ee7d6d92e312db2e Mon Sep 17 00:00:00 2001 From: wvandeun Date: Tue, 22 Apr 2025 14:22:18 +0200 Subject: [PATCH 1/4] get hfid for related nodes of cardinality many relationships --- infrahub_sdk/node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infrahub_sdk/node.py b/infrahub_sdk/node.py index 8628e7cc..e7ebb46c 100644 --- a/infrahub_sdk/node.py +++ b/infrahub_sdk/node.py @@ -479,7 +479,7 @@ def _generate_query_data(cls, peer_data: dict[str, Any] | None = None, property: """ data: dict[str, Any] = { "count": None, - "edges": {"node": {"id": None, "display_label": None, "__typename": None}}, + "edges": {"node": {"id": None, "hfid": None, "display_label": None, "__typename": None}}, } properties: dict[str, Any] = {} From 8a5cb3b899b9b59266fffaf3f751b5d1a5808ed6 Mon Sep 17 00:00:00 2001 From: wvandeun Date: Tue, 22 Apr 2025 14:22:56 +0200 Subject: [PATCH 2/4] add hfid support to Relationshipmanager add, extend & remove methods --- infrahub_sdk/node.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/infrahub_sdk/node.py b/infrahub_sdk/node.py index e7ebb46c..6d8160f7 100644 --- a/infrahub_sdk/node.py +++ b/infrahub_sdk/node.py @@ -569,7 +569,9 @@ def add(self, data: str | RelatedNode | dict) -> None: raise UninitializedError("Must call fetch() on RelationshipManager before editing members") new_node = RelatedNode(schema=self.schema, client=self.client, branch=self.branch, data=data) - if new_node.id and new_node.id not in self.peer_ids: + if (new_node.id and new_node.id not in self.peer_ids) or ( + new_node.hfid and new_node.hfid not in self.peer_hfids + ): self.peers.append(new_node) self._has_update = True @@ -591,6 +593,14 @@ def remove(self, data: str | RelatedNode | dict) -> None: self.peers.pop(idx) self._has_update = True + elif node_to_remove.hfid and node_to_remove.hfid in self.peer_hfids: + idx = self.peer_hfids.index(node_to_remove.hfid) + if self.peers[idx].hfid != node_to_remove.hfid: + raise IndexError(f"Unexpected situation, the node with the index {idx} should be {node_to_remove.hfid}") + + self.peers.pop(idx) + self._has_update = True + class RelationshipManagerSync(RelationshipManagerBase): """Manages relationships of a node in a synchronous context.""" @@ -664,7 +674,9 @@ def add(self, data: str | RelatedNodeSync | dict) -> None: raise UninitializedError("Must call fetch() on RelationshipManager before editing members") new_node = RelatedNodeSync(schema=self.schema, client=self.client, branch=self.branch, data=data) - if new_node.id and new_node.id not in self.peer_ids: + if (new_node.id and new_node.id not in self.peer_ids) or ( + new_node.hfid and new_node.hfid not in self.peer_hfids + ): self.peers.append(new_node) self._has_update = True @@ -682,6 +694,13 @@ def remove(self, data: str | RelatedNodeSync | dict) -> None: idx = self.peer_ids.index(node_to_remove.id) if self.peers[idx].id != node_to_remove.id: raise IndexError(f"Unexpected situation, the node with the index {idx} should be {node_to_remove.id}") + self.peers.pop(idx) + self._has_update = True + + elif node_to_remove.hfid and node_to_remove.hfid in self.peer_hfids: + idx = self.peer_hfids.index(node_to_remove.hfid) + if self.peers[idx].hfid != node_to_remove.hfid: + raise IndexError(f"Unexpected situation, the node with the index {idx} should be {node_to_remove.hfid}") self.peers.pop(idx) self._has_update = True From c2a06d61af96912ad75aec3fc9820bc457810ff1 Mon Sep 17 00:00:00 2001 From: wvandeun Date: Tue, 22 Apr 2025 14:42:14 +0200 Subject: [PATCH 3/4] update tests --- tests/unit/sdk/test_node.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/sdk/test_node.py b/tests/unit/sdk/test_node.py index 70966f6a..fbe381bf 100644 --- a/tests/unit/sdk/test_node.py +++ b/tests/unit/sdk/test_node.py @@ -1105,6 +1105,7 @@ async def test_query_data_include_property(client, location_schema: NodeSchemaAP }, "node": { "id": None, + "hfid": None, "display_label": None, "__typename": None, }, @@ -1157,6 +1158,7 @@ async def test_query_data_include(client, location_schema: NodeSchemaAPI, client "edges": { "node": { "id": None, + "hfid": None, "display_label": None, "__typename": None, }, From 0d2110a718889c55d5ec831177122cb2b36c00de Mon Sep 17 00:00:00 2001 From: wvandeun Date: Tue, 22 Apr 2025 14:52:12 +0200 Subject: [PATCH 4/4] add changelog fragment --- .../+hfid_support_cardinality_many_relationships.changed.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/+hfid_support_cardinality_many_relationships.changed.md diff --git a/changelog/+hfid_support_cardinality_many_relationships.changed.md b/changelog/+hfid_support_cardinality_many_relationships.changed.md new file mode 100644 index 00000000..373120d2 --- /dev/null +++ b/changelog/+hfid_support_cardinality_many_relationships.changed.md @@ -0,0 +1 @@ +Set the HFID on related nodes for cardinality many relationships and add hfid support to the RelationshipManager add, extend and remove methods