summaryrefslogtreecommitdiffstats
path: root/test/lib/ansible_test/_internal/cli/argparsing/actions.py
blob: 2bcf982cf6cf7fff7cb26bc347f4e0852d932351 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"""Actions for argparse."""
from __future__ import annotations

import argparse
import enum
import typing as t


class EnumAction(argparse.Action):
    """Parse an enum using the lowercase enum names."""
    def __init__(self, **kwargs: t.Any) -> None:
        self.enum_type: t.Type[enum.Enum] = kwargs.pop('type', None)
        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)