# Copyright (c) 2023 Lincoln Stein (https://github.com/lstein) and the InvokeAI Development Team """ Base class for the InvokeAI configuration system. It defines a type of pydantic BaseSettings object that is able to read and write from an omegaconf-based config file, with overriding of settings from environment variables and/or the command line. """ from __future__ import annotations import argparse import pydoc from typing import Union class PagingArgumentParser(argparse.ArgumentParser): """ A custom ArgumentParser that uses pydoc to page its output. It also supports reading defaults from an init file. """ def print_help(self, file=None) -> None: text = self.format_help() pydoc.pager(text) def int_or_float_or_str(value: str) -> Union[int, float, str]: """ Workaround for argparse type checking. """ try: return int(value) except Exception as e: # noqa F841 pass try: return float(value) except Exception as e: # noqa F841 pass return str(value)