All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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

* 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

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.