summaryrefslogtreecommitdiff
path: root/cmd2/argparse_completer.py
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2019-07-07 21:45:52 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2019-07-07 21:45:52 -0400
commitbb2dd69bd04f5dccff9474c018eb6b6eea74c6af (patch)
tree543f626a84ac96d97c478e4e1af185ce07831908 /cmd2/argparse_completer.py
parentf8db8b766540920de6c85a26a6740170455b9354 (diff)
downloadcmd2-git-bb2dd69bd04f5dccff9474c018eb6b6eea74c6af.tar.gz
Moved all custom argparse classes intended for normal development to argparse_custom.py.
Lazy loading AutoCompleter in cmd2 instance methods to allow argparse_completer.py to import cmd2.Cmd class. This Architecture makes more sense because AutoCompleter depends on cmd2.Cmd.
Diffstat (limited to 'cmd2/argparse_completer.py')
-rw-r--r--cmd2/argparse_completer.py55
1 files changed, 3 insertions, 52 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py
index 1a8dd473..1a156f8f 100644
--- a/cmd2/argparse_completer.py
+++ b/cmd2/argparse_completer.py
@@ -62,66 +62,17 @@ import argparse
import shutil
from typing import List, Union
+from . import cmd2
from . import utils
from .ansi import ansi_safe_wcswidth
from .argparse_custom import ATTR_SUPPRESS_TAB_HINT, ATTR_DESCRIPTIVE_COMPLETION_HEADER, ATTR_NARGS_RANGE
-from .argparse_custom import ChoicesCallable, ATTR_CHOICES_CALLABLE
+from .argparse_custom import ChoicesCallable, CompletionItem, ATTR_CHOICES_CALLABLE
from .rl_utils import rl_force_redisplay
# If no descriptive header is supplied, then this will be used instead
DEFAULT_DESCRIPTIVE_HEADER = 'Description'
-class CompletionItem(str):
- """
- Completion item with descriptive text attached
-
- Returning this instead of a regular string for completion results will signal the
- autocompleter to output the completions results in a table of completion tokens
- with descriptions instead of just a table of tokens.
-
- For example, you'd see this:
- TOKEN Description
- MY_TOKEN Info about my token
- SOME_TOKEN Info about some token
- YET_ANOTHER Yet more info
-
- Instead of this:
- TOKEN_ID SOME_TOKEN YET_ANOTHER
-
- This is especially useful if you want to complete ID numbers in a more
- user-friendly manner. For example, you can provide this:
-
- ITEM_ID Item Name
- 1 My item
- 2 Another item
- 3 Yet another item
-
- Instead of this:
- 1 2 3
-
- Example:
- token = 1
- token_description = "My Item"
- completion_item = CompletionItem(token, token_description)
- """
- def __new__(cls, value: object, *args, **kwargs) -> str:
- return super().__new__(cls, value)
-
- # noinspection PyUnusedLocal
- def __init__(self, value: object, desc: str = '', *args, **kwargs) -> None:
- """
- CompletionItem Initializer
-
- :param value: the value being tab completed
- :param desc: description text to display
- :param args: args for str __init__
- :param kwargs: kwargs for str __init__
- """
- super().__init__(*args, **kwargs)
- self.description = desc
-
-
# noinspection PyProtectedMember
def is_potential_flag(token: str, parser: argparse.ArgumentParser) -> bool:
"""Determine if a token looks like a potential flag. Based on argparse._parse_optional()."""
@@ -171,7 +122,7 @@ class AutoCompleter(object):
self.needed = False
self.variable = False
- def __init__(self, parser: argparse.ArgumentParser, cmd2_app, *,
+ def __init__(self, parser: argparse.ArgumentParser, cmd2_app: cmd2.Cmd, *,
token_start_index: int = 1) -> None:
"""
Create an AutoCompleter