diff mbox series

[1/1] utils/genrandconfig: switch to async/await format

Message ID 20230206150847.3621475-1-james.hilliard1@gmail.com
State New
Headers show
Series [1/1] utils/genrandconfig: switch to async/await format | expand

Commit Message

James Hilliard Feb. 6, 2023, 3:08 p.m. UTC
This requires python 3.6 or newer but is a bit cleaner.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
 utils/genrandconfig | 62 +++++++++++++++++----------------------------
 1 file changed, 23 insertions(+), 39 deletions(-)

Comments

Arnout Vandecappelle Feb. 6, 2023, 4:50 p.m. UTC | #1
On 06/02/2023 16:08, James Hilliard wrote:
> This requires python 3.6 or newer but is a bit cleaner.

  Does it? According to [1]

"The async def type of coroutine was added in Python 3.5"


  Regards,
  Arnout

[1] https://docs.python.org/3.5/library/asyncio-task.html#coroutines


> 
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> ---
>   utils/genrandconfig | 62 +++++++++++++++++----------------------------
>   1 file changed, 23 insertions(+), 39 deletions(-)
> 
> diff --git a/utils/genrandconfig b/utils/genrandconfig
> index b3576f8a51..8947898d88 100755
> --- a/utils/genrandconfig
> +++ b/utils/genrandconfig
> @@ -28,11 +28,6 @@ import traceback
>   from distutils.version import StrictVersion
>   import platform
>   
> -if sys.version_info < (3, 8):
> -    from asyncio import coroutine
> -else:
> -    from types import coroutine
> -
>   
>   class SystemInfo:
>       DEFAULT_NEEDED_PROGS = ["make", "git", "gcc", "timeout"]
> @@ -60,8 +55,7 @@ class SystemInfo:
>           # --
>           return None
>   
> -    @coroutine
> -    def has(self, prog):
> +    async def has(self, prog):
>           """Checks whether a program is available.
>           Lazily evaluates missing entries.
>   
> @@ -76,11 +70,11 @@ class SystemInfo:
>           have_it = self.find_prog(prog)
>           # java[c] needs special care
>           if have_it and prog in ('java', 'javac'):
> -            proc = yield from asyncio.create_subprocess_shell(
> +            proc = await asyncio.create_subprocess_shell(
>                   "%s -version | grep gcj" % prog,
>                   stdout=asyncio.subprocess.DEVNULL,
>                   stderr=asyncio.subprocess.DEVNULL)
> -            ret = yield from proc.wait()
> +            ret = await proc.wait()
>               if ret != 1:
>                   have_it = False
>           # --
> @@ -159,8 +153,7 @@ def get_toolchain_configs(toolchains_csv, buildrootdir):
>       return configs
>   
>   
> -@coroutine
> -def is_toolchain_usable(configfile, config):
> +async def is_toolchain_usable(configfile, config):
>       """Check if the toolchain is actually usable."""
>   
>       with open(configfile) as configf:
> @@ -180,9 +173,9 @@ def is_toolchain_usable(configfile, config):
>              'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64=y\n' in configlines or \
>              'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE=y\n' in configlines or \
>              'BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB=y\n' in configlines:
> -            proc = yield from asyncio.create_subprocess_exec(
> +            proc = await asyncio.create_subprocess_exec(
>                   'ldd', '--version', stdout=asyncio.subprocess.PIPE)
> -            ldd_version_output, _ = yield from proc.communicate()
> +            ldd_version_output, _ = await proc.communicate()
>               if proc.returncode:
>                   return False
>               glibc_version = ldd_version_output.decode().splitlines()[0].split()[-1]
> @@ -193,8 +186,7 @@ def is_toolchain_usable(configfile, config):
>       return True
>   
>   
> -@coroutine
> -def fixup_config(sysinfo, configfile):
> +async def fixup_config(sysinfo, configfile):
>       """Finalize the configuration and reject any problematic combinations
>   
>       This function returns 'True' when the configuration has been
> @@ -210,8 +202,7 @@ def fixup_config(sysinfo, configfile):
>   
>       BR2_TOOLCHAIN_EXTERNAL_URL = 'BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/'
>   
> -    has_java = yield from sysinfo.has("java")
> -    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not has_java:
> +    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not await sysinfo.has("java"):
>           return False
>       # The ctng toolchain is affected by PR58854
>       if 'BR2_PACKAGE_LTTNG_TOOLS=y\n' in configlines and \
> @@ -654,8 +645,7 @@ def fixup_config(sysinfo, configfile):
>       return True
>   
>   
> -@coroutine
> -def gen_config(args):
> +async def gen_config(args):
>       """Generate a new random configuration
>   
>       This function generates the configuration, by choosing a random
> @@ -713,8 +703,7 @@ def gen_config(args):
>   
>       # Randomly enable BR2_REPRODUCIBLE 10% of times
>       # also enable tar filesystem images for testing
> -    has_diffoscope = yield from sysinfo.has("diffoscope")
> -    if has_diffoscope and randint(0, 10) == 0:
> +    if await sysinfo.has("diffoscope") and randint(0, 10) == 0:
>           configlines.append("BR2_REPRODUCIBLE=y\n")
>           configlines.append("BR2_TARGET_ROOTFS_TAR=y\n")
>   
> @@ -728,14 +717,13 @@ def gen_config(args):
>       with open(configfile, "w+") as configf:
>           configf.writelines(configlines)
>   
> -    proc = yield from asyncio.create_subprocess_exec(
> +    proc = await asyncio.create_subprocess_exec(
>           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> -    ret = yield from proc.wait()
> +    ret = await proc.wait()
>       if ret:
>           return ret
>   
> -    toolchain_usable = yield from is_toolchain_usable(configfile, toolchainconfig)
> -    if not toolchain_usable:
> +    if not await is_toolchain_usable(configfile, toolchainconfig):
>           return 2
>   
>       # Now, generate the random selection of packages, and fixup
> @@ -749,37 +737,33 @@ def gen_config(args):
>                     file=sys.stderr)
>               return 1
>           bounded_loop -= 1
> -        make_rand = [
> +        proc = await asyncio.create_subprocess_exec(
>               "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
>               "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
>               "KCONFIG_PROBABILITY=%d" % randint(1, 20),
> -            "randpackageconfig" if args.toolchains_csv else "randconfig"
> -        ]
> -        proc = yield from asyncio.create_subprocess_exec(*make_rand)
> -        ret = yield from proc.wait()
> +            "randpackageconfig" if args.toolchains_csv else "randconfig")
> +        ret = await proc.wait()
>           if ret:
>               return ret
>   
> -        ret = yield from fixup_config(sysinfo, configfile)
> -        if ret:
> +        if await fixup_config(sysinfo, configfile):
>               break
>   
> -    proc = yield from asyncio.create_subprocess_exec(
> +    proc = await asyncio.create_subprocess_exec(
>           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> -    ret = yield from proc.wait()
> +    ret = await proc.wait()
>       if ret:
>           return ret
>   
> -    proc = yield from asyncio.create_subprocess_exec(
> +    proc = await asyncio.create_subprocess_exec(
>           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "savedefconfig")
> -    ret = yield from proc.wait()
> +    ret = await proc.wait()
>       if ret:
>           return ret
>   
> -    proc = yield from asyncio.create_subprocess_exec(
> +    proc = await asyncio.create_subprocess_exec(
>           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "dependencies")
> -    ret = yield from proc.wait()
> -    return ret
> +    return await proc.wait()
>   
>   
>   if __name__ == '__main__':
James Hilliard Feb. 6, 2023, 4:52 p.m. UTC | #2
On Mon, Feb 6, 2023 at 9:50 AM Arnout Vandecappelle <arnout@mind.be> wrote:
>
>
>
> On 06/02/2023 16:08, James Hilliard wrote:
> > This requires python 3.6 or newer but is a bit cleaner.
>
>   Does it? According to [1]
>
> "The async def type of coroutine was added in Python 3.5"

Hmm, yeah, must have mixed that up with something else that
needed 3.6.

>
>
>   Regards,
>   Arnout
>
> [1] https://docs.python.org/3.5/library/asyncio-task.html#coroutines
>
>
> >
> > Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> > ---
> >   utils/genrandconfig | 62 +++++++++++++++++----------------------------
> >   1 file changed, 23 insertions(+), 39 deletions(-)
> >
> > diff --git a/utils/genrandconfig b/utils/genrandconfig
> > index b3576f8a51..8947898d88 100755
> > --- a/utils/genrandconfig
> > +++ b/utils/genrandconfig
> > @@ -28,11 +28,6 @@ import traceback
> >   from distutils.version import StrictVersion
> >   import platform
> >
> > -if sys.version_info < (3, 8):
> > -    from asyncio import coroutine
> > -else:
> > -    from types import coroutine
> > -
> >
> >   class SystemInfo:
> >       DEFAULT_NEEDED_PROGS = ["make", "git", "gcc", "timeout"]
> > @@ -60,8 +55,7 @@ class SystemInfo:
> >           # --
> >           return None
> >
> > -    @coroutine
> > -    def has(self, prog):
> > +    async def has(self, prog):
> >           """Checks whether a program is available.
> >           Lazily evaluates missing entries.
> >
> > @@ -76,11 +70,11 @@ class SystemInfo:
> >           have_it = self.find_prog(prog)
> >           # java[c] needs special care
> >           if have_it and prog in ('java', 'javac'):
> > -            proc = yield from asyncio.create_subprocess_shell(
> > +            proc = await asyncio.create_subprocess_shell(
> >                   "%s -version | grep gcj" % prog,
> >                   stdout=asyncio.subprocess.DEVNULL,
> >                   stderr=asyncio.subprocess.DEVNULL)
> > -            ret = yield from proc.wait()
> > +            ret = await proc.wait()
> >               if ret != 1:
> >                   have_it = False
> >           # --
> > @@ -159,8 +153,7 @@ def get_toolchain_configs(toolchains_csv, buildrootdir):
> >       return configs
> >
> >
> > -@coroutine
> > -def is_toolchain_usable(configfile, config):
> > +async def is_toolchain_usable(configfile, config):
> >       """Check if the toolchain is actually usable."""
> >
> >       with open(configfile) as configf:
> > @@ -180,9 +173,9 @@ def is_toolchain_usable(configfile, config):
> >              'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64=y\n' in configlines or \
> >              'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE=y\n' in configlines or \
> >              'BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB=y\n' in configlines:
> > -            proc = yield from asyncio.create_subprocess_exec(
> > +            proc = await asyncio.create_subprocess_exec(
> >                   'ldd', '--version', stdout=asyncio.subprocess.PIPE)
> > -            ldd_version_output, _ = yield from proc.communicate()
> > +            ldd_version_output, _ = await proc.communicate()
> >               if proc.returncode:
> >                   return False
> >               glibc_version = ldd_version_output.decode().splitlines()[0].split()[-1]
> > @@ -193,8 +186,7 @@ def is_toolchain_usable(configfile, config):
> >       return True
> >
> >
> > -@coroutine
> > -def fixup_config(sysinfo, configfile):
> > +async def fixup_config(sysinfo, configfile):
> >       """Finalize the configuration and reject any problematic combinations
> >
> >       This function returns 'True' when the configuration has been
> > @@ -210,8 +202,7 @@ def fixup_config(sysinfo, configfile):
> >
> >       BR2_TOOLCHAIN_EXTERNAL_URL = 'BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/'
> >
> > -    has_java = yield from sysinfo.has("java")
> > -    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not has_java:
> > +    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not await sysinfo.has("java"):
> >           return False
> >       # The ctng toolchain is affected by PR58854
> >       if 'BR2_PACKAGE_LTTNG_TOOLS=y\n' in configlines and \
> > @@ -654,8 +645,7 @@ def fixup_config(sysinfo, configfile):
> >       return True
> >
> >
> > -@coroutine
> > -def gen_config(args):
> > +async def gen_config(args):
> >       """Generate a new random configuration
> >
> >       This function generates the configuration, by choosing a random
> > @@ -713,8 +703,7 @@ def gen_config(args):
> >
> >       # Randomly enable BR2_REPRODUCIBLE 10% of times
> >       # also enable tar filesystem images for testing
> > -    has_diffoscope = yield from sysinfo.has("diffoscope")
> > -    if has_diffoscope and randint(0, 10) == 0:
> > +    if await sysinfo.has("diffoscope") and randint(0, 10) == 0:
> >           configlines.append("BR2_REPRODUCIBLE=y\n")
> >           configlines.append("BR2_TARGET_ROOTFS_TAR=y\n")
> >
> > @@ -728,14 +717,13 @@ def gen_config(args):
> >       with open(configfile, "w+") as configf:
> >           configf.writelines(configlines)
> >
> > -    proc = yield from asyncio.create_subprocess_exec(
> > +    proc = await asyncio.create_subprocess_exec(
> >           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> > -    ret = yield from proc.wait()
> > +    ret = await proc.wait()
> >       if ret:
> >           return ret
> >
> > -    toolchain_usable = yield from is_toolchain_usable(configfile, toolchainconfig)
> > -    if not toolchain_usable:
> > +    if not await is_toolchain_usable(configfile, toolchainconfig):
> >           return 2
> >
> >       # Now, generate the random selection of packages, and fixup
> > @@ -749,37 +737,33 @@ def gen_config(args):
> >                     file=sys.stderr)
> >               return 1
> >           bounded_loop -= 1
> > -        make_rand = [
> > +        proc = await asyncio.create_subprocess_exec(
> >               "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
> >               "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
> >               "KCONFIG_PROBABILITY=%d" % randint(1, 20),
> > -            "randpackageconfig" if args.toolchains_csv else "randconfig"
> > -        ]
> > -        proc = yield from asyncio.create_subprocess_exec(*make_rand)
> > -        ret = yield from proc.wait()
> > +            "randpackageconfig" if args.toolchains_csv else "randconfig")
> > +        ret = await proc.wait()
> >           if ret:
> >               return ret
> >
> > -        ret = yield from fixup_config(sysinfo, configfile)
> > -        if ret:
> > +        if await fixup_config(sysinfo, configfile):
> >               break
> >
> > -    proc = yield from asyncio.create_subprocess_exec(
> > +    proc = await asyncio.create_subprocess_exec(
> >           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
> > -    ret = yield from proc.wait()
> > +    ret = await proc.wait()
> >       if ret:
> >           return ret
> >
> > -    proc = yield from asyncio.create_subprocess_exec(
> > +    proc = await asyncio.create_subprocess_exec(
> >           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "savedefconfig")
> > -    ret = yield from proc.wait()
> > +    ret = await proc.wait()
> >       if ret:
> >           return ret
> >
> > -    proc = yield from asyncio.create_subprocess_exec(
> > +    proc = await asyncio.create_subprocess_exec(
> >           "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "dependencies")
> > -    ret = yield from proc.wait()
> > -    return ret
> > +    return await proc.wait()
> >
> >
> >   if __name__ == '__main__':
diff mbox series

Patch

diff --git a/utils/genrandconfig b/utils/genrandconfig
index b3576f8a51..8947898d88 100755
--- a/utils/genrandconfig
+++ b/utils/genrandconfig
@@ -28,11 +28,6 @@  import traceback
 from distutils.version import StrictVersion
 import platform
 
-if sys.version_info < (3, 8):
-    from asyncio import coroutine
-else:
-    from types import coroutine
-
 
 class SystemInfo:
     DEFAULT_NEEDED_PROGS = ["make", "git", "gcc", "timeout"]
@@ -60,8 +55,7 @@  class SystemInfo:
         # --
         return None
 
-    @coroutine
-    def has(self, prog):
+    async def has(self, prog):
         """Checks whether a program is available.
         Lazily evaluates missing entries.
 
@@ -76,11 +70,11 @@  class SystemInfo:
         have_it = self.find_prog(prog)
         # java[c] needs special care
         if have_it and prog in ('java', 'javac'):
-            proc = yield from asyncio.create_subprocess_shell(
+            proc = await asyncio.create_subprocess_shell(
                 "%s -version | grep gcj" % prog,
                 stdout=asyncio.subprocess.DEVNULL,
                 stderr=asyncio.subprocess.DEVNULL)
-            ret = yield from proc.wait()
+            ret = await proc.wait()
             if ret != 1:
                 have_it = False
         # --
@@ -159,8 +153,7 @@  def get_toolchain_configs(toolchains_csv, buildrootdir):
     return configs
 
 
-@coroutine
-def is_toolchain_usable(configfile, config):
+async def is_toolchain_usable(configfile, config):
     """Check if the toolchain is actually usable."""
 
     with open(configfile) as configf:
@@ -180,9 +173,9 @@  def is_toolchain_usable(configfile, config):
            'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64=y\n' in configlines or \
            'BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE=y\n' in configlines or \
            'BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB=y\n' in configlines:
-            proc = yield from asyncio.create_subprocess_exec(
+            proc = await asyncio.create_subprocess_exec(
                 'ldd', '--version', stdout=asyncio.subprocess.PIPE)
-            ldd_version_output, _ = yield from proc.communicate()
+            ldd_version_output, _ = await proc.communicate()
             if proc.returncode:
                 return False
             glibc_version = ldd_version_output.decode().splitlines()[0].split()[-1]
@@ -193,8 +186,7 @@  def is_toolchain_usable(configfile, config):
     return True
 
 
-@coroutine
-def fixup_config(sysinfo, configfile):
+async def fixup_config(sysinfo, configfile):
     """Finalize the configuration and reject any problematic combinations
 
     This function returns 'True' when the configuration has been
@@ -210,8 +202,7 @@  def fixup_config(sysinfo, configfile):
 
     BR2_TOOLCHAIN_EXTERNAL_URL = 'BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/'
 
-    has_java = yield from sysinfo.has("java")
-    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not has_java:
+    if "BR2_NEEDS_HOST_JAVA=y\n" in configlines and not await sysinfo.has("java"):
         return False
     # The ctng toolchain is affected by PR58854
     if 'BR2_PACKAGE_LTTNG_TOOLS=y\n' in configlines and \
@@ -654,8 +645,7 @@  def fixup_config(sysinfo, configfile):
     return True
 
 
-@coroutine
-def gen_config(args):
+async def gen_config(args):
     """Generate a new random configuration
 
     This function generates the configuration, by choosing a random
@@ -713,8 +703,7 @@  def gen_config(args):
 
     # Randomly enable BR2_REPRODUCIBLE 10% of times
     # also enable tar filesystem images for testing
-    has_diffoscope = yield from sysinfo.has("diffoscope")
-    if has_diffoscope and randint(0, 10) == 0:
+    if await sysinfo.has("diffoscope") and randint(0, 10) == 0:
         configlines.append("BR2_REPRODUCIBLE=y\n")
         configlines.append("BR2_TARGET_ROOTFS_TAR=y\n")
 
@@ -728,14 +717,13 @@  def gen_config(args):
     with open(configfile, "w+") as configf:
         configf.writelines(configlines)
 
-    proc = yield from asyncio.create_subprocess_exec(
+    proc = await asyncio.create_subprocess_exec(
         "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
-    ret = yield from proc.wait()
+    ret = await proc.wait()
     if ret:
         return ret
 
-    toolchain_usable = yield from is_toolchain_usable(configfile, toolchainconfig)
-    if not toolchain_usable:
+    if not await is_toolchain_usable(configfile, toolchainconfig):
         return 2
 
     # Now, generate the random selection of packages, and fixup
@@ -749,37 +737,33 @@  def gen_config(args):
                   file=sys.stderr)
             return 1
         bounded_loop -= 1
-        make_rand = [
+        proc = await asyncio.create_subprocess_exec(
             "make", "O=%s" % args.outputdir, "-C", args.buildrootdir,
             "KCONFIG_SEED=0x%s" % hexlify(os.urandom(4)).decode("ascii").upper(),
             "KCONFIG_PROBABILITY=%d" % randint(1, 20),
-            "randpackageconfig" if args.toolchains_csv else "randconfig"
-        ]
-        proc = yield from asyncio.create_subprocess_exec(*make_rand)
-        ret = yield from proc.wait()
+            "randpackageconfig" if args.toolchains_csv else "randconfig")
+        ret = await proc.wait()
         if ret:
             return ret
 
-        ret = yield from fixup_config(sysinfo, configfile)
-        if ret:
+        if await fixup_config(sysinfo, configfile):
             break
 
-    proc = yield from asyncio.create_subprocess_exec(
+    proc = await asyncio.create_subprocess_exec(
         "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "olddefconfig")
-    ret = yield from proc.wait()
+    ret = await proc.wait()
     if ret:
         return ret
 
-    proc = yield from asyncio.create_subprocess_exec(
+    proc = await asyncio.create_subprocess_exec(
         "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "savedefconfig")
-    ret = yield from proc.wait()
+    ret = await proc.wait()
     if ret:
         return ret
 
-    proc = yield from asyncio.create_subprocess_exec(
+    proc = await asyncio.create_subprocess_exec(
         "make", "O=%s" % args.outputdir, "-C", args.buildrootdir, "dependencies")
-    ret = yield from proc.wait()
-    return ret
+    return await proc.wait()
 
 
 if __name__ == '__main__':