Source code for dffml.util.testing.consoletest.cli

import pathlib
import argparse
import contextlib
from typing import List

from .parser import parse_nodes
from .runner import run_nodes
from .util import code_block_to_dict, literalinclude_to_dict


[docs]async def main(argv: List[str]) -> None: """ Run consoletest on the file provided """ parser = argparse.ArgumentParser() parser.add_argument( "infile", type=argparse.FileType("r", encoding="UTF-8") ) parser.add_argument("--root", type=pathlib.Path, default=pathlib.Path("")) parser.add_argument("--docs", type=pathlib.Path, default=pathlib.Path("")) parser.add_argument("--setup", type=pathlib.Path, default=pathlib.Path("")) args = parser.parse_args(argv) if args.root == pathlib.Path(""): args.root = pathlib.Path(args.infile.name).parent if args.docs == pathlib.Path(""): args.docs = pathlib.Path(args.infile.name).parent if args.setup == pathlib.Path(""): args.setup = None else: args.setup = compile( args.setup.read_text(), "<setup>", "exec", flags=0, dont_inherit=False, optimize=-1, ) local_variables = {} exec(args.setup, local_variables, local_variables) args.setup = local_variables["setup"] nodes = [] for node in parse_nodes(args.infile.read()): if not node.options.get("test", False): continue if node.directive == "code-block": nodes.append( code_block_to_dict(node.content, node.options, node=node.node) ) elif node.directive == "literalinclude": nodes.append( literalinclude_to_dict(node.content, node.options, node.node) ) with contextlib.ExitStack() as stack: await run_nodes(args.root, args.docs, stack, nodes, setup=args.setup) args.infile.close()