Source code for ycleptic.cli

# Author: Cameron F. Abrams <cfa22@drexel.edu>

"""
Command-line interface for ycleptic
"""
from __future__ import annotations
from .src.yclept import Yclept, __version__
import argparse as ap
import textwrap
from .src.stringthings import oxford, banner_message

[docs] def makedoc(args): """ Makes a sphinx/rtd-style doctree from the base config file provided including a root node. """ config = args.config root = args.root footer_style = args.footer_style Y = Yclept(config) Y.make_doctree(root, footer_style=footer_style)
[docs] def config_help(args): """ Provides help on a base config file, optionally traversing the attribute tree. """ config = args.config arglist = args.arglist exit_at_end = args.exit_at_end interactive = args.i interactive_prompt = 'help: ' if interactive else '' Y = Yclept(config) if args.write_func == 'print': write_func = print else: write_func = print Y.console_help(arglist, write_func=write_func, interactive_prompt=interactive_prompt, exit=exit_at_end)
[docs] def cli(): commands = { 'make-doc': makedoc, 'config-help': config_help, } helps = { 'make-doc': 'Makes a sphinx/rtd-style doctree from the base config file provided and, optionally, a root node', 'config-help': 'Help on a base config file', } descs = { 'make-doc': 'If you provide the name of a base configuration file for your app, and optionally, a root attribute, this command will generate a sphinx/rtd-style doctree', 'config-help': 'If you provide the name of a base configuration file for your app, you can use this command to explore it the way a user would in your app' } parser = ap.ArgumentParser(description=textwrap.dedent(banner_message), formatter_class=ap.RawDescriptionHelpFormatter) subparsers = parser.add_subparsers() subparsers.required = False command_parsers = {} for k in commands: command_parsers[k] = subparsers.add_parser(k, description=descs[k], help=helps[k], formatter_class=ap.RawDescriptionHelpFormatter) command_parsers[k].set_defaults(func=commands[k]) command_parsers['make-doc'].add_argument('config', type=str, default=None, help='input base configuration file in YAML format') command_parsers['make-doc'].add_argument('--root', type=str, default=None, help='root directory from which to begin the doctree build, relative to the current working directory') command_parsers['make-doc'].add_argument('--footer-style', type=str, default='paragraph', choices=['paragraph', 'comment', 'rubric', 'note', 'raw-html'], help='footer style for the generated documentation; one of "paragraph", "comment", "rubric", "note", or "raw-html"; default %(default)s') command_parsers['config-help'].add_argument('config', type=str, default=None, help='input base configuration file in YAML format') command_parsers['config-help'].add_argument('arglist', type=str, nargs='*', default=[], help='space-separated attribute tree traversal') command_parsers['config-help'].add_argument('--write-func', type=str, default='print', help='space-separated attribute tree traversal') command_parsers['config-help'].add_argument('--i', type=bool, default=True, action=ap.BooleanOptionalAction, help='use help interactively') command_parsers['config-help'].add_argument('--exit-at-end', type=bool, default=True, action=ap.BooleanOptionalAction, help='exit after help') args = parser.parse_args() if hasattr(args, 'func'): args.func(args) else: my_list = oxford(list(commands.keys())) print(f'No subcommand found. Expected one of {my_list}')