You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/test/lib/ansible_test/_internal/cli/argparsing/actions.py

19 lines
637 B
Python

"""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)