summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2023-05-23 01:59:40 (GMT)
committerGitHub <noreply@github.com>2023-05-23 01:59:40 (GMT)
commit5ecd8c85f934e13a5ff98db6539d89e0c7c03f2d (patch)
treeae24dab03b41d5fa6b2ac0e052d20bd6256e9e6a
parent2e5d8a90aa633ff0bebc9b2b8e21eea389937b19 (diff)
downloadcpython-5ecd8c85f934e13a5ff98db6539d89e0c7c03f2d.zip
cpython-5ecd8c85f934e13a5ff98db6539d89e0c7c03f2d.tar.gz
cpython-5ecd8c85f934e13a5ff98db6539d89e0c7c03f2d.tar.bz2
gh-104764: [Enum] fix 3.13-specific tests (GH-104779)
-rw-r--r--Lib/enum.py44
-rw-r--r--Lib/test/test_enum.py18
2 files changed, 19 insertions, 43 deletions
diff --git a/Lib/enum.py b/Lib/enum.py
index 6e497f7..b50fe50 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -388,16 +388,8 @@ class _EnumDict(dict):
Single underscore (sunder) names are reserved.
"""
- if _is_internal_class(self._cls_name, value):
- import warnings
- warnings.warn(
- "In 3.13 classes created inside an enum will not become a member. "
- "Use the `member` decorator to keep the current behavior.",
- DeprecationWarning,
- stacklevel=2,
- )
if _is_private(self._cls_name, key):
- # also do nothing, name will be a normal attribute
+ # do nothing, name will be a normal attribute
pass
elif _is_sunder(key):
if key not in (
@@ -440,10 +432,9 @@ class _EnumDict(dict):
value = value.value
elif _is_descriptor(value):
pass
- # TODO: uncomment next three lines in 3.13
- # elif _is_internal_class(self._cls_name, value):
- # # do nothing, name will be a normal attribute
- # pass
+ elif _is_internal_class(self._cls_name, value):
+ # do nothing, name will be a normal attribute
+ pass
else:
if key in self:
# enum overwriting a descriptor?
@@ -1169,28 +1160,13 @@ class Enum(metaclass=EnumType):
if not last_values:
return start
try:
- last = last_values[-1]
- last_values.sort()
- if last == last_values[-1]:
- # no difference between old and new methods
- return last + 1
- else:
- # trigger old method (with warning)
- raise TypeError
+ last_value = sorted(last_values).pop()
except TypeError:
- import warnings
- warnings.warn(
- "In 3.13 the default `auto()`/`_generate_next_value_` will require all values to be sortable and support adding +1\n"
- "and the value returned will be the largest value in the enum incremented by 1",
- DeprecationWarning,
- stacklevel=3,
- )
- for v in last_values:
- try:
- return v + 1
- except TypeError:
- pass
- return start
+ raise TypeError('unable to sort non-numeric values') from None
+ try:
+ return last_value + 1
+ except TypeError:
+ raise TypeError('unable to increment %r' % (last_value, )) from None
@classmethod
def _missing_(cls, value):
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index 350554b..fe70102 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -1090,7 +1090,7 @@ class TestSpecial(unittest.TestCase):
)
@unittest.skipIf(
- python_version < (3, 14),
+ python_version < (3, 13),
'inner classes are still members',
)
def test_nested_classes_in_enum_are_not_members(self):
@@ -4261,21 +4261,21 @@ class TestInternals(unittest.TestCase):
self.assertEqual(Color.green.value, 3)
@unittest.skipIf(
- python_version < (3, 14),
- 'mixed types with auto() will raise in the future',
+ python_version < (3, 13),
+ 'mixed types with auto() will raise in 3.13',
)
def test_auto_garbage_fail(self):
- with self.assertRaisesRegex(TypeError, 'will require all values to be sortable'):
+ with self.assertRaisesRegex(TypeError, "unable to increment 'red'"):
class Color(Enum):
red = 'red'
blue = auto()
@unittest.skipIf(
- python_version < (3, 14),
- 'mixed types with auto() will raise in the future',
+ python_version < (3, 13),
+ 'mixed types with auto() will raise in 3.13',
)
def test_auto_garbage_corrected_fail(self):
- with self.assertRaisesRegex(TypeError, 'will require all values to be sortable'):
+ with self.assertRaisesRegex(TypeError, 'unable to sort non-numeric values'):
class Color(Enum):
red = 'red'
blue = 2
@@ -4303,8 +4303,8 @@ class TestInternals(unittest.TestCase):
self.assertEqual(Color.blue.value, 'blue')
@unittest.skipIf(
- python_version < (3, 14),
- 'auto() will return highest value + 1 in the future',
+ python_version < (3, 13),
+ 'auto() will return highest value + 1 in 3.13',
)
def test_auto_with_aliases(self):
class Color(Enum):