diff options
author | Matt Clay <matt@mystile.com> | 2023-02-24 00:37:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-24 00:37:12 +0100 |
commit | f587856beb4afa11040418ecf83b0bfd3d528ab6 (patch) | |
tree | 0cd25995cb164c64dd8bba81403196750326e0ee /hacking | |
parent | Remove unused integration test support files (#80081) (diff) | |
download | ansible-f587856beb4afa11040418ecf83b0bfd3d528ab6.tar.xz ansible-f587856beb4afa11040418ecf83b0bfd3d528ab6.zip |
Remove straight.plugin dependency (#80084)
Diffstat (limited to 'hacking')
-rwxr-xr-x | hacking/build-ansible.py | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/hacking/build-ansible.py b/hacking/build-ansible.py index c108c1861f..717cf1c1ce 100755 --- a/hacking/build-ansible.py +++ b/hacking/build-ansible.py @@ -10,16 +10,20 @@ __metaclass__ = type import argparse +import importlib +import inspect import os.path +import pkgutil import sys - -from straight.plugin import load +import typing as t try: import argcomplete except ImportError: argcomplete = None +C = t.TypeVar('C') + def build_lib_path(this_script=__file__): """Return path to the common build library directory.""" @@ -55,6 +59,27 @@ def create_arg_parser(program_name): return parser +def load(package: str, subclasses: t.Type[C]) -> list[t.Type[C]]: + """Load modules in the specified package and return concrete types that derive from the specified base class.""" + for module in pkgutil.iter_modules(importlib.import_module(package).__path__, f'{package}.'): + try: + importlib.import_module(module.name) + except ImportError: + pass # ignore plugins which are missing dependencies + + types: set[t.Type[C]] = set() + queue: list[t.Type[C]] = [subclasses] + + while queue: + for child in queue.pop().__subclasses__(): + queue.append(child) + + if not inspect.isabstract(child): + types.add(child) + + return sorted(types, key=lambda sc: sc.__name__) + + def main(): """ Start our run. @@ -69,7 +94,9 @@ def main(): help='Show tracebacks and other debugging information') subparsers = arg_parser.add_subparsers(title='Subcommands', dest='command', help='for help use build-ansible.py SUBCOMMANDS -h') - subcommands.pipe('init_parser', subparsers.add_parser) + + for subcommand in subcommands: + subcommand.init_parser(subparsers.add_parser) if argcomplete: argcomplete.autocomplete(arg_parser) |