Alternative parser for bitbake recipes
Project description
oelint-parser
alternative parser for bitbake recipes
API documentation
Find the full API docs here
Examples
from oelint_parser.cls_stash import Stash
# create an stash object
_stash = Stash()
# add any bitbake like file
_stash.AddFile("/some/file")
# Resolves proper cross file dependencies
_stash.Finalize()
# Use _stash.GetItemsFor() method to filter the stash
Get variables from the files
To get variables from the stash object do
from oelint_parser.cls_item import Variable
# get all variables of the name PV from all files
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
# get all variables of the name PV from all files
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue="PV"):
# raw unexpanded variable
print(x.VarValue)
# raw unexpanded variable without quotes
print(x.VarValueStripped)
# expanded variable
print(expand_term(stash, "/some/file", x.VarValueStripped))
# single items from a list
print(x.get_items())
# expanded single items from a list
print([_stash.ExpandTerm("/some/file", y) for y in x.get_items()])
Filtering
You can filter by multiple items
from oelint_parser.cls_item import Variable
# get all variables of the name PV or BPV from all files
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue=["PV", "BPV"]):
# variable name
print(x.VarName)
# raw unexpanded variable
print(x.VarValue)
# raw unexpanded variable without quotes
print(x.VarValueStripped)
and you can reduce the list after the initial filtering even more
from oelint_parser.cls_item import Variable
# get all variables of the name PV or BPV from all files if the value is '1.0'
for x in _stash.GetItemsFor(attribute=Variable.ATTR_VAR, attributeValue=["PV", "BPV"]).reduce(
attribute=Variable.ATTR_VARVAL, attributeValue=["1.0"]):
# variable name
print(x.VarName)
# raw unexpanded variable -> "1.0"
print(x.VarValue)
# raw unexpanded variable without quotes -> 1.0
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:
# variable name
print(x.VarName)
# raw unexpanded variable -> "1.0"
print(x.VarValue)
# raw unexpanded variable without quotes -> 1.0
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
# create an stash object
_stash = Stash()
# add any bitbake like file
_stash.AddFile("/some/file")
# Resolves proper cross file dependencies
_stash.Finalize()
the VAR_1
's VarValue
value would be foo
.
With
from oelint_parser.cls_stash import Stash
# create an stash object
_stash = Stash(negative_inline=True)
# add any bitbake like file
_stash.AddFile("/some/file")
# Resolves proper cross file dependencies
_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)
key | type | description | getter for information |
---|---|---|---|
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 |
variables/mandatory | list | variables mandatory to a recipe | oelint_parse.constants.CONSTANT.VariablesMandatory |
variables/order | list | preferred order of variables | oelint_parse.constants.CONSTANT.VariablesOrder |
variables/protected | list | variables not to be used in recipes | oelint_parse.constants.CONSTANT.VariablesProtected |
variables/protected-append | list | variables not to be used in bbappends | oelint_parse.constants.CONSTANT.VariablesProtectedAppend |
variables/suggested | list | suggested variable in a recipe | oelint_parse.constants.CONSTANT.VariablesSuggested |
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 -r requirements.txt -r requirements-dev.txt
flake8 oelint_parser/ tests/
pytest
./gendoc.sh
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file oelint_parser-4.0.2.tar.gz
.
File metadata
- Download URL: oelint_parser-4.0.2.tar.gz
- Upload date:
- Size: 43.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c152b3b22ef14a4a9e8e08dd61c441a11cb458b8105c1fbdb9263942133cbc8 |
|
MD5 | ebc5b5149e7cf104ab8a829c182756b1 |
|
BLAKE2b-256 | 24b534b91e71dfdf034e8a21871b1e753122a99265f2981cc62753367a547f20 |
File details
Details for the file oelint_parser-4.0.2-py2.py3-none-any.whl
.
File metadata
- Download URL: oelint_parser-4.0.2-py2.py3-none-any.whl
- Upload date:
- Size: 49.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76ec43aeb2b60b77247f7ef43fdcfc13445936ba23a77855719ebb5cb8a0f475 |
|
MD5 | d4d17ac318664696f36110afd2895a08 |
|
BLAKE2b-256 | d4f22ee88712ec9d5d572da3f908749d85faaf7dafc55ec3e592231f70324fcb |