bpo-44761: Change default value of NewType __module__ attr (GH-27406)

https://github.com/python/cpython/commit/7b975f81e4dba70a42c6279539a7fcfe421... commit: 7b975f81e4dba70a42c6279539a7fcfe4211b4c0 branch: main author: Yurii Karabas <1998uriyyo@gmail.com> committer: ambv <lukasz@langa.pl> date: 2021-07-30T14:56:12+02:00 summary: bpo-44761: Change default value of NewType __module__ attr (GH-27406) files: M Lib/test/test_typing.py M Lib/typing.py diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index bc9021addbe35..06bd49b593a77 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -3777,6 +3777,12 @@ def test_pickle(self): with self.assertRaises(pickle.PicklingError): pickle.dumps(UserAge, proto) + def test_missing__name__(self): + code = ("import typing\n" + "NT = typing.NewType('NT', int)\n" + ) + exec(code, {}) + class NewTypePythonTests(NewTypeTests, BaseTestCase): module = py_typing diff --git a/Lib/typing.py b/Lib/typing.py index f07b00f32ece9..2826525efff7a 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1387,11 +1387,11 @@ def _no_init(self, *args, **kwargs): if type(self)._is_protocol: raise TypeError('Protocols cannot be instantiated') -def _callee(depth=2, default=None): +def _caller(depth=1, default='__main__'): try: - return sys._getframe(depth).f_globals['__name__'] + return sys._getframe(depth + 1).f_globals.get('__name__', default) except (AttributeError, ValueError): # For platforms without _getframe() - return default + return None def _allow_reckless_class_checks(depth=3): @@ -2395,8 +2395,10 @@ def __init__(self, name, tp): if '.' in name: name = name.rpartition('.')[-1] self.__name__ = name - self.__module__ = _callee(default='typing') self.__supertype__ = tp + def_mod = _caller() + if def_mod != 'typing': + self.__module__ = def_mod def __repr__(self): return f'{self.__module__}.{self.__qualname__}'
participants (1)
-
ambv