Alternative parser for bitbake recipe
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, objref=x) 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 |
| ignore/classes | list | classes to ignore in parsing | oelint_parse.constants.CONSTANT.ClassIgnore |
| ignore/include | list | include/require files to ignore in parsing | oelint_parse.constants.CONSTANT.IncludeIgnore |
| 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 |
| sets/base | list | base set of variables always used for value expansion | oelint_parse.constants.CONSTANT.SetsBase |
| variables/known | list | known variables | oelint_parse.constants.CONSTANT.VariablesKnown |
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
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oelint_parser-8.8.1.tar.gz.
File metadata
- Download URL: oelint_parser-8.8.1.tar.gz
- Upload date:
- Size: 28.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b0e3007dde02f526a6b8f59affe44aa748dd01408c7af365bf3735668f37e50
|
|
| MD5 |
a77a385d034611fef33ebceb151ad9e0
|
|
| BLAKE2b-256 |
e8e3184dd75b1a1eb6fcf51af34a44ad3add4ed98698f64b6a510227b52f3bc4
|
File details
Details for the file oelint_parser-8.8.1-py3-none-any.whl.
File metadata
- Download URL: oelint_parser-8.8.1-py3-none-any.whl
- Upload date:
- Size: 68.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad43aa6b0489580c9176b90268e11a5d69d88ec4d682b32cf8d99614c77536b8
|
|
| MD5 |
20e447536ccbbafa5ee5b82523941055
|
|
| BLAKE2b-256 |
9c04f7c4f59484ca4dd5748a94c08f71a6ad0d43c7232801f64460d94d39c550
|