Source code for dob.clickux.help_command

# This file exists within 'dob':
#
#   https://github.com/hotoffthehamster/dob
#
# Copyright © 2018-2020 Landon Bouma. All rights reserved.
#
# 'dob' is free software: you can redistribute it and/or modify it under the terms
# of the GNU General Public License  as  published by the Free Software Foundation,
# either version 3  of the License,  or  (at your option)  any   later    version.
#
# 'dob' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY  or  FITNESS FOR A PARTICULAR
# PURPOSE.  See  the  GNU General Public License  for  more details.
#
# You can find the GNU General Public License reprinted in the file titled 'LICENSE',
# or visit <http://www.gnu.org/licenses/>.

from gettext import gettext as _

from dob_bright.termio import attr, fg, click_echo, echo_exit

from ..run_cli import run


[docs]def help_command_help(ctx, command=None): cmd = run if not command: # A simple `dob help`. cmd = run # The context is the 'help' command, which, if passed to # cmd.get_help, shows usage a bit incorrectly, as: # # Usage: dob help [OPTIONS] COMMAND [ARGS]... # # (note the "help"), so specify the parent (the root 'dob' # command), so that usage gets printed more accurately as: # # Usage: dob [OPTIONS] COMMAND [ARGS]... cmd_ctx = ctx.parent else: # For help on a subcommand, i.e., `dob help command`, # use the 'help' command to find the subcommand. cmd_ctx = ctx.parent parts = [] for part in command: if part.startswith('-'): continue parts.append(part) cmd = cmd.get_command(cmd_ctx, part) if cmd is None: echo_exit(ctx, _( """ For detailed help, try: {codehi}{helpcmd}{reset} ERROR: No such command: “{command}” """ ).format( command=' '.join(parts), helpcmd=' '.join([ctx.command_path] + parts[:-1]), # FIXME: (lb): Replace hardcoded. Assign from styles.conf. #styling codehi=(fg('turquoise_2') or ''), reset=(attr('reset') or ''), ).strip(), exitcode=1) if isinstance(cmd, tuple): cmd = cmd[1] # Make a temporary Context to print the help. # (lb): This couples dob to Click more tightly than I'd # like, but it also means I don't have to sell a lot of # little design tweaks to the Click team. args = [] cmd_ctx = cmd.make_context(cmd.name, args, parent=cmd_ctx) click_echo(cmd.get_help(cmd_ctx))