summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2018-05-19 17:27:44 -0400
committerTodd Leonhardt <todd.leonhardt@gmail.com>2018-05-19 17:27:44 -0400
commit34c7e650145c21499f3cc7667b71bb44c65fab01 (patch)
treeac10af5c53c45221062ff7440ea16a7343e7c230
parentb75a2ee93f0d6a37c0232d974afdb1b31c6fc094 (diff)
downloadcmd2-git-34c7e650145c21499f3cc7667b71bb44c65fab01.tar.gz
Bug fixes due to API differences in older versions of argcomplete
NOTES: - I didn't implement this correctly because I don't know how to programmatically determine the version of argcomplete; instead I based it on the version of Python - We should make sure this works correctly even if no version of argcomplete is installed
-rw-r--r--cmd2/argcomplete_bridge.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/cmd2/argcomplete_bridge.py b/cmd2/argcomplete_bridge.py
index a036af1e..0ac68f1c 100644
--- a/cmd2/argcomplete_bridge.py
+++ b/cmd2/argcomplete_bridge.py
@@ -6,11 +6,16 @@ try:
import argcomplete
except ImportError: # pragma: no cover
# not installed, skip the rest of the file
- pass
-
+ DEFAULT_COMPLETER = None
else:
# argcomplete is installed
+ # Newer versions of argcomplete have FilesCompleter at top level, older versions only have it under completers
+ try:
+ DEFAULT_COMPLETER = argcomplete.FilesCompleter()
+ except AttributeError:
+ DEFAULT_COMPLETER = argcomplete.completers.FilesCompleter()
+
from contextlib import redirect_stdout
import copy
from io import StringIO
@@ -102,7 +107,7 @@ else:
def __call__(self, argument_parser, completer=None, always_complete_options=True, exit_method=os._exit, output_stream=None,
exclude=None, validator=None, print_suppressed=False, append_space=None,
- default_completer=argcomplete.FilesCompleter()):
+ default_completer=DEFAULT_COMPLETER):
"""
:param argument_parser: The argument parser to autocomplete on
:type argument_parser: :class:`argparse.ArgumentParser`
@@ -140,9 +145,14 @@ else:
added to argcomplete.safe_actions, if their values are wanted in the ``parsed_args`` completer argument, or
their execution is otherwise desirable.
"""
- self.__init__(argument_parser, always_complete_options=always_complete_options, exclude=exclude,
- validator=validator, print_suppressed=print_suppressed, append_space=append_space,
- default_completer=default_completer)
+ # Older versions of argcomplete have fewer keyword arguments
+ if sys.version_info >= (3, 5):
+ self.__init__(argument_parser, always_complete_options=always_complete_options, exclude=exclude,
+ validator=validator, print_suppressed=print_suppressed, append_space=append_space,
+ default_completer=default_completer)
+ else:
+ self.__init__(argument_parser, always_complete_options=always_complete_options, exclude=exclude,
+ validator=validator, print_suppressed=print_suppressed)
if "_ARGCOMPLETE" not in os.environ:
# not an argument completion invocation