diff --git a/libyang/data.py b/libyang/data.py index 9595ea1..e24a3ff 100644 --- a/libyang/data.py +++ b/libyang/data.py @@ -1015,7 +1015,7 @@ def leafref_link_node_tree(self) -> None: def leafref_nodes(self) -> Iterator["DNode"]: """ - Gets the leafref links record for given node. + Gets the nodes that are referring to this node. Requires leafref_linking to be set on the libyang context. """ @@ -1026,6 +1026,19 @@ def leafref_nodes(self) -> Iterator["DNode"]: for n in ly_array_iter(out[0].leafref_nodes): yield DNode.new(self.context, n) + def target_nodes(self) -> Iterator["DNode"]: + """ + Gets the target nodes that are referred by this node. + + Requires leafref_linking to be set on the libyang context. + """ + term_node = ffi.cast("struct lyd_node_term *", self.cdata) + out = ffi.new("const struct lyd_leafref_links_rec **") + if lib.lyd_leafref_get_links(term_node, out) != lib.LY_SUCCESS: + return + for n in ly_array_iter(out[0].target_nodes): + yield DNode.new(self.context, n) + def __repr__(self): cls = self.__class__ return "<%s.%s: %s>" % (cls.__module__, cls.__name__, str(self)) diff --git a/tests/test_data.py b/tests/test_data.py index 1479eb9..820db0c 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -1092,6 +1092,9 @@ def test_dnode_leafref_linking(self): dnode4 = next(dnode3.leafref_nodes()) self.assertIsInstance(dnode4, DLeaf) self.assertEqual(dnode4.cdata, dnode2.cdata) + dnode5 = next(dnode4.target_nodes()) + self.assertIsInstance(dnode5, DLeaf) + self.assertEqual(dnode5.cdata, dnode3.cdata) dnode1.free() def test_dnode_store_only(self):