Fixed #27870 -- Cleaned up ManagementUtility.autocomplete().

This commit is contained in:
Phil Bazun 2017-02-22 19:15:50 +05:00 committed by Tim Graham
parent 7d20a7d88a
commit cc5c1b7568
1 changed files with 6 additions and 7 deletions

View File

@ -112,7 +112,7 @@ def call_command(command_name, *args, **options):
parser = command.create_parser('', command_name) parser = command.create_parser('', command_name)
# Use the `dest` option name from the parser option # Use the `dest` option name from the parser option
opt_mapping = { opt_mapping = {
sorted(s_opt.option_strings)[0].lstrip('-').replace('-', '_'): s_opt.dest min(s_opt.option_strings).lstrip('-').replace('-', '_'): s_opt.dest
for s_opt in parser._actions if s_opt.option_strings for s_opt in parser._actions if s_opt.option_strings
} }
arg_options = {opt_mapping.get(key, key): value for key, value in options.items()} arg_options = {opt_mapping.get(key, key): value for key, value in options.items()}
@ -254,19 +254,18 @@ class ManagementUtility:
pass pass
parser = subcommand_cls.create_parser('', cwords[0]) parser = subcommand_cls.create_parser('', cwords[0])
options.extend( options.extend(
(sorted(s_opt.option_strings)[0], s_opt.nargs != 0) (min(s_opt.option_strings), s_opt.nargs != 0)
for s_opt in parser._actions if s_opt.option_strings for s_opt in parser._actions if s_opt.option_strings
) )
# filter out previously specified options from available options # filter out previously specified options from available options
prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] prev_opts = {x.split('=')[0] for x in cwords[1:cword - 1]}
options = [opt for opt in options if opt[0] not in prev_opts] options = (opt for opt in options if opt[0] not in prev_opts)
# filter options by current input # filter options by current input
options = sorted((k, v) for k, v in options if k.startswith(curr)) options = sorted((k, v) for k, v in options if k.startswith(curr))
for option in options: for opt_label, require_arg in options:
opt_label = option[0]
# append '=' to options which require args # append '=' to options which require args
if option[1]: if require_arg:
opt_label += '=' opt_label += '='
print(opt_label) print(opt_label)
# Exit code of the bash completion function is never passed back to # Exit code of the bash completion function is never passed back to