"""Actions for argparse.""" from __future__ import annotations import argparse import enum import typing as t class EnumAction(argparse.Action): """Parse an enum using the lowercases enum names.""" def __init__(self, **kwargs): # type: (t.Dict[str, t.Any]) -> None self.enum_type = kwargs.pop('type', None) # type: t.Type[enum.Enum] kwargs.setdefault('choices', tuple(e.name.lower() for e in self.enum_type)) super().__init__(**kwargs) def __call__(self, parser, namespace, values, option_string=None): value = self.enum_type[values.upper()] setattr(namespace, self.dest, value)