1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# SPDX-FileCopyrightText: 2024 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
from enum import Enum as PythonEnum
from typing import Any, Optional, Type, TypeVar
from gvm.errors import InvalidArgument
Self = TypeVar("Self", bound="Enum")
class Enum(PythonEnum):
"""
Base class for Enums in python-gvm
"""
@classmethod
def _missing_(cls: Type[Self], value: Any) -> Optional[Self]:
if isinstance(value, PythonEnum):
return cls.from_string(value.name)
return cls.from_string(str(value) if value else None)
@classmethod
def from_string(
cls: Type[Self],
value: Optional[str],
) -> Optional[Self]:
"""
Convert a string value into an Enum instance
If value is None or empty None is returned
"""
if not value:
return None
try:
return cls[value.replace(" ", "_").upper()]
except KeyError:
raise InvalidArgument(
f"Invalid argument {value}. "
f"Allowed values are {','.join(e.name for e in cls)}."
) from None
def __str__(self) -> str:
return self.value
|