Skip to content

Commit

Permalink
schema: adds nested extensions access
Browse files Browse the repository at this point in the history
This patch introduces access to nested extensions

Signed-off-by: Stefan Gula <steweg@gmail.com>
  • Loading branch information
steweg committed Dec 19, 2024
1 parent 76504c4 commit 5a2e057
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
8 changes: 8 additions & 0 deletions libyang/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,10 @@ def parent_node(self) -> Optional[Union["PNode", "PIdentity"]]:
return None
return None

def extensions(self) -> Iterator["ExtensionParsed"]:
for ext in ly_array_iter(self.cdata.exts):
yield ExtensionParsed(self.context, ext, self.module_parent)


# -------------------------------------------------------------------------------------
class ExtensionCompiled(Extension):
Expand Down Expand Up @@ -462,6 +466,10 @@ def parent_node(self) -> Optional[Union["SNode", "Identity"]]:
return None
return None

def extensions(self) -> Iterator["ExtensionCompiled"]:
for ext in ly_array_iter(self.cdata.exts):
yield ExtensionCompiled(self.context, ext)


# -------------------------------------------------------------------------------------
class _EnumBit:
Expand Down
5 changes: 4 additions & 1 deletion tests/test_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from libyang import (
Context,
Extension,
ExtensionCompiled,
ExtensionParsed,
Identity,
IfFeature,
Expand Down Expand Up @@ -498,12 +499,14 @@ def test_rpc_extensions(self):
ext = list(self.rpc.extensions())
self.assertEqual(len(ext), 1)
ext = self.rpc.get_extension("require-admin", prefix="omg-extensions")
self.assertIsInstance(ext, Extension)
self.assertIsInstance(ext, ExtensionCompiled)
self.assertIsInstance(ext.parent_node(), SRpc)
self.assertIsNone(next(ext.extensions(), None))
parsed = self.rpc.parsed()
ext = parsed.get_extension("require-admin", prefix="omg-extensions")
self.assertIsInstance(ext, ExtensionParsed)
self.assertIsInstance(ext.parent_node(), PAction)
self.assertIsNone(next(ext.extensions(), None))

def test_rpc_params(self):
leaf = next(self.rpc.children())
Expand Down

0 comments on commit 5a2e057

Please sign in to comment.