aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Laplante <chris.laplante@agilent.com>2023-10-23 12:46:12 -0400
committerLuca Ceresoli <luca.ceresoli@bootlin.com>2023-10-27 12:28:03 +0200
commit27ff73908051b977e77c5920a194ff89a30a83dc (patch)
tree825847758f67fd684718a6cce4348bedf9dc1fcd
parentaf6ca0ca827ff1e797ec74d95aa1443687f3ae0f (diff)
downloadbitbake-contrib-27ff73908051b977e77c5920a194ff89a30a83dc.tar.gz
codeparser/utils: clean up more deprecated AST usages
Also introduces bb.utils.ast_node_str_value method to simplify handling of AST str nodes. Signed-off-by: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
-rw-r--r--lib/bb/codeparser.py22
-rw-r--r--lib/bb/utils.py10
2 files changed, 20 insertions, 12 deletions
diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py
index cd3940943..92ed31fa5 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 b401fa5ec..0ac304163 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
@@ -33,6 +34,7 @@ import random
import socket
import struct
import tempfile
+from typing import Optional
from subprocess import getstatusoutput
from contextlib import contextmanager
from ctypes import cdll
@@ -1863,3 +1865,11 @@ def lock_timeout(lock):
yield held
finally:
lock.release()
+
+def ast_node_str_value(node: ast.AST) -> Optional[str]:
+ """
+ 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