[Python-checkins] bpo-44761: Change default value of NewType __module__ attr (GH-27406)
ambv
webhook-mailer at python.org
Fri Jul 30 08:56:40 EDT 2021
https://github.com/python/cpython/commit/7b975f81e4dba70a42c6279539a7fcfe4211b4c0
commit: 7b975f81e4dba70a42c6279539a7fcfe4211b4c0
branch: main
author: Yurii Karabas <1998uriyyo at gmail.com>
committer: ambv <lukasz at 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__}'
More information about the Python-checkins
mailing list