oelint-parser

alternative parser for bitbake recipes
API documentation
Find the full API docs here
Examples
from oelint_parser.cls_stash import Stash
_stash = Stash()
_stash.AddFile("/some/file")
_stash.Finalize()
Get variables from the files
To get variables from the stash object do
from oelint_parser.cls_item import Variable
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue="PV"):
print(x)
this returns the raw object representation
Expand raw variables
from oelint_parser.cls_item import Variable
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue="PV"):
print(x.VarValue)
print(x.VarValueStripped)
print(expand_term(stash, "/some/file", x.VarValueStripped))
print(x.get_items())
print([_stash.ExpandTerm("/some/file", y, objref=x) for y in x.get_items()])
Filtering
You can filter by multiple items
from oelint_parser.cls_item import Variable
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue=["PV", "BPV"]):
print(x.VarName)
print(x.VarValue)
print(x.VarValueStripped)
and you can reduce the list after the initial filtering even more
from oelint_parser.cls_item import Variable
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue=["PV", "BPV"]).reduce(
attribute=Variable.ATTR_VARVAL, attributeValue=["1.0"]):
print(x.VarName)
print(x.VarValue)
print(x.VarValueStripped)
but if you need copies from a wider list to smaller lists use
from oelint_parser.cls_item import Variable
_all = _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue=["PV", "BPV"])
_pv = _stash.Reduce(_all, attribute=Variable.ATTR_VAR, attributeValue="PV")
_bpv = _stash.Reduce(_all, attribute=Variable.ATTR_VAR, attributeValue="BPV")
for x in _pv:
print(x.VarName)
print(x.VarValue)
print(x.VarValueStripped)
Expanding a Variable
To get the effective value of a Variable after parsing you can use
from oelint_parser.cls_item import Variable
result_set = _stash.ExpandVar(attribute=Variable.ATTR_VAR, attributeValue=["PV"]):
print(result_set.get('PV'))
Inline branch expansion
By default the parser will expand parsable and known inline blocks (${@oe.utils.something(...)}
) to the branch
value that would match if the programmed condition is true
.
You can invert this selection by setting negative_inline
to True
in the Stash
object.
E.g.
with some/file
being
VAR_1 = "${@bb.utils.contains('BUILDHISTORY_FEATURES', 'image', 'foo', 'bar', d)}"
and
from oelint_parser.cls_stash import Stash
_stash = Stash()
_stash.AddFile("/some/file")
_stash.Finalize()
the VAR_1
's VarValue
value would be foo
.
With
from oelint_parser.cls_stash import Stash
_stash = Stash(negative_inline=True)
_stash.AddFile("/some/file")
_stash.Finalize()
the VAR_1
's VarValue
value would be bar
.
Working with constants
For this library a few basic sets of constant information, such as basic package definitions, known machines and functions are
needed.
Those can be easily modified, in case you have additional information to add/remove/modify.
The actual database is not directly accessible by the user, but a few methods in the oelint_parse.constants.CONSTANT
class do exist.
Each of the method accepts a dictionary with the same key mapping as listed below (multilevel paths are displayed a JSON pointer)
functions/known | list | known functions | oelint_parse.constants.CONSTANT.FunctionsKnown |
functions/order | list | preferred order of core functions | oelint_parse.constants.CONSTANT.FunctionsOrder |
images/known-classes | list | bbclasses to be known to be used in images | oelint_parse.constants.CONSTANT.ImagesClasses |
images/known-variables | list | variables known to be used in images | oelint_parse.constants.CONSTANT.ImagesVariables |
replacements/distros | list | known distro overrides | oelint_parse.constants.CONSTANT.DistrosKnown |
replacements/machines | list | known machine overrides | oelint_parse.constants.CONSTANT.MachinesKnown |
replacements/mirrors | dict | known mirrors | oelint_parse.constants.CONSTANT.MirrorsKnown |
variables/known | list | known variables | oelint_parse.constants.CONSTANT.VariablesKnown |
sets/base | dict | base set of variables always used for value expansion | oelint_parse.constants.CONSTANT.SetsBase |
For additional constants
from oelint_parser.constants import CONSTANTS
CONSTANTS.GetByPath('/-joined path')
will offer access
Contributing
Before any contribution please run the following
python3 -m venv --clear .env
. .env/bin/activate
pip install .[dev]
flake8 oelint_parser/ tests/
pytest
./gendoc.sh