* [PATCH 1/3] codeparser: add missing 'import os' @ 2023-10-20 18:44 chris.laplante 2023-10-20 18:44 ` [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages chris.laplante 2023-10-20 18:44 ` [PATCH 3/3] codegen: cleanup " chris.laplante 0 siblings, 2 replies; 5+ messages in thread From: chris.laplante @ 2023-10-20 18:44 UTC (permalink / raw) To: bitbake-devel; +Cc: Chris Laplante From: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Chris Laplante <chris.laplante@agilent.com> --- lib/bb/codeparser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py index cb068844bb..cd39409434 100644 --- a/lib/bb/codeparser.py +++ b/lib/bb/codeparser.py @@ -62,6 +62,7 @@ def check_indent(codestr): modulecode_deps = {} def add_module_functions(fn, functions, namespace): + import os fstat = os.stat(fn) fixedhash = fn + ":" + str(fstat.st_size) + ":" + str(fstat.st_mtime) for f in functions: -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages 2023-10-20 18:44 [PATCH 1/3] codeparser: add missing 'import os' chris.laplante @ 2023-10-20 18:44 ` chris.laplante 2023-10-20 23:29 ` [bitbake-devel] " Alexandre Belloni 2023-10-20 18:44 ` [PATCH 3/3] codegen: cleanup " chris.laplante 1 sibling, 1 reply; 5+ messages in thread From: chris.laplante @ 2023-10-20 18:44 UTC (permalink / raw) To: bitbake-devel; +Cc: Chris Laplante From: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Chris Laplante <chris.laplante@agilent.com> --- lib/bb/codeparser.py | 22 ++++++++++------------ lib/bb/utils.py | 9 +++++++++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py index cd39409434..92ed31fa5f 100644 --- a/lib/bb/codeparser.py +++ b/lib/bb/codeparser.py @@ -256,19 +256,18 @@ class PythonParser(): def visit_Call(self, node): name = self.called_node_name(node.func) if name and (name.endswith(self.getvars) or name.endswith(self.getvarflags) or name in self.containsfuncs or name in self.containsanyfuncs): - if isinstance(node.args[0], ast.Constant) and isinstance(node.args[0].value, str): - varname = node.args[0].value - if name in self.containsfuncs and isinstance(node.args[1], ast.Str): + if (varname := bb.utils.ast_node_str_value(node.args[0])) is not None: + if name in self.containsfuncs and bb.utils.ast_node_str_value(node.args[1]) is not None: if varname not in self.contains: self.contains[varname] = set() - self.contains[varname].add(node.args[1].s) - elif name in self.containsanyfuncs and isinstance(node.args[1], ast.Str): + self.contains[varname].add(node.args[1].value) + elif name in self.containsanyfuncs and bb.utils.ast_node_str_value(node.args[1]) is not None: if varname not in self.contains: self.contains[varname] = set() - self.contains[varname].update(node.args[1].s.split()) + self.contains[varname].update(node.args[1].value.split()) elif name.endswith(self.getvarflags): - if isinstance(node.args[1], ast.Str): - self.references.add('%s[%s]' % (varname, node.args[1].s)) + if bb.utils.ast_node_str_value(node.args[1]) is not None: + self.references.add('%s[%s]' % (varname, node.args[1].value)) else: self.warn(node.func, node.args[1]) else: @@ -276,8 +275,7 @@ class PythonParser(): else: self.warn(node.func, node.args[0]) elif name and name.endswith(".expand"): - if isinstance(node.args[0], ast.Str): - value = node.args[0].s + if (value := bb.utils.ast_node_str_value(node.args[0])) is not None: d = bb.data.init() parser = d.expandWithRefs(value, self.name) self.references |= parser.references @@ -287,8 +285,8 @@ class PythonParser(): self.contains[varname] = set() self.contains[varname] |= parser.contains[varname] elif name in self.execfuncs: - if isinstance(node.args[0], ast.Str): - self.var_execs.add(node.args[0].s) + if bb.utils.ast_node_str_value(node.args[0]) is not None: + self.var_execs.add(node.args[0].value) else: self.warn(node.func, node.args[0]) elif name and isinstance(node.func, (ast.Name, ast.Attribute)): diff --git a/lib/bb/utils.py b/lib/bb/utils.py index b401fa5ec7..55f8231999 100644 --- a/lib/bb/utils.py +++ b/lib/bb/utils.py @@ -11,6 +11,7 @@ import re, fcntl, os, string, stat, shutil, time import sys import errno import logging +import ast import bb import bb.msg import locale @@ -1863,3 +1864,11 @@ def lock_timeout(lock): yield held finally: lock.release() + +def ast_node_str_value(node: ast.AST) -> str | None: + """ + Returns node value if it is an `ast.Constant` str; None otherwise + """ + if isinstance(node, ast.Constant) and isinstance(node.value, str): + return node.value + return None -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [bitbake-devel] [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages 2023-10-20 18:44 ` [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages chris.laplante @ 2023-10-20 23:29 ` Alexandre Belloni 2023-10-23 15:02 ` chris.laplante 0 siblings, 1 reply; 5+ messages in thread From: Alexandre Belloni @ 2023-10-20 23:29 UTC (permalink / raw) To: chris.laplante; +Cc: bitbake-devel Traceback (most recent call last): File "/home/pokybuild/yocto-worker/musl-qemux86/build/bitbake/bin/bitbake", line 21, in <module> import bb File "/home/pokybuild/yocto-worker/musl-qemux86/build/bitbake/lib/bb/__init__.py", line 137, in <module> import bb.msg File "/home/pokybuild/yocto-worker/musl-qemux86/build/bitbake/lib/bb/msg.py", line 20, in <module> import bb.event File "/home/pokybuild/yocto-worker/musl-qemux86/build/bitbake/lib/bb/event.py", line 23, in <module> import bb.utils File "/home/pokybuild/yocto-worker/musl-qemux86/build/bitbake/lib/bb/utils.py", line 1868, in <module> def ast_node_str_value(node: ast.AST) -> str | None: TypeError: unsupported operand type(s) for |: 'type' and 'NoneType' On 20/10/2023 14:44:58-0400, Chris Laplante via lists.openembedded.org wrote: > From: Chris Laplante <chris.laplante@agilent.com> > > Signed-off-by: Chris Laplante <chris.laplante@agilent.com> > --- > lib/bb/codeparser.py | 22 ++++++++++------------ > lib/bb/utils.py | 9 +++++++++ > 2 files changed, 19 insertions(+), 12 deletions(-) > > diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py > index cd39409434..92ed31fa5f 100644 > --- a/lib/bb/codeparser.py > +++ b/lib/bb/codeparser.py > @@ -256,19 +256,18 @@ class PythonParser(): > def visit_Call(self, node): > name = self.called_node_name(node.func) > if name and (name.endswith(self.getvars) or name.endswith(self.getvarflags) or name in self.containsfuncs or name in self.containsanyfuncs): > - if isinstance(node.args[0], ast.Constant) and isinstance(node.args[0].value, str): > - varname = node.args[0].value > - if name in self.containsfuncs and isinstance(node.args[1], ast.Str): > + if (varname := bb.utils.ast_node_str_value(node.args[0])) is not None: > + if name in self.containsfuncs and bb.utils.ast_node_str_value(node.args[1]) is not None: > if varname not in self.contains: > self.contains[varname] = set() > - self.contains[varname].add(node.args[1].s) > - elif name in self.containsanyfuncs and isinstance(node.args[1], ast.Str): > + self.contains[varname].add(node.args[1].value) > + elif name in self.containsanyfuncs and bb.utils.ast_node_str_value(node.args[1]) is not None: > if varname not in self.contains: > self.contains[varname] = set() > - self.contains[varname].update(node.args[1].s.split()) > + self.contains[varname].update(node.args[1].value.split()) > elif name.endswith(self.getvarflags): > - if isinstance(node.args[1], ast.Str): > - self.references.add('%s[%s]' % (varname, node.args[1].s)) > + if bb.utils.ast_node_str_value(node.args[1]) is not None: > + self.references.add('%s[%s]' % (varname, node.args[1].value)) > else: > self.warn(node.func, node.args[1]) > else: > @@ -276,8 +275,7 @@ class PythonParser(): > else: > self.warn(node.func, node.args[0]) > elif name and name.endswith(".expand"): > - if isinstance(node.args[0], ast.Str): > - value = node.args[0].s > + if (value := bb.utils.ast_node_str_value(node.args[0])) is not None: > d = bb.data.init() > parser = d.expandWithRefs(value, self.name) > self.references |= parser.references > @@ -287,8 +285,8 @@ class PythonParser(): > self.contains[varname] = set() > self.contains[varname] |= parser.contains[varname] > elif name in self.execfuncs: > - if isinstance(node.args[0], ast.Str): > - self.var_execs.add(node.args[0].s) > + if bb.utils.ast_node_str_value(node.args[0]) is not None: > + self.var_execs.add(node.args[0].value) > else: > self.warn(node.func, node.args[0]) > elif name and isinstance(node.func, (ast.Name, ast.Attribute)): > diff --git a/lib/bb/utils.py b/lib/bb/utils.py > index b401fa5ec7..55f8231999 100644 > --- a/lib/bb/utils.py > +++ b/lib/bb/utils.py > @@ -11,6 +11,7 @@ import re, fcntl, os, string, stat, shutil, time > import sys > import errno > import logging > +import ast > import bb > import bb.msg > import locale > @@ -1863,3 +1864,11 @@ def lock_timeout(lock): > yield held > finally: > lock.release() > + > +def ast_node_str_value(node: ast.AST) -> str | None: > + """ > + Returns node value if it is an `ast.Constant` str; None otherwise > + """ > + if isinstance(node, ast.Constant) and isinstance(node.value, str): > + return node.value > + return None > -- > 2.34.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#15270): https://lists.openembedded.org/g/bitbake-devel/message/15270 > Mute This Topic: https://lists.openembedded.org/mt/102087479/3617179 > Group Owner: bitbake-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [alexandre.belloni@bootlin.com] > -=-=-=-=-=-=-=-=-=-=-=- > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [bitbake-devel] [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages 2023-10-20 23:29 ` [bitbake-devel] " Alexandre Belloni @ 2023-10-23 15:02 ` chris.laplante 0 siblings, 0 replies; 5+ messages in thread From: chris.laplante @ 2023-10-23 15:02 UTC (permalink / raw) To: alexandre.belloni@bootlin.com; +Cc: bitbake-devel@lists.openembedded.org > > Traceback (most recent call last): > File "/home/pokybuild/yocto-worker/musl- > qemux86/build/bitbake/bin/bitbake", line 21, in <module> > import bb > File "/home/pokybuild/yocto-worker/musl- > qemux86/build/bitbake/lib/bb/__init__.py", line 137, in <module> > import bb.msg > File "/home/pokybuild/yocto-worker/musl- > qemux86/build/bitbake/lib/bb/msg.py", line 20, in <module> > import bb.event > File "/home/pokybuild/yocto-worker/musl- > qemux86/build/bitbake/lib/bb/event.py", line 23, in <module> > import bb.utils > File "/home/pokybuild/yocto-worker/musl- > qemux86/build/bitbake/lib/bb/utils.py", line 1868, in <module> > def ast_node_str_value(node: ast.AST) -> str | None: > TypeError: unsupported operand type(s) for |: 'type' and 'NoneType' > My mistake, that syntax was introduced in Python 3.10. I will resubmit. Thanks, Chris ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] codegen: cleanup deprecated AST usages 2023-10-20 18:44 [PATCH 1/3] codeparser: add missing 'import os' chris.laplante 2023-10-20 18:44 ` [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages chris.laplante @ 2023-10-20 18:44 ` chris.laplante 1 sibling, 0 replies; 5+ messages in thread From: chris.laplante @ 2023-10-20 18:44 UTC (permalink / raw) To: bitbake-devel; +Cc: Chris Laplante From: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Chris Laplante <chris.laplante@agilent.com> --- lib/codegen.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/lib/codegen.py b/lib/codegen.py index 6955a7ada5..018b283177 100644 --- a/lib/codegen.py +++ b/lib/codegen.py @@ -392,19 +392,7 @@ class SourceGenerator(NodeVisitor): def visit_Name(self, node): self.write(node.id) - def visit_Str(self, node): - self.write(repr(node.s)) - - def visit_Bytes(self, node): - self.write(repr(node.s)) - - def visit_Num(self, node): - self.write(repr(node.n)) - def visit_Constant(self, node): - # Python 3.8 deprecated visit_Num(), visit_Str(), visit_Bytes(), - # visit_NameConstant() and visit_Ellipsis(). They can be removed once we - # require 3.8+. self.write(repr(node.value)) def visit_Tuple(self, node): -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-10-23 15:02 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-20 18:44 [PATCH 1/3] codeparser: add missing 'import os' chris.laplante 2023-10-20 18:44 ` [PATCH 2/3] codeparser/utils: clean up more deprecated AST usages chris.laplante 2023-10-20 23:29 ` [bitbake-devel] " Alexandre Belloni 2023-10-23 15:02 ` chris.laplante 2023-10-20 18:44 ` [PATCH 3/3] codegen: cleanup " chris.laplante
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.