YANG Statements

This module implements the following classes:

Doctest snippets for this module use the YANG module example-5-a, see Example 5.

>>> dm = DataModel.from_file("yang-library-ex5.json")
>>> mex5a = dm.schema_data.modules[('example-5-a', '2018-10-25')].statement
class yangson.statement.Statement(kw: YangIdentifier, arg: Optional[str], pref: YangIdentifier = None)

An instance of this class represents a parsed YANG statement. The constructor arguments kw, arg and pref initialize instance attributes keyword, argument and prefix, respectively.

Instance Attributes

keyword

The statement’s keyword. For extension statements, this is the local part of the keyword.

>>> mex5a.keyword
'module'
prefix

Optional prefix of the statement keyword. It is None for all built-in statements, and for an extension statement it is the prefix of the module where the extension is defined.

argument

The statement’s argument. It is the final value of the argument string in which all preliminary processing steps, i.e. substitution of escape sequences and concatenation of parts joined with +, have already been performed. For statements that have no argument, such as input, the value of this attribute is None.

>>> mex5a.argument
'example-5-a'
superstmt

Parent statement, or None if there is no parent.

substatements

List of substatements.

>>> len(mex5a.substatements)
16

Public Methods

find1(kw: YangIdentifier, arg: str = None, pref: YangIdentifier = None, required: bool = False)
Optional[Statement]

Return the first substatement of the receiver with a matching keyword and, optionally, argument. In order to match, the local part of the keyword has to be kw, and prefix has to be pref. If pref is None, only built-in statements match. The last argument, required, controls what happens if a matching substatement is not found: if required is True, then StatementNotFound is raised, otherwise None is returned. If arg is None, then the arguments of substatements are not taken into account.

>>> lfs = mex5a.find1('leaf', 'string-leaf')
>>> str(lfs)
'leaf "string-leaf" { ... }'
>>> lfs.superstmt.keyword
'module'
>>> mex5a.find1('rpc') is None
True
>>> mex5a.find1('rpc', required=True)
Traceback (most recent call last):
...
yangson.statement.StatementNotFound: `rpc' in `module "example-5-a" { ... }'
find_all(kw: YangIdentifier, pref: YangIdentifier = None) → List[Statement]

Return the list of all substatements with a matching keyword. The conditions on keyword matching are the same as for find1().

>>> len(mex5a.find_all('leaf'))
11
>>> mex5a.find_all('rpc')
[]
get_definition(name: YangIdentifier, kw:
YangIdentifier) -> Statement

Search the receiver’s parent statement and then all ancestor statements from inside out for the definition whose name is name. The second argument, kw, has to be grouping or typedef, and controls whtehr the method looks for the definition of a grouping or typedef, respectively.

This method raises DefinitionNotFound if the search is not successful.

>>> str(lfs.get_definition('my-string', 'typedef'))
'typedef "my-string" { ... }'
>>> lfs.get_definition('my-string', 'grouping') is None
True
class yangson.statement.ModuleParser(text: str, name: YangIdentifier = None, rev: str = None)

This class is a subclass of Parser, and implements a recursive-descent parser for YANG modules. Source text of the YANG module is passed to the constructor in the text argument (see also the Parser.input attribute). The other two arguments, name and rev, are optional and may be used for initializing the instance attributes below.

Instance Attributes

name

Module or submodule name that is expected to be found in the module text.

rev

Module or submodule revision date that is expected to be found in the module text as the most recent revision.

Public Methods

parse() → Statement

Parse the YANG module text.

Apart from parsing exceptions raised in the methods of the parser module, this method may raise the following exceptions:

>>> with open('example-5-a.yang') as infile:
...     m5atxt = infile.read()
>>> str(ModuleParser(m5atxt).parse())
'module "example-5-a" { ... }'
>>> str(ModuleParser(m5atxt, rev='2018-04-01').parse())
Traceback (most recent call last):
...
yangson.exceptions.ModuleRevisionMismatch: '2018-10-25', expected '2018-04-01'