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

This commit is contained in:
Yurii Karabas 2021-07-30 15:56:12 +03:00 committed by GitHub
parent 6ff8903809
commit 7b975f81e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View File

@ -3777,6 +3777,12 @@ class NewTypeTests:
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

View File

@ -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 @@ class NewType:
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__}'