summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2023-04-11 13:31:52 -0700
committerGitHub <noreply@github.com>2023-04-11 13:31:52 -0700
commitaf1cbc9bb6bf75ac6d88e053ecfd75d3a0ec4321 (patch)
treefea89739c956c8f2c7f8ae05eb331677f542fed7
parentef0924883bdaf579a086a796224ec97344663043 (diff)
downloadansible-af1cbc9bb6bf75ac6d88e053ecfd75d3a0ec4321.tar.gz
[stable-2.13] ansible-test - Add support for argcomplete 3 (#80482) (#80486)
(cherry picked from commit 0371ea08d6de55635ffcbf94da5ddec0cd809495)
-rw-r--r--changelogs/fragments/ansible-test-argcomplete-3.yml2
-rw-r--r--test/lib/ansible_test/_internal/cli/argparsing/argcompletion.py25
-rw-r--r--test/lib/ansible_test/_util/controller/sanity/mypy/ansible-test.ini3
3 files changed, 25 insertions, 5 deletions
diff --git a/changelogs/fragments/ansible-test-argcomplete-3.yml b/changelogs/fragments/ansible-test-argcomplete-3.yml
new file mode 100644
index 0000000000..0c0b01b5d0
--- /dev/null
+++ b/changelogs/fragments/ansible-test-argcomplete-3.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - ansible-test - Add support for ``argcomplete`` version 3.
diff --git a/test/lib/ansible_test/_internal/cli/argparsing/argcompletion.py b/test/lib/ansible_test/_internal/cli/argparsing/argcompletion.py
index ca502c530a..44fb204a5a 100644
--- a/test/lib/ansible_test/_internal/cli/argparsing/argcompletion.py
+++ b/test/lib/ansible_test/_internal/cli/argparsing/argcompletion.py
@@ -16,10 +16,19 @@ class Substitute:
try:
import argcomplete
- from argcomplete import (
- CompletionFinder,
- default_validator,
- )
+ try:
+ # argcomplete 3+
+ # see: https://github.com/kislyuk/argcomplete/commit/bd781cb08512b94966312377186ebc5550f46ae0
+ from argcomplete.finders import (
+ CompletionFinder,
+ default_validator,
+ )
+ except ImportError:
+ # argcomplete <3
+ from argcomplete import (
+ CompletionFinder,
+ default_validator,
+ )
warn = argcomplete.warn # pylint: disable=invalid-name
except ImportError:
@@ -70,7 +79,13 @@ class CompType(enum.Enum):
def register_safe_action(action_type): # type: (t.Type[argparse.Action]) -> None
"""Register the given action as a safe action for argcomplete to use during completion if it is not already registered."""
if argcomplete and action_type not in argcomplete.safe_actions:
- argcomplete.safe_actions += (action_type,)
+ if isinstance(argcomplete.safe_actions, set):
+ # argcomplete 3+
+ # see: https://github.com/kislyuk/argcomplete/commit/bd781cb08512b94966312377186ebc5550f46ae0
+ argcomplete.safe_actions.add(action_type)
+ else:
+ # argcomplete <3
+ argcomplete.safe_actions += (action_type,)
def get_comp_type(): # type: () -> t.Optional[CompType]
diff --git a/test/lib/ansible_test/_util/controller/sanity/mypy/ansible-test.ini b/test/lib/ansible_test/_util/controller/sanity/mypy/ansible-test.ini
index 190e9529a0..55738f87c6 100644
--- a/test/lib/ansible_test/_util/controller/sanity/mypy/ansible-test.ini
+++ b/test/lib/ansible_test/_util/controller/sanity/mypy/ansible-test.ini
@@ -14,6 +14,9 @@ disable_error_code = misc
[mypy-argcomplete]
ignore_missing_imports = True
+[mypy-argcomplete.finders]
+ignore_missing_imports = True
+
[mypy-coverage]
ignore_missing_imports = True