def run_publish(args, cwd, error, catch=True): """Process arguments and run the `doorstop publish` subcommand. :param args: Namespace of CLI arguments :param cwd: current working directory :param error: function to call for CLI errors :param catch: catch and log :class:`~doorstop.common.DoorstopError` """ whole_tree = args.prefix == 'all' ext = utilities.get_ext(args, error, '.txt', '.html', whole_tree) # Get the tree or document with utilities.capture(catch=catch) as success: publisher.check(ext) tree = _get_tree(args, cwd, load=whole_tree) if not whole_tree: document = tree.find_document(args.prefix) if not success: return False # Set publishing arguments kwargs = {} if args.width: kwargs['width'] = args.width # Write to output file(s) if args.path: path = os.path.abspath(os.path.join(cwd, args.path)) if whole_tree: msg = "publishing tree to '{}'...".format(path) utilities.show(msg, flush=True) published_path = publisher.publish(tree, path, ext, template=args.template, **kwargs) else: msg = "publishing document {} to '{}'...".format(document, path) utilities.show(msg, flush=True) published_path = publisher.publish(document, path, ext, template=args.template, **kwargs) if published_path: utilities.show("published: {}".format(published_path)) # Or, display to standard output else: if whole_tree: error("only single documents can be displayed") for line in publisher.publish_lines(document, ext, **kwargs): utilities.show(line) return True
def run_publish(args, cwd, error, catch=True): """Process arguments and run the `doorstop publish` subcommand. :param args: Namespace of CLI arguments :param cwd: current working directory :param error: function to call for CLI errors :param catch: catch and log :class:`~doorstop.common.DoorstopError` """ # Parse arguments whole_tree = args.prefix == 'all' ext = utilities.get_ext(args, '.txt', '.html', whole_tree, error) # Publish documents with utilities.capture(catch=catch) as success: publisher.check(ext) tree = build(cwd=cwd, root=args.project) if not whole_tree: document = tree.find_document(args.prefix) if not success: return False # Set publishing arguments kwargs = {} if args.width: kwargs['width'] = args.width # Write to output file(s) if args.path: if whole_tree: show("publishing tree to '{}'...".format(args.path), flush=True) path = publisher.publish(tree, args.path, ext, **kwargs) else: msg = "publishing document {} to '{}'...".format(document, args.path) show(msg, flush=True) path = publisher.publish(document, args.path, ext, **kwargs) if path: show("published: {}".format(path)) # Display to standard output else: if whole_tree: error("only single documents can be displayed") for line in publisher.publish_lines(document, ext, **kwargs): show(line) return True