From 2765ab6f2843c0b8340a25a7fbd68196fa7ef3b2 Mon Sep 17 00:00:00 2001 From: Matt Davis <6775756+nitzmahone@users.noreply.github.com> Date: Fri, 9 Jun 2023 17:03:11 -0700 Subject: [PATCH] Remove straight.plugin dependency (#80084) (#81020) (cherry picked from commit f587856) --- changelogs/fragments/build-no-straight.yaml | 2 ++ docs/docsite/requirements.txt | 1 - hacking/build-ansible.py | 34 +++++++++++++++++-- packaging/pep517_backend/_backend.py | 1 - .../minimum-build-constraints.txt | 1 - .../modernish-build-constraints.txt | 1 - 6 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/build-no-straight.yaml diff --git a/changelogs/fragments/build-no-straight.yaml b/changelogs/fragments/build-no-straight.yaml new file mode 100644 index 00000000000..61195ba9412 --- /dev/null +++ b/changelogs/fragments/build-no-straight.yaml @@ -0,0 +1,2 @@ +minor_changes: + - Removed ``straight.plugin`` from the build and packaging requirements. diff --git a/docs/docsite/requirements.txt b/docs/docsite/requirements.txt index d0362f36874..6320b85c0fb 100644 --- a/docs/docsite/requirements.txt +++ b/docs/docsite/requirements.txt @@ -14,4 +14,3 @@ sphinx-notfound-page >= 0.6 sphinx-intl sphinx-ansible-theme >= 0.9.1 resolvelib -straight.plugin # Needed for hacking/build-ansible.py which is the backend build script diff --git a/hacking/build-ansible.py b/hacking/build-ansible.py index c108c1861fa..f21f888d57c 100755 --- a/hacking/build-ansible.py +++ b/hacking/build-ansible.py @@ -5,21 +5,26 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish +from __future__ import annotations from __future__ import (absolute_import, division, print_function) __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 +60,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 +95,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) diff --git a/packaging/pep517_backend/_backend.py b/packaging/pep517_backend/_backend.py index 10d9d0d44be..8c0d6dc7b85 100644 --- a/packaging/pep517_backend/_backend.py +++ b/packaging/pep517_backend/_backend.py @@ -164,7 +164,6 @@ def get_requires_for_build_sdist( manpage_build_deps = [ 'docutils', # provides `rst2man` 'jinja2', # used in `hacking/build-ansible.py generate-man` - 'straight.plugin', # used in `hacking/build-ansible.py` for subcommand 'pyyaml', # needed for importing in-tree `ansible-core` from `lib/` ] if build_manpages_requested else [] diff --git a/test/integration/targets/canonical-pep517-self-packaging/minimum-build-constraints.txt b/test/integration/targets/canonical-pep517-self-packaging/minimum-build-constraints.txt index 22b5e5cde75..fa5f8ae522f 100644 --- a/test/integration/targets/canonical-pep517-self-packaging/minimum-build-constraints.txt +++ b/test/integration/targets/canonical-pep517-self-packaging/minimum-build-constraints.txt @@ -17,4 +17,3 @@ Jinja2 == 3.0.0 MarkupSafe == 2.0.0 PyYAML == 5.3; python_version >= "3.9" PyYAML == 5.4; python_version < "3.9" -straight.plugin == 1.4.2 diff --git a/test/integration/targets/canonical-pep517-self-packaging/modernish-build-constraints.txt b/test/integration/targets/canonical-pep517-self-packaging/modernish-build-constraints.txt index e5f5e022030..9b8e9d0aa6b 100644 --- a/test/integration/targets/canonical-pep517-self-packaging/modernish-build-constraints.txt +++ b/test/integration/targets/canonical-pep517-self-packaging/modernish-build-constraints.txt @@ -8,4 +8,3 @@ docutils == 0.19 Jinja2 == 3.1.2 MarkupSafe == 2.1.2 PyYAML == 6.0 -straight.plugin == 1.4.2 # WARNING: v1.5.0 doesn't have a Git tag / src