Skip to content

Commit c766078

Browse files
committed
fix #106
1 parent e1a35a1 commit c766078

File tree

6 files changed

+90
-4
lines changed

6 files changed

+90
-4
lines changed

doc/source/changelog.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
Change Log
33
==========
44

5+
v2.4.1 (2025-11-09)
6+
===================
7+
8+
* Fixed `StrEnumProperties auto() resolves differently across py 3.11 boundary <https://github.com/bckohan/enum-properties/issues/106>`_
9+
510
v2.4.0 (2025-09-21)
611
===================
712

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "enum-properties"
7-
version = "2.4.0"
7+
version = "2.4.1"
88
description = "Add properties and method specializations to Python enumeration values with a simple declarative syntax."
99
requires-python = ">=3.9,<4.0"
1010
authors = [

src/enum_properties/__init__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from dataclasses import dataclass
2828
from functools import cached_property
2929

30-
VERSION = (2, 4, 0)
30+
VERSION = (2, 4, 1)
3131

3232
__title__ = "Enum Properties"
3333
__version__ = ".".join(str(i) for i in VERSION)
@@ -833,6 +833,17 @@ class StrEnumProperties(
833833
def __hash__(self):
834834
return getattr(enum, "StrEnum", str).__hash__(self)
835835

836+
def __str__(self):
837+
if sys.version_info < (3, 11):
838+
return str(self.value)
839+
return super().__str__()
840+
841+
@staticmethod
842+
def _generate_next_value_(name, start, count, last_values):
843+
if sys.version_info < (3, 11):
844+
return name.lower()
845+
return enum.StrEnum._generate_next_value_(name, start, count, last_values)
846+
836847

837848
class DecomposeMixin(with_typehint(enum.Flag)): # type: ignore
838849
"""

tests/annotations/test.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from enum_properties import (
88
EnumProperties,
99
IntEnumProperties,
10+
StrEnumProperties,
1011
SymmetricMixin,
1112
Symmetric,
1213
s,
@@ -948,3 +949,37 @@ class DependentEnum(EnumProperties):
948949
)
949950

950951
self.assertTrue(DependentEnum(IndependentEnum.VALUE1) is DependentEnum.VALUE1)
952+
953+
def test_auto_override(self):
954+
class NumbersAuto(StrEnumProperties):
955+
spanish: str
956+
957+
ONE = auto(), "Uno"
958+
TWO = auto(), "Dos"
959+
THREE = auto(), "Tres"
960+
961+
self.assertEqual(str(NumbersAuto.ONE), "one")
962+
self.assertEqual(NumbersAuto.ONE.value, "one")
963+
self.assertEqual(NumbersAuto.TWO.value, "two")
964+
self.assertEqual(NumbersAuto.THREE.value, "three")
965+
self.assertEqual(NumbersAuto.ONE.spanish, "Uno")
966+
self.assertEqual(NumbersAuto.TWO.spanish, "Dos")
967+
self.assertEqual(NumbersAuto.THREE.spanish, "Tres")
968+
969+
class ColorAutoOverride(StrEnumProperties):
970+
def _generate_next_value_(name, start, count, last_values):
971+
return name.title() * 2
972+
973+
spanish: str
974+
975+
ONE = auto(), "Uno"
976+
TWO = auto(), "Dos"
977+
THREE = auto(), "Tres"
978+
979+
self.assertEqual(str(ColorAutoOverride.ONE), "OneOne")
980+
self.assertEqual(ColorAutoOverride.ONE.value, "OneOne")
981+
self.assertEqual(ColorAutoOverride.TWO.value, "TwoTwo")
982+
self.assertEqual(ColorAutoOverride.THREE.value, "ThreeThree")
983+
self.assertEqual(ColorAutoOverride.ONE.spanish, "Uno")
984+
self.assertEqual(ColorAutoOverride.TWO.spanish, "Dos")
985+
self.assertEqual(ColorAutoOverride.THREE.spanish, "Tres")

tests/legacy/test.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
from enum import Enum, auto
33
from unittest import TestCase
44

5-
from enum_properties import EnumProperties, IntEnumProperties, SymmetricMixin, p, s
5+
from enum_properties import (
6+
EnumProperties,
7+
IntEnumProperties,
8+
StrEnumProperties,
9+
SymmetricMixin,
10+
p,
11+
s,
12+
)
613

714

815
class TestEnums(TestCase):
@@ -860,3 +867,31 @@ class TransitiveEnum(EnumProperties, p("label"), s("pos")):
860867
self.assertEqual(test_dict[TransitiveEnum.VAL0], "ZERO")
861868
self.assertEqual(test_dict[TransitiveEnum.VAL1], "ONE")
862869
self.assertEqual(test_dict[TransitiveEnum.VAL2], "TWO")
870+
871+
def test_auto_override(self):
872+
class NumbersAuto(StrEnumProperties, p("spanish")):
873+
ONE = auto(), "Uno"
874+
TWO = auto(), "Dos"
875+
THREE = auto(), "Tres"
876+
877+
self.assertEqual(NumbersAuto.ONE.value, "one")
878+
self.assertEqual(NumbersAuto.TWO.value, "two")
879+
self.assertEqual(NumbersAuto.THREE.value, "three")
880+
self.assertEqual(NumbersAuto.ONE.spanish, "Uno")
881+
self.assertEqual(NumbersAuto.TWO.spanish, "Dos")
882+
self.assertEqual(NumbersAuto.THREE.spanish, "Tres")
883+
884+
class ColorAutoOverride(StrEnumProperties, p("spanish")):
885+
def _generate_next_value_(name, start, count, last_values):
886+
return name.title() * 2
887+
888+
ONE = auto(), "Uno"
889+
TWO = auto(), "Dos"
890+
THREE = auto(), "Tres"
891+
892+
self.assertEqual(ColorAutoOverride.ONE.value, "OneOne")
893+
self.assertEqual(ColorAutoOverride.TWO.value, "TwoTwo")
894+
self.assertEqual(ColorAutoOverride.THREE.value, "ThreeThree")
895+
self.assertEqual(ColorAutoOverride.ONE.spanish, "Uno")
896+
self.assertEqual(ColorAutoOverride.TWO.spanish, "Dos")
897+
self.assertEqual(ColorAutoOverride.THREE.spanish, "Tres")

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)