Beispiel #1
0
from pydantic_cli import run_and_exit, DefaultConfig

log = logging.getLogger(__name__)


class Options(BaseModel):
    """For cases where you want a global configuration file
    that is completely ignored if not found, you can set
    CLI_JSON_VALIDATE_PATH = False.
    """
    class Config(DefaultConfig):
        CLI_JSON_ENABLE = True
        CLI_JSON_CONFIG_PATH = "/path/to/file/that/does/not/exist/simple_schema.json"
        CLI_JSON_VALIDATE_PATH = False

    input_file: str
    max_records: int = 10


def example_runner(opts: Options) -> int:
    log.info(f"Mock example running with options {opts}")
    return 0


if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
    run_and_exit(Options,
                 example_runner,
                 description="Description",
                 version="0.1.0")
log = logging.getLogger(__name__)


class Opts(BaseModel):
    class Config(DefaultConfig):
        CLI_JSON_KEY = "json-training"
        CLI_JSON_ENABLE = True

    hdf_file: str
    max_records: int = 10
    min_filter_score: float
    alpha: float
    beta: float


def runner(opts: Opts) -> int:
    print(f"Running with opts:{opts}")
    return 0


if __name__ == "__main__":
    run_and_exit(
        Opts,
        runner,
        description="My Tool Description",
        version="0.1.0",
        prologue_handler=prologue_handler,
        epilogue_handler=epilogue_handler,
    )
    # https: // pydantic - docs.helpmanual.io / usage / models /  # required-optional-fields
    enable_gamma: Optional[
        bool]  # ... Don't use ellipsis in Pydantic with mypy. This is a really fundamental problem.
    enable_delta: Optional[bool] = None
    enable_epsilon: Optional[
        bool] = True  # this a bit of a contradiction from the commandline perspective.

    class Config(DefaultConfig):
        CLI_EXTRA_OPTIONS = {
            "enable_alpha": _to_opt("alpha"),
            "enable_beta": ("--yes-beta", "--no-beta"),
            "enable_gamma": _to_opt("gamma"),
            "enable_delta": _to_opt("delta"),
            "enable_epsilon": _to_opt("epsilon"),
        }


def example_runner(opts: Options) -> int:
    print(f"Mock example running with {opts}")
    return 0


if __name__ == "__main__":
    logging.basicConfig(level="DEBUG")
    run_and_exit(
        Options,
        example_runner,
        exception_handler=default_minimal_exception_handler,
        prologue_handler=setup_logger,
    )
"""
Simple Example of using Pydantic to generate a CLI

This example will generate a CLI tool with 1 required argument and one optional boolean arg.

Note the optional boolean value must be supplied as `--run_training False`
"""
from pydantic import BaseModel

from pydantic_cli import run_and_exit, DefaultConfig


class Options(BaseModel):
    class Config(DefaultConfig):
        CLI_BOOL_PREFIX = ("--yes-", "--no-")

    input_file: str
    run_training: bool = True
    dry_run: bool = False


def example_runner(opts: Options) -> int:
    print(f"Mock example running with {opts}")
    return 0


if __name__ == "__main__":
    run_and_exit(Options, example_runner, description=__doc__, version="0.1.0")
Beispiel #5
0
    )
    logging.basicConfig(level=opts.log_level.upper(),
                        stream=sys.stdout,
                        format=format_str)
    log.info(f"Set up log with level {opts.log_level}")
    log.info(f"Running {__file__}")


def epilogue_handler(exit_code: int, run_time_sec: float):
    log.info(
        f"Completed running {__file__} with exit code {exit_code} in {run_time_sec} sec."
    )


def example_runner(opts: Options) -> int:
    log.info(
        f"pydantic_cli version={__version__} Mock example running with options {opts}"
    )
    return 0


if __name__ == "__main__":
    run_and_exit(
        Options,
        example_runner,
        description=__doc__,
        version="0.1.0",
        prologue_handler=prologue_handler,
        epilogue_handler=epilogue_handler,
    )