Source code for api_example.settings.args

import argparse
import typing

from api_example.settings.defaults import (
    AI_MODEL_EXTERNAL_URL,
    DATA_LOADER_MODULE,
    LOCAL_DIR,
    LOCAL_TEMP_DIR,
    SVR_HOST,
    SVR_PORT,
    ROOT_PATH,
    WORKERS,
)
from api_example import __version__


def _add_version(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-V",
        "--version",
        action="version",
        version=f"{__version__} (API)",
    )
    return parser


def _add_log_level(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-v",
        "--log-level",
        help="logging level. Default is silent (0/WARNING). `-v` corresponds to 1/INFO. `-vv` corresponds to 2/DEBUG.",
        action="count",
        dest="log_level",
        default=2,
    )
    return parser


def _add_host(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-H",
        "--host",
        help=f"IP address of the host on which the API service is started (e.g., {SVR_HOST}).",
        action="store",
        default=SVR_HOST,
    )

    return parser


def _add_port(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-p",
        "--port",
        help=f"port on which the API service is listening the incoming requests (e.g., {SVR_PORT}).",
        type=int,
        action="store",
        default=SVR_PORT,
    )
    return parser


def _add_workers(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-w",
        "--workers",
        help=f"number of worker processes in the Uvicorn server (e.g., {WORKERS}).",
        type=int,
        action="store",
        default=WORKERS,
    )
    return parser


def _add_root_path(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-r",
        "--root-path",
        help=f"prefix in the URL/path of the REST API (e.g., '{ROOT_PATH}').",
        dest="root_path",
        action="store",
        default=ROOT_PATH,
    )
    return parser


def _add_data_loader_module(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-d",
        "--data-loader-module",
        help=f"data loader module (e.g., '{DATA_LOADER_MODULE}').",
        dest="data_loader_module",
        action="store",
        default=DATA_LOADER_MODULE,
    )
    return parser


def _add_local_dir(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-l",
        "--local-dir",
        help=f"local permanent directory for file storage (e.g., '{LOCAL_DIR}').",
        dest="local_dir",
        action="store",
        default=LOCAL_DIR,
    )
    return parser


def _add_local_temp_dir(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
    parser.add_argument(
        "-t",
        "--local-temp-dir",
        help=f"local temporary directory for file storage (e.g., '{LOCAL_TEMP_DIR}')",
        dest="local_temp_dir",
        action="store",
        default=LOCAL_TEMP_DIR,
    )
    return parser


def _add_ai_model_external_url(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
   parser.add_argument(
      "-m", "--model-external-url",
      help=f"URL (if remote) or file-path (if local) of the Pickled/serialized ML model (e.g., '{AI_MODEL_EXTERNAL_URL}').",
      dest="ai_model_external_url",
      action="store",
      default=AI_MODEL_EXTERNAL_URL
   )
   return parser

def _get_arg_parser() -> argparse.ArgumentParser:
   parser = argparse.ArgumentParser(
      description=(
         "API command-line (CLI) tool. "
         "That utility launches a Uvicorn/FastAPI server, "
      )
   )

   parser = _add_version(parser)
   parser = _add_log_level(parser)
   parser = _add_host(parser)
   parser = _add_port(parser)
   parser = _add_workers(parser)
   parser = _add_root_path(parser)
   parser = _add_data_loader_module(parser)
   parser = _add_local_dir(parser)
   parser = _add_local_temp_dir(parser)
   parser = _add_ai_model_external_url(parser)
   
   return parser

[docs] def parse_args(args: typing.List[str] | None = None) -> argparse.Namespace: parser: argparse.ArgumentParser = _get_arg_parser() resulting_args: argparse.Namespace = parser.parse_args(args) return resulting_args