Source code for ewoksutils.cli_utils.cli_spec

from dataclasses import dataclass
from typing import Any
from typing import List
from typing import Literal
from typing import Optional
from typing import Union


[docs] @dataclass class CLIArg: """Abstract CLI argument definition.""" dest: str # e.g. "workflows" flags: List[str] # e.g. ["-p", "--parameters"] help: str type: Any = None default: Any = None choices: Optional[List[Any]] = None action: Optional[str] = None # e.g. "store_true", "append" metavar: Optional[str] = None nargs: Optional[Union[Literal["+", "*"], int]] = None required: Optional[bool] = None @property def is_positional(self) -> bool: return len(self.flags) == 0 def __post_init__(self): is_positional = len(self.flags) == 0 if self.action == "store_true": self.default = False elif self.action == "store_false": self.default = True elif self.action == "append": self.default = [] if is_positional: if self.default is not None: raise ValueError("Only named CLI arguments can have a default") if self.action is not None: raise ValueError("Only named CLI arguments can have an action") if self.choices is not None: raise ValueError("Only named CLI arguments can have choices") else: if self.nargs is not None: raise ValueError("Only positional CLI arguments can have 'nargs'")