Repository navigation
Commit 9fc5a0d
committed
Fix Enum exports for Python 3.11
Python 3.11 has changed behavior of __str__ for IntEnum. Before it would
return the name, like "Color.RED", now it's equivalent to
str(self.value), for example "1".__repr__ is unchanged [1].
Python 3.11 also introduced StrEnum, which we can use instead of mixing
in str type for our StrEnumDefinition, and that introcudes the same
change of __str__ behavior: it returns the value as string.
The corresponds, in spirit, to what I often did in Python:
class Color(Enum):
RED="red"
BLUE="blue"
def __str__(self):
return self.value
To ensure consistent behavior for different Python versions, and
because we can determine our own rules for the enum types we define, we
mimic the 3.11 __str__ behavior on IntEnumDefinition and
StrEnumDefinition.
We use the same trick, by setting the __str__ property to the version of
the underlying type: str.__str__ and int.__repr__. int.__str__ won't do
because int directly inherits object.__str__ that basically repr(self),
and thus back to Enum.__repr__. So we need int.__repr__ to return the
integer as string.
[1] python/cpython#842471 parent 5deb0e9 commit 9fc5a0d
3 files changed
Lines changed: 80 additions & 22 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| 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 | + | |
51 | 110 | | |
52 | 111 | | |
53 | 112 | | |
| |||
93 | 152 | | |
94 | 153 | | |
95 | 154 | | |
96 | | - | |
97 | | - | |
| 155 | + | |
98 | 156 | | |
99 | 157 | | |
100 | 158 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
57 | 64 | | |
58 | 65 | | |
59 | 66 | | |
| |||
67 | 74 | | |
68 | 75 | | |
69 | 76 | | |
70 | | - | |
| 77 | + | |
71 | 78 | | |
72 | 79 | | |
73 | 80 | | |
| |||
142 | 149 | | |
143 | 150 | | |
144 | 151 | | |
145 | | - | |
| 152 | + | |
146 | 153 | | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | 154 | | |
151 | 155 | | |
152 | 156 | | |
| |||
156 | 160 | | |
157 | 161 | | |
158 | 162 | | |
159 | | - | |
160 | | - | |
| 163 | + | |
161 | 164 | | |
162 | 165 | | |
163 | 166 | | |
| |||
234 | 237 | | |
235 | 238 | | |
236 | 239 | | |
237 | | - | |
| 240 | + | |
238 | 241 | | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| |||
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
| 254 | + | |
| 255 | + | |
254 | 256 | | |
255 | | - | |
256 | | - | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
257 | 260 | | |
258 | 261 | | |
259 | 262 | | |
| |||
283 | 286 | | |
284 | 287 | | |
285 | 288 | | |
286 | | - | |
| 289 | + | |
287 | 290 | | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
| 291 | + | |
292 | 292 | | |
293 | 293 | | |
294 | 294 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
753 | 753 | | |
754 | 754 | | |
755 | 755 | | |
756 | | - | |
| 756 | + | |
757 | 757 | | |
758 | 758 | | |
759 | 759 | | |
| |||
777 | 777 | | |
778 | 778 | | |
779 | 779 | | |
780 | | - | |
| 780 | + | |
781 | 781 | | |
782 | 782 | | |
783 | 783 | | |
| |||
0 commit comments