1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
import logging from typing import Annotated, Literal
from pydantic import AliasChoices, Field, BeforeValidator from pydantic_settings import BaseSettings, CliApp
class Settings( BaseSettings, cli_parse_args=True, cli_prog_name="sum", cli_enforce_required=True ): """A simple CLI app to sum numbers."""
num: Annotated[list[int], Field(description="Numbers to sum")] verbose: Annotated[ Literal[0, 1], Field( default=0, validation_alias=AliasChoices("v", "verbose"), description="Enable verbose output", ), BeforeValidator(lambda v: int(v)), ]
def cli_cmd(self): if self.verbose: logging.basicConfig(level=logging.DEBUG, format="%(message)s") logging.debug("Calculating sum of numbers %s", self.num) print(sum(self.num))
if __name__ == "__main__": CliApp.run(Settings)
|