gh-104549: Set __module__ on TypeAliasType (#104550)

This commit is contained in:
Jelle Zijlstra 2023-05-18 15:56:15 -07:00 committed by GitHub
parent 1c55e8d007
commit b9dce3aec4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 93 additions and 34 deletions

View file

@ -1,6 +1,6 @@
"""Module for testing the behavior of generics across different modules."""
from typing import TypeVar, Generic, Optional
from typing import TypeVar, Generic, Optional, TypeAliasType
default_a: Optional['A'] = None
default_b: Optional['B'] = None
@ -19,3 +19,6 @@ class B(Generic[T]):
my_inner_a1: 'B.A'
my_inner_a2: A
my_outer_a: 'A' # unless somebody calls get_type_hints with localns=B.__dict__
type Alias = int
OldStyle = TypeAliasType("OldStyle", int)

View file

@ -1,6 +1,8 @@
import pickle
import types
import unittest
from test.support import check_syntax_error, run_code
from test import mod_generics_cache
from typing import Callable, TypeAliasType, TypeVar, get_args
@ -155,6 +157,7 @@ class TypeAliasConstructorTest(unittest.TestCase):
self.assertEqual(TA.__name__, "TA")
self.assertIs(TA.__value__, int)
self.assertEqual(TA.__type_params__, ())
self.assertEqual(TA.__module__, __name__)
def test_generic(self):
T = TypeVar("T")
@ -162,12 +165,14 @@ class TypeAliasConstructorTest(unittest.TestCase):
self.assertEqual(TA.__name__, "TA")
self.assertEqual(TA.__value__, list[T])
self.assertEqual(TA.__type_params__, (T,))
self.assertEqual(TA.__module__, __name__)
def test_keywords(self):
TA = TypeAliasType(name="TA", value=int)
self.assertEqual(TA.__name__, "TA")
self.assertIs(TA.__value__, int)
self.assertEqual(TA.__type_params__, ())
self.assertEqual(TA.__module__, __name__)
def test_errors(self):
with self.assertRaises(TypeError):
@ -202,3 +207,18 @@ class TypeAliasTypeTest(unittest.TestCase):
union3 = list[range] | Alias1
self.assertIsInstance(union3, types.UnionType)
self.assertEqual(get_args(union3), (list[range], Alias1))
def test_module(self):
self.assertEqual(TypeAliasType.__module__, "typing")
type Alias = int
self.assertEqual(Alias.__module__, __name__)
self.assertEqual(mod_generics_cache.Alias.__module__,
mod_generics_cache.__name__)
self.assertEqual(mod_generics_cache.OldStyle.__module__,
mod_generics_cache.__name__)
def test_pickling(self):
pickled = pickle.dumps(mod_generics_cache.Alias)
self.assertIs(pickle.loads(pickled), mod_generics_cache.Alias)
pickled = pickle.dumps(mod_generics_cache.OldStyle)
self.assertIs(pickle.loads(pickled), mod_generics_cache.OldStyle)