summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/arg_decorators.py2
-rw-r--r--examples/argparse_completion.py98
-rw-r--r--examples/modular_commands/commandset_basic.py3
-rw-r--r--examples/modular_commands/commandset_complex.py3
-rw-r--r--examples/modular_commands_main.py96
5 files changed, 53 insertions, 149 deletions
diff --git a/examples/arg_decorators.py b/examples/arg_decorators.py
index a085341d..9ffcd8ce 100755
--- a/examples/arg_decorators.py
+++ b/examples/arg_decorators.py
@@ -18,7 +18,7 @@ class ArgparsingApp(cmd2.Cmd):
help='add comma for thousands separator')
fsize_parser.add_argument('-u', '--unit', choices=['MB', 'KB'], help='unit to display size in')
fsize_parser.add_argument('file_path', help='path of file',
- completer_method=cmd2.Cmd.path_complete)
+ completer=cmd2.Cmd.path_complete)
@cmd2.with_argparser(fsize_parser)
def do_fsize(self, args: argparse.Namespace) -> None:
diff --git a/examples/argparse_completion.py b/examples/argparse_completion.py
index e44533b3..c2cb31f6 100644
--- a/examples/argparse_completion.py
+++ b/examples/argparse_completion.py
@@ -6,62 +6,19 @@ A simple example demonstrating how to integrate tab completion with argparse-bas
import argparse
from typing import Dict, List
-from cmd2 import Cmd, Cmd2ArgumentParser, CompletionItem, with_argparser
-from cmd2.utils import CompletionError, basic_complete
+from cmd2 import Cmd, Cmd2ArgumentParser, CompletionError, CompletionItem, with_argparser
# Data source for argparse.choices
food_item_strs = ['Pizza', 'Ham', 'Ham Sandwich', 'Potato']
-def choices_function() -> List[str]:
- """Choices functions are useful when the choice list is dynamically generated (e.g. from data in a database)"""
- return ['a', 'dynamic', 'list', 'goes', 'here']
-
-
-def completer_function(text: str, line: str, begidx: int, endidx: int) -> List[str]:
- """
- A tab completion function not dependent on instance data. Since custom tab completion operations commonly
- need to modify cmd2's instance variables related to tab completion, it will be rare to need a completer
- function. completer_method should be used in those cases.
- """
- match_against = ['a', 'dynamic', 'list', 'goes', 'here']
- return basic_complete(text, line, begidx, endidx, match_against)
-
-
-def choices_completion_item() -> List[CompletionItem]:
- """Return CompletionItem instead of strings. These give more context to what's being tab completed."""
- items = \
- {
- 1: "My item",
- 2: "Another item",
- 3: "Yet another item"
- }
- return [CompletionItem(item_id, description) for item_id, description in items.items()]
-
-
-def choices_arg_tokens(arg_tokens: Dict[str, List[str]]) -> List[str]:
- """
- If a choices or completer function/method takes a value called arg_tokens, then it will be
- passed a dictionary that maps the command line tokens up through the one being completed
- to their argparse argument name. All values of the arg_tokens dictionary are lists, even if
- a particular argument expects only 1 token.
- """
- # Check if choices_function flag has appeared
- values = ['choices_function', 'flag']
- if 'choices_function' in arg_tokens:
- values.append('is {}'.format(arg_tokens['choices_function'][0]))
- else:
- values.append('not supplied')
- return values
-
-
class ArgparseCompletion(Cmd):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sport_item_strs = ['Bat', 'Basket', 'Basketball', 'Football', 'Space Ball']
- def choices_method(self) -> List[str]:
- """Choices methods are useful when the choice list is based on instance data of your application"""
+ def choices_provider(self) -> List[str]:
+ """A choices provider is useful when the choice list is based on instance data of your application"""
return self.sport_item_strs
def choices_completion_error(self) -> List[str]:
@@ -76,6 +33,33 @@ class ArgparseCompletion(Cmd):
return self.sport_item_strs
raise CompletionError("debug must be true")
+ # noinspection PyMethodMayBeStatic
+ def choices_completion_item(self) -> List[CompletionItem]:
+ """Return CompletionItem instead of strings. These give more context to what's being tab completed."""
+ items = \
+ {
+ 1: "My item",
+ 2: "Another item",
+ 3: "Yet another item"
+ }
+ return [CompletionItem(item_id, description) for item_id, description in items.items()]
+
+ # noinspection PyMethodMayBeStatic
+ def choices_arg_tokens(self, arg_tokens: Dict[str, List[str]]) -> List[str]:
+ """
+ If a choices or completer function/method takes a value called arg_tokens, then it will be
+ passed a dictionary that maps the command line tokens up through the one being completed
+ to their argparse argument name. All values of the arg_tokens dictionary are lists, even if
+ a particular argument expects only 1 token.
+ """
+ # Check if choices_provider flag has appeared
+ values = ['choices_provider', 'flag']
+ if 'choices_provider' in arg_tokens:
+ values.append('is {}'.format(arg_tokens['choices_provider'][0]))
+ else:
+ values.append('not supplied')
+ return values
+
# Parser for example command
example_parser = Cmd2ArgumentParser(description="Command demonstrating tab completion with argparse\n"
"Notice even the flags of this command tab complete")
@@ -85,29 +69,25 @@ class ArgparseCompletion(Cmd):
example_parser.add_argument('--choices', choices=food_item_strs, metavar="CHOICE",
help="tab complete using choices")
- # Tab complete from choices provided by a choices function and choices method
- example_parser.add_argument('--choices_function', choices_function=choices_function,
- help="tab complete using a choices_function")
- example_parser.add_argument('--choices_method', choices_method=choices_method,
- help="tab complete using a choices_method")
+ # Tab complete from choices provided by a choices_provider
+ example_parser.add_argument('--choices_provider', choices_provider=choices_provider,
+ help="tab complete using a choices_provider")
- # Tab complete using a completer function and completer method
- example_parser.add_argument('--completer_function', completer_function=completer_function,
- help="tab complete using a completer_function")
- example_parser.add_argument('--completer_method', completer_method=Cmd.path_complete,
- help="tab complete using a completer_method")
+ # Tab complete using a completer
+ example_parser.add_argument('--completer', completer=Cmd.path_complete,
+ help="tab complete using a completer")
# Demonstrate raising a CompletionError while tab completing
- example_parser.add_argument('--completion_error', choices_method=choices_completion_error,
+ example_parser.add_argument('--completion_error', choices_provider=choices_completion_error,
help="raise a CompletionError while tab completing if debug is False")
# Demonstrate returning CompletionItems instead of strings
- example_parser.add_argument('--completion_item', choices_function=choices_completion_item, metavar="ITEM_ID",
+ example_parser.add_argument('--completion_item', choices_provider=choices_completion_item, metavar="ITEM_ID",
descriptive_header="Description",
help="demonstrate use of CompletionItems")
# Demonstrate use of arg_tokens dictionary
- example_parser.add_argument('--arg_tokens', choices_function=choices_arg_tokens,
+ example_parser.add_argument('--arg_tokens', choices_provider=choices_arg_tokens,
help="demonstrate use of arg_tokens dictionary")
@with_argparser(example_parser)
diff --git a/examples/modular_commands/commandset_basic.py b/examples/modular_commands/commandset_basic.py
index 2ceda439..9c94e01e 100644
--- a/examples/modular_commands/commandset_basic.py
+++ b/examples/modular_commands/commandset_basic.py
@@ -4,8 +4,7 @@ A simple example demonstrating a loadable command set
"""
from typing import List
-from cmd2 import Cmd, CommandSet, Statement, with_category, with_default_category
-from cmd2.utils import CompletionError
+from cmd2 import Cmd, CommandSet, CompletionError, Statement, with_category, with_default_category
@with_default_category('Basic Completion')
diff --git a/examples/modular_commands/commandset_complex.py b/examples/modular_commands/commandset_complex.py
index 7c6b1300..a4343ae3 100644
--- a/examples/modular_commands/commandset_complex.py
+++ b/examples/modular_commands/commandset_complex.py
@@ -8,7 +8,6 @@ import argparse
from typing import List
import cmd2
-from cmd2 import utils
@cmd2.with_default_category('Fruits')
@@ -42,7 +41,7 @@ class CommandSetA(cmd2.CommandSet):
self._cmd.poutput(', '.join(['{}']*len(args)).format(*args))
def complete_durian(self, text: str, line: str, begidx: int, endidx: int) -> List[str]:
- return utils.basic_complete(text, line, begidx, endidx, ['stinks', 'smells', 'disgusting'])
+ return self._cmd.basic_complete(text, line, begidx, endidx, ['stinks', 'smells', 'disgusting'])
elderberry_parser = cmd2.Cmd2ArgumentParser('elderberry')
elderberry_parser.add_argument('arg1')
diff --git a/examples/modular_commands_main.py b/examples/modular_commands_main.py
index b698e00f..1b0ec64d 100644
--- a/examples/modular_commands_main.py
+++ b/examples/modular_commands_main.py
@@ -5,58 +5,13 @@ A complex example demonstrating a variety of methods to load CommandSets using a
with examples of how to integrate tab completion with argparse-based commands.
"""
import argparse
-from typing import Dict, Iterable, List, Optional
+from typing import Iterable, List, Optional
-from cmd2 import Cmd, Cmd2ArgumentParser, CommandSet, CompletionItem, with_argparser
-from cmd2.utils import CompletionError, basic_complete
from modular_commands.commandset_basic import BasicCompletionCommandSet # noqa: F401
from modular_commands.commandset_complex import CommandSetA # noqa: F401
from modular_commands.commandset_custominit import CustomInitCommandSet # noqa: F401
-# Data source for argparse.choices
-food_item_strs = ['Pizza', 'Ham', 'Ham Sandwich', 'Potato']
-
-
-def choices_function() -> List[str]:
- """Choices functions are useful when the choice list is dynamically generated (e.g. from data in a database)"""
- return ['a', 'dynamic', 'list', 'goes', 'here']
-
-
-def completer_function(text: str, line: str, begidx: int, endidx: int) -> List[str]:
- """
- A tab completion function not dependent on instance data. Since custom tab completion operations commonly
- need to modify cmd2's instance variables related to tab completion, it will be rare to need a completer
- function. completer_method should be used in those cases.
- """
- match_against = ['a', 'dynamic', 'list', 'goes', 'here']
- return basic_complete(text, line, begidx, endidx, match_against)
-
-
-def choices_completion_item() -> List[CompletionItem]:
- """Return CompletionItem instead of strings. These give more context to what's being tab completed."""
- items = \
- {
- 1: "My item",
- 2: "Another item",
- 3: "Yet another item"
- }
- return [CompletionItem(item_id, description) for item_id, description in items.items()]
-
-
-def choices_arg_tokens(arg_tokens: Dict[str, List[str]]) -> List[str]:
- """
- If a choices or completer function/method takes a value called arg_tokens, then it will be
- passed a dictionary that maps the command line tokens up through the one being completed
- to their argparse argument name. All values of the arg_tokens dictionary are lists, even if
- a particular argument expects only 1 token.
- """
- # Check if choices_function flag has appeared
- values = ['choices_function', 'flag']
- if 'choices_function' in arg_tokens:
- values.append('is {}'.format(arg_tokens['choices_function'][0]))
- else:
- values.append('not supplied')
- return values
+from cmd2 import Cmd, Cmd2ArgumentParser, CommandSet, with_argparser
class WithCommandSets(Cmd):
@@ -64,55 +19,26 @@ class WithCommandSets(Cmd):
super().__init__(command_sets=command_sets)
self.sport_item_strs = ['Bat', 'Basket', 'Basketball', 'Football', 'Space Ball']
- def choices_method(self) -> List[str]:
- """Choices methods are useful when the choice list is based on instance data of your application"""
+ def choices_provider(self) -> List[str]:
+ """A choices provider is useful when the choice list is based on instance data of your application"""
return self.sport_item_strs
- def choices_completion_error(self) -> List[str]:
- """
- CompletionErrors can be raised if an error occurs while tab completing.
-
- Example use cases
- - Reading a database to retrieve a tab completion data set failed
- - A previous command line argument that determines the data set being completed is invalid
- """
- if self.debug:
- return self.sport_item_strs
- raise CompletionError("debug must be true")
-
# Parser for example command
example_parser = Cmd2ArgumentParser(description="Command demonstrating tab completion with argparse\n"
"Notice even the flags of this command tab complete")
# Tab complete from a list using argparse choices. Set metavar if you don't
# want the entire choices list showing in the usage text for this command.
- example_parser.add_argument('--choices', choices=food_item_strs, metavar="CHOICE",
+ example_parser.add_argument('--choices', choices=['some', 'choices', 'here'], metavar="CHOICE",
help="tab complete using choices")
- # Tab complete from choices provided by a choices function and choices method
- example_parser.add_argument('--choices_function', choices_function=choices_function,
- help="tab complete using a choices_function")
- example_parser.add_argument('--choices_method', choices_method=choices_method,
- help="tab complete using a choices_method")
-
- # Tab complete using a completer function and completer method
- example_parser.add_argument('--completer_function', completer_function=completer_function,
- help="tab complete using a completer_function")
- example_parser.add_argument('--completer_method', completer_method=Cmd.path_complete,
- help="tab complete using a completer_method")
-
- # Demonstrate raising a CompletionError while tab completing
- example_parser.add_argument('--completion_error', choices_method=choices_completion_error,
- help="raise a CompletionError while tab completing if debug is False")
-
- # Demonstrate returning CompletionItems instead of strings
- example_parser.add_argument('--completion_item', choices_function=choices_completion_item, metavar="ITEM_ID",
- descriptive_header="Description",
- help="demonstrate use of CompletionItems")
+ # Tab complete from choices provided by a choices provider
+ example_parser.add_argument('--choices_provider', choices_provider=choices_provider,
+ help="tab complete using a choices_provider")
- # Demonstrate use of arg_tokens dictionary
- example_parser.add_argument('--arg_tokens', choices_function=choices_arg_tokens,
- help="demonstrate use of arg_tokens dictionary")
+ # Tab complete using a completer
+ example_parser.add_argument('--completer', completer=Cmd.path_complete,
+ help="tab complete using a completer")
@with_argparser(example_parser)
def do_example(self, _: argparse.Namespace) -> None: