enum
frequenz.core.enum ¤
Enum utilities with support for deprecated members.
This module provides an Enum
base class that extends the
standard library's enum.Enum
to support marking certain members as deprecated.
See the class documentation for details and examples.
Attributes¤
frequenz.core.enum.EnumT
module-attribute
¤
Type variable for enum types.
Classes¤
frequenz.core.enum.DeprecatedMember ¤
Marker used in enum class bodies to declare deprecated members.
Please read the Enum
documentation for details and
examples.
Source code in frequenz/core/enum.py
frequenz.core.enum.DeprecatedMemberWarning ¤
Bases: DeprecationWarning
Warning category for deprecated enum members.
frequenz.core.enum.DeprecatingEnumType ¤
Bases: EnumType
Enum metaclass that supports DeprecatedMember
wrappers.
Tip
Normally it is not necessary to use this class directly, use
Enum
instead.
Behavior:
- In the class body, members may be declared as
NAME = DeprecatedMember(value, msg)
. - During class creation, these wrappers are replaced with
value
so that a normal enum member or alias is created byEnumType
. -
The deprecated names are recorded so that:
MyEnum.NAME
warns (attribute access by name)MyEnum["NAME"]
warns (lookup by name)MyEnum(value)
warns only if the resolved member has no non-deprecated aliases (all names for that member are deprecated).
Source code in frequenz/core/enum.py
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
|
Functions¤
__call__ ¤
Resolve value
to a member, warning if the member is purely deprecated.
Source code in frequenz/core/enum.py
__getattribute__ ¤
Resolve name
to a member, warning if the member is deprecated.
Source code in frequenz/core/enum.py
__getitem__ ¤
Resolve name
to a member, warning if the member is deprecated.
Source code in frequenz/core/enum.py
__new__ ¤
__new__(
mcs,
name: str,
bases: tuple[type[EnumT], ...],
classdict: Mapping[str, Any],
**kw: Any
) -> type[EnumT]
Create the new enum class, rewriting DeprecatedMember
instances.
Source code in frequenz/core/enum.py
frequenz.core.enum.Enum ¤
Bases: Enum
Base class for enums that support DeprecatedMember.
This class extends the standard library's enum.Enum
to support marking
certain members as deprecated. Deprecated members can be accessed, but doing so
will emit a DeprecationWarning
, specifically
a DeprecatedMemberWarning
.
To declare a deprecated member, use the
DeprecatedMember
wrapper in the class body.
When using the enum constructor (i.e. MyEnum(value)
), a warning is only emitted if
the resolved member has no non-deprecated aliases. If there is at least one
non-deprecated alias for the member, no warning is emitted.
Example
from frequenz.core.enum import Enum, DeprecatedMember
class TaskStatus(Enum):
OPEN = 1
IN_PROGRESS = 2
PENDING = DeprecatedMember(1, "PENDING is deprecated, use OPEN instead")
DONE = DeprecatedMember(3, "DONE is deprecated, use FINISHED instead")
FINISHED = 4
# Accessing deprecated members:
status1 = TaskStatus.PENDING # Warns: "PENDING is deprecated, use OPEN instead"
assert status1 is TaskStatus.OPEN
status2 = TaskStatus["DONE"] # Warns: "DONE is deprecated, use FINISHED instead"
assert status2 is TaskStatus.FINISHED
status3 = TaskStatus(1) # No warning, resolves to OPEN which has a non-deprecated alias
assert status3 is TaskStatus.OPEN
status4 = TaskStatus(3) # Warns: "DONE is deprecated, use FINISHED instead"
assert status4 is TaskStatus.FINISHED