Skip to content

Commit c897266

Browse files
committed
Added a check to verify the existence of a descriptive header. Added a constant. Updated example to use the constant.
1 parent 3ae71e8 commit c897266

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

cmd2/argparse_completer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def my_completer(text: str, line: str, begidx: int, endidx:int, extra_param: str
7777
# define the completion choices for the argument. You may provide a Collection or a Function.
7878
ACTION_ARG_CHOICES = 'arg_choices'
7979
ACTION_SUPPRESS_HINT = 'suppress_hint'
80+
ACTION_DESCRIPTIVE_COMPLETION_HEADER = 'desc_header'
8081

8182

8283
class CompletionItem(str):
@@ -456,7 +457,11 @@ def _format_completions(self, action, completions: List[Union[str, CompletionIte
456457
fill_width=fill_width)
457458
completions_with_desc.append(entry)
458459

459-
header = '\n{: <{token_width}}{}'.format(action.dest.upper(), action.desc_header, token_width=token_width+2)
460+
try:
461+
desc_header = action.desc_header
462+
except AttributeError:
463+
desc_header = 'Description'
464+
header = '\n{: <{token_width}}{}'.format(action.dest.upper(), desc_header, token_width=token_width+2)
460465

461466
self._cmd2_app.completion_header = header
462467
self._cmd2_app.display_matches = completions_with_desc

cmd2/cmd2.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151
# Set up readline
5252
from .rl_utils import rl_type, RlType
53-
if rl_type == RlType.NONE:
53+
if rl_type == RlType.NONE: # pragma: no cover
5454
rl_warning = "Readline features including tab completion have been disabled since no \n" \
5555
"supported version of readline was found. To resolve this, install \n" \
5656
"pyreadline on Windows or gnureadline on Mac.\n\n"
@@ -84,7 +84,7 @@
8484
# Newer versions of pyperclip are released as a single file, but older versions had a more complicated structure
8585
try:
8686
from pyperclip.exceptions import PyperclipException
87-
except ImportError:
87+
except ImportError: # pragma: no cover
8888
# noinspection PyUnresolvedReferences
8989
from pyperclip import PyperclipException
9090

@@ -121,7 +121,7 @@ def __subclasshook__(cls, C):
121121
try:
122122
# noinspection PyUnresolvedReferences,PyPackageRequirements
123123
from IPython import embed
124-
except ImportError:
124+
except ImportError: # pragma: no cover
125125
ipython_available = False
126126

127127
__version__ = '0.9.2a'

examples/tab_autocompletion.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,6 @@ def instance_query_movie_ids(self) -> List[str]:
116116
for movie_id, movie_entry in self.MOVIE_DATABASE.items():
117117
completions_with_desc.append(argparse_completer.CompletionItem(movie_id, movie_entry['title']))
118118

119-
setattr(self.vid_delete_movie_id, 'desc_header', 'Title')
120-
setattr(self.movies_delete_movie_id, 'desc_header', 'Title')
121-
122119
return completions_with_desc
123120

124121
# This demonstrates a number of customizations of the AutoCompleter version of ArgumentParser
@@ -267,6 +264,7 @@ def _do_vid_media_shows(self, args) -> None:
267264
vid_movies_delete_parser = vid_movies_commands_subparsers.add_parser('delete')
268265
vid_delete_movie_id = vid_movies_delete_parser.add_argument('movie_id', help='Movie ID')
269266
setattr(vid_delete_movie_id, argparse_completer.ACTION_ARG_CHOICES, instance_query_movie_ids)
267+
setattr(vid_delete_movie_id, argparse_completer.ACTION_DESCRIPTIVE_COMPLETION_HEADER, 'Title')
270268

271269
vid_shows_parser = video_types_subparsers.add_parser('shows')
272270
vid_shows_parser.set_defaults(func=_do_vid_media_shows)
@@ -344,6 +342,7 @@ def _do_media_shows(self, args) -> None:
344342
movies_delete_parser = movies_commands_subparsers.add_parser('delete')
345343
movies_delete_movie_id = movies_delete_parser.add_argument('movie_id', help='Movie ID')
346344
setattr(movies_delete_movie_id, argparse_completer.ACTION_ARG_CHOICES, 'instance_query_movie_ids')
345+
setattr(movies_delete_movie_id, argparse_completer.ACTION_DESCRIPTIVE_COMPLETION_HEADER, 'Title')
347346

348347
movies_load_parser = movies_commands_subparsers.add_parser('load')
349348
movie_file_action = movies_load_parser.add_argument('movie_file', help='Movie database')

0 commit comments

Comments
 (0)