mirror of https://github.com/ansible/ansible.git
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.
19 lines
637 B
Python
19 lines
637 B
Python
3 years ago
|
"""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)
|