mypy_extensions icon indicating copy to clipboard operation
mypy_extensions copied to clipboard

`test_py36_class_syntax_usage` fails on py 3.14.0a6

Open LordGrimmauld opened this issue 8 months ago • 4 comments

=================================== FAILURES ===================================
_________________ TypedDictTests.test_py36_class_syntax_usage __________________

self = <testextensions.TypedDictTests testMethod=test_py36_class_syntax_usage>

    def test_py36_class_syntax_usage(self):
        self.assertEqual(LabelPoint2D.__name__, 'LabelPoint2D')  # noqa
        self.assertEqual(LabelPoint2D.__module__, __name__)  # noqa
>       self.assertEqual(LabelPoint2D.__annotations__, {'x': int, 'y': int, 'label': str})  # noqa
E       AssertionError: {'label': <class 'str'>} != {'x': <class 'int'>, 'y': <class 'int'>, 'label': <class 'str'>}
E       - {'label': <class 'str'>}
E       + {'label': <class 'str'>, 'x': <class 'int'>, 'y': <class 'int'>}

tests/testextensions.py:105: AssertionError
=========================== short test summary info ============================
FAILED tests/testextensions.py::TypedDictTests::test_py36_class_syntax_usage - AssertionError: {'label': <class 'str'>} != {'x': <class 'int'>, 'y': <clas...
========================= 1 failed, 11 passed in 0.08s =========================

Found while building both mypy-extensions 1.0.0 and 1.1.0 on NixOS. Building against python 3.14.0a6. Python 3.14 is expected to release 2025-10-07, so there is still time to fix this. I understand python 3.14 is currently an alpha, but it imo it makes sense to report these things as early as they are found.

LordGrimmauld avatar Apr 27 '25 08:04 LordGrimmauld

This looks like it's related to the PEP 649 implementation in Python 3.14. /CC @JelleZijlstra

cdce8p avatar May 01 '25 15:05 cdce8p

This is because mypy_extensions.TypedDict looks at __annotations__ in the class dict, which no longer works.

The easiest fix would be to just re-export typing.TypedDict on newer Python versions.

JelleZijlstra avatar May 01 '25 19:05 JelleZijlstra

The easiest fix would be to just re-export typing.TypedDict on newer Python versions.

Ideally yes, however support for the keyword-argument syntax was removed in 3.13 which is still "supported" here. https://github.com/python/mypy_extensions/blob/9fc7fe08c8e638cdd9bbf1aa9bf188aef4fd24ef/tests/testextensions.py#L69-L70

cdce8p avatar May 01 '25 19:05 cdce8p

Another fix would be to apply the changes to typing.TypedDict from 3.14 to this implementation.

JelleZijlstra avatar May 01 '25 22:05 JelleZijlstra