From 9726e982d6c81619e9355db2d495e9dd1a01578d Mon Sep 17 00:00:00 2001 From: Kevin Van Brunt Date: Sat, 23 Feb 2019 13:38:56 -0500 Subject: Made cmd2_app a positional and required argument of AutoCompleter. Deleted bash tab completion support. AutoCompleter no longer assumes CompletionItem results are sorted. --- examples/bash_completion.py | 98 --------------------------------------------- 1 file changed, 98 deletions(-) delete mode 100755 examples/bash_completion.py (limited to 'examples/bash_completion.py') diff --git a/examples/bash_completion.py b/examples/bash_completion.py deleted file mode 100755 index b70761e2..00000000 --- a/examples/bash_completion.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python3 -# coding=utf-8 -# PYTHON_ARGCOMPLETE_OK - This is required at the beginning of the file to enable argcomplete support -"""A simple example demonstrating integration with argcomplete. - -This example demonstrates how to achieve automatic auto-completion of argparse arguments for a command-line utility -(CLU) in the Bash shell. - -Realistically it will probably only work on Linux and then only in a Bash shell. With some effort you can probably get -it to work on macOS or Windows Subsystem for Linux (WSL); but then again, specifically within a Bash shell. This -automatic Bash completion integration with the argcomplete module is included within cmd2 in order to assist developers -with providing a the best possible out-of-the-box experience with their cmd2 applications, which in many cases will -accept argparse arguments on the command-line when executed. But from an architectural point of view, the -"argcomplete_bridge" functionality within cmd2 doesn't really depend on the rest of cmd2 and could be used in your own -CLU which doesn't use cmd2. - -WARNING: For this example to work correctly you need the argcomplete module installed and activated: - pip install argcomplete - activate-global-python-argcomplete -Please see https://github.com/kislyuk/argcomplete for more information on argcomplete. -""" -import argparse - -optional_strs = ['Apple', 'Banana', 'Cranberry', 'Durian', 'Elderberry'] - -bash_parser = argparse.ArgumentParser(prog='base') - -bash_parser.add_argument('option', choices=['load', 'export', 'reload']) - -bash_parser.add_argument('-u', '--user', help='User name') -bash_parser.add_argument('-p', '--passwd', help='Password') - -input_file = bash_parser.add_argument('-f', '--file', type=str, help='Input File') - -if __name__ == '__main__': - from cmd2.argcomplete_bridge import bash_complete - # bash_complete flags this argument telling AutoCompleter to yield to bash to perform - # tab completion of a file path - bash_complete(input_file) - -flag_opt = bash_parser.add_argument('-o', '--optional', help='Optional flag with choices') -setattr(flag_opt, 'arg_choices', optional_strs) - -# Handle bash completion if it's installed -# This early check allows the script to bail out early to provide tab-completion results -# to the argcomplete library. Putting this at the end of the file would cause the full application -# to load fulfill every tab-completion request coming from bash. This can cause a notable delay -# on the bash prompt. -try: - # only move forward if we can import CompletionFinder and AutoCompleter - from cmd2.argcomplete_bridge import CompletionFinder - from cmd2.argparse_completer import AutoCompleter - import sys - if __name__ == '__main__': - completer = CompletionFinder() - - # completer will return results to argcomplete and exit the script - completer(bash_parser, AutoCompleter(bash_parser)) -except ImportError: - pass - -# Intentionally below the bash completion code to reduce tab completion lag -import cmd2 # noqa: E402 - - -class DummyApp(cmd2.Cmd): - """ - Dummy cmd2 app - """ - - def __init__(self): - super().__init__() - - -if __name__ == '__main__': - args = bash_parser.parse_args() - - # demonstrates some handling of the command line parameters - - if args.user is None: - user = input('Username: ') - else: - user = args.user - - if args.passwd is None: - import getpass - password = getpass.getpass() - else: - password = args.passwd - - if args.file is not None: - print('Loading file: {}'.format(args.file)) - - # Clear the argumentns so cmd2 doesn't try to parse them - sys.argv = sys.argv[:1] - - app = DummyApp() - app.cmdloop() -- cgit v1.2.1