Skip to content

Commit fe757e2

Browse files
committed
Add Enum class that supports deprecated members
This commit introduces a new `frequenz.core.enum` module that provides a drop-in replacement for the standard library's `enum.Enum` class, with added support for deprecating enum members. Signed-off-by: Leandro Lucarella <luca-frequenz@llucax.com>
1 parent 4bd8b11 commit fe757e2

3 files changed

Lines changed: 37 additions & 2 deletions

File tree

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,25 @@ positive = Interval(0, None) # [0, ∞]
9292
assert 1000 in positive # True
9393
```
9494

95+
### `Enum` with deprecated members
96+
97+
Define enums with deprecated members that raise deprecation warnings when
98+
accessed:
99+
100+
```python
101+
from frequenz.core.enum import Enum, DeprecatedMember
102+
103+
class TaskStatus(Enum):
104+
OPEN = 1
105+
IN_PROGRESS = 2
106+
PENDING = DeprecatedMember(1, "PENDING is deprecated, use OPEN instead")
107+
DONE = DeprecatedMember(3, "DONE is deprecated, use FINISHED instead")
108+
FINISHED = 4
109+
110+
status1 = TaskStatus.PENDING # Warns: "PENDING is deprecated, use OPEN instead"
111+
assert status1 is TaskStatus.OPEN
112+
```
113+
95114
### Typing Utilities
96115

97116
Disable class constructors to enforce factory pattern usage:

RELEASE_NOTES.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,23 @@
1010

1111
## New Features
1212

13-
<!-- Here goes the main new features and examples or instructions on how to use them -->
13+
- A new `frequenz.core.enum` module was added, proding a drop-in replacement `Enum` that supports deprecating members.
14+
15+
Example:
16+
17+
```python
18+
from frequenz.core.enum import Enum, DeprecatedMember
19+
20+
class TaskStatus(Enum):
21+
OPEN = 1
22+
IN_PROGRESS = 2
23+
PENDING = DeprecatedMember(1, "PENDING is deprecated, use OPEN instead")
24+
DONE = DeprecatedMember(3, "DONE is deprecated, use FINISHED instead")
25+
FINISHED = 4
26+
27+
status1 = TaskStatus.PENDING # Warns: "PENDING is deprecated, use OPEN instead"
28+
assert status1 is TaskStatus.OPEN
29+
```
1430

1531
## Bug Fixes
1632

src/frequenz/core/datetime.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# License: MIT
22
# Copyright © 2024 Frequenz Energy-as-a-Service GmbH
33

4-
"""Timeseries basic types."""
4+
"""Date and time utilities."""
55

66
from datetime import datetime, timezone
77
from typing import Final

0 commit comments

Comments
 (0)