Source code for api_example.settings.app_settings

import sys
import functools
import argparse
import pathlib
from typing import Optional, Union

import pydantic_settings

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


[docs] class HashableBaseSettings(pydantic_settings.BaseSettings): def __hash__(self): return hash((type(self),) + tuple(self.__dict__.values()))
[docs] class Settings(HashableBaseSettings): ai_model_external_url: Union[str, pathlib.Path] = AI_MODEL_EXTERNAL_URL data_loader_module: Optional[str] = DATA_LOADER_MODULE local_dir: pathlib.Path = LOCAL_DIR local_temp_dir: pathlib.Path = LOCAL_TEMP_DIR log_level: str = LOG_LEVEL svr_host: str = SVR_HOST svr_port: int = SVR_PORT root_path: str = ROOT_PATH workers: int = WORKERS
[docs] @functools.lru_cache(maxsize=1, typed=False) def get_settings() -> Settings: resulting_args: argparse.Namespace = parse_args(sys.argv[1:]) # Map the log-level: # 0 -> WARNING (default); 1 -> INFO; 2 -> DEBUG) log_level_arg: str = LOG_LEVEL if resulting_args.log_level == 1: log_level_arg = "INFO" elif resulting_args.log_level == 2: log_level_arg = "DEBUG" settings: Settings = Settings( ai_model_external_url=resulting_args.ai_model_external_url, data_loader_module=resulting_args.data_loader_module, local_dir=resulting_args.local_dir, local_temp_dir=resulting_args.local_temp_dir, log_level=log_level_arg, svr_host=resulting_args.host, svr_port=resulting_args.port, root_path=resulting_args.root_path, workers=resulting_args.workers, ) return settings