summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Lin <anselor@gmail.com>2018-06-13 10:59:21 -0400
committerEric Lin <anselor@gmail.com>2018-06-13 10:59:21 -0400
commitc897266b8e9a6bbce8aa577aa46e25ad1baa969d (patch)
tree64325315df72d811cb172c398645b586ea814245
parent3ae71e80e61a908ad0a0dec84ee6496592176022 (diff)
downloadcmd2-git-c897266b8e9a6bbce8aa577aa46e25ad1baa969d.tar.gz
Added a check to verify the existence of a descriptive header. Added a constant. Updated example to use the constant.
-rwxr-xr-xcmd2/argparse_completer.py7
-rw-r--r--cmd2/cmd2.py6
-rwxr-xr-xexamples/tab_autocompletion.py5
3 files changed, 11 insertions, 7 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py
index 1bc7f342..995aeb48 100755
--- a/cmd2/argparse_completer.py
+++ b/cmd2/argparse_completer.py
@@ -77,6 +77,7 @@ from .rl_utils import rl_force_redisplay
# define the completion choices for the argument. You may provide a Collection or a Function.
ACTION_ARG_CHOICES = 'arg_choices'
ACTION_SUPPRESS_HINT = 'suppress_hint'
+ACTION_DESCRIPTIVE_COMPLETION_HEADER = 'desc_header'
class CompletionItem(str):
@@ -456,7 +457,11 @@ class AutoCompleter(object):
fill_width=fill_width)
completions_with_desc.append(entry)
- header = '\n{: <{token_width}}{}'.format(action.dest.upper(), action.desc_header, token_width=token_width+2)
+ try:
+ desc_header = action.desc_header
+ except AttributeError:
+ desc_header = 'Description'
+ header = '\n{: <{token_width}}{}'.format(action.dest.upper(), desc_header, token_width=token_width+2)
self._cmd2_app.completion_header = header
self._cmd2_app.display_matches = completions_with_desc
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index 3d2a8afe..75946764 100644
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -50,7 +50,7 @@ from cmd2.parsing import StatementParser, Statement
# Set up readline
from .rl_utils import rl_type, RlType
-if rl_type == RlType.NONE:
+if rl_type == RlType.NONE: # pragma: no cover
rl_warning = "Readline features including tab completion have been disabled since no \n" \
"supported version of readline was found. To resolve this, install \n" \
"pyreadline on Windows or gnureadline on Mac.\n\n"
@@ -84,7 +84,7 @@ from .argparse_completer import AutoCompleter, ACArgumentParser
# Newer versions of pyperclip are released as a single file, but older versions had a more complicated structure
try:
from pyperclip.exceptions import PyperclipException
-except ImportError:
+except ImportError: # pragma: no cover
# noinspection PyUnresolvedReferences
from pyperclip import PyperclipException
@@ -121,7 +121,7 @@ ipython_available = True
try:
# noinspection PyUnresolvedReferences,PyPackageRequirements
from IPython import embed
-except ImportError:
+except ImportError: # pragma: no cover
ipython_available = False
__version__ = '0.9.2a'
diff --git a/examples/tab_autocompletion.py b/examples/tab_autocompletion.py
index 817ceb72..342cfff5 100755
--- a/examples/tab_autocompletion.py
+++ b/examples/tab_autocompletion.py
@@ -116,9 +116,6 @@ class TabCompleteExample(cmd2.Cmd):
for movie_id, movie_entry in self.MOVIE_DATABASE.items():
completions_with_desc.append(argparse_completer.CompletionItem(movie_id, movie_entry['title']))
- setattr(self.vid_delete_movie_id, 'desc_header', 'Title')
- setattr(self.movies_delete_movie_id, 'desc_header', 'Title')
-
return completions_with_desc
# This demonstrates a number of customizations of the AutoCompleter version of ArgumentParser
@@ -267,6 +264,7 @@ class TabCompleteExample(cmd2.Cmd):
vid_movies_delete_parser = vid_movies_commands_subparsers.add_parser('delete')
vid_delete_movie_id = vid_movies_delete_parser.add_argument('movie_id', help='Movie ID')
setattr(vid_delete_movie_id, argparse_completer.ACTION_ARG_CHOICES, instance_query_movie_ids)
+ setattr(vid_delete_movie_id, argparse_completer.ACTION_DESCRIPTIVE_COMPLETION_HEADER, 'Title')
vid_shows_parser = video_types_subparsers.add_parser('shows')
vid_shows_parser.set_defaults(func=_do_vid_media_shows)
@@ -344,6 +342,7 @@ class TabCompleteExample(cmd2.Cmd):
movies_delete_parser = movies_commands_subparsers.add_parser('delete')
movies_delete_movie_id = movies_delete_parser.add_argument('movie_id', help='Movie ID')
setattr(movies_delete_movie_id, argparse_completer.ACTION_ARG_CHOICES, 'instance_query_movie_ids')
+ setattr(movies_delete_movie_id, argparse_completer.ACTION_DESCRIPTIVE_COMPLETION_HEADER, 'Title')
movies_load_parser = movies_commands_subparsers.add_parser('load')
movie_file_action = movies_load_parser.add_argument('movie_file', help='Movie database')