Skip to content
6 changes: 0 additions & 6 deletions Lib/test/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -831,12 +831,6 @@ def test_union_copy(self):
self.assertEqual(copied.__args__, orig.__args__)
self.assertEqual(copied.__parameters__, orig.__parameters__)

def test_union_parameter_substitution_errors(self):
T = typing.TypeVar("T")
x = int | T
with self.assertRaises(TypeError):
x[42]

def test_or_type_operator_with_forward(self):
T = typing.TypeVar('T')
ForwardAfter = T | 'Forward'
Expand Down
31 changes: 3 additions & 28 deletions Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,6 @@ def test_cannot_instantiate_vars(self):
TypeVar('A')()

def test_bound_errors(self):
with self.assertRaises(TypeError):
TypeVar('X', bound=42)
with self.assertRaises(TypeError):
TypeVar('X', str, float, bound=Employee)

Expand Down Expand Up @@ -1994,9 +1992,6 @@ def test_extended_generic_rules_eq(self):
class Base: ...
class Derived(Base): ...
self.assertEqual(Union[T, Base][Union[Base, Derived]], Union[Base, Derived])
with self.assertRaises(TypeError):
Union[T, int][1]

self.assertEqual(Callable[[T], T][KT], Callable[[KT], KT])
self.assertEqual(Callable[..., List[T]][int], Callable[..., List[int]])

Expand Down Expand Up @@ -2497,8 +2492,6 @@ class Foo(obj):
class ClassVarTests(BaseTestCase):

def test_basics(self):
with self.assertRaises(TypeError):
ClassVar[1]
with self.assertRaises(TypeError):
ClassVar[int, str]
with self.assertRaises(TypeError):
Expand Down Expand Up @@ -2537,8 +2530,6 @@ class FinalTests(BaseTestCase):

def test_basics(self):
Final[int] # OK
with self.assertRaises(TypeError):
Final[1]
with self.assertRaises(TypeError):
Final[int, str]
with self.assertRaises(TypeError):
Expand Down Expand Up @@ -2923,14 +2914,6 @@ def foo(a: 'Node[T'):
with self.assertRaises(SyntaxError):
get_type_hints(foo)

def test_type_error(self):

def foo(a: Tuple['42']):
pass

with self.assertRaises(TypeError):
get_type_hints(foo)

def test_name_error(self):

def foo(a: 'Noode[T]'):
Expand Down Expand Up @@ -4222,8 +4205,6 @@ def test_namedtuple_keyword_usage(self):
self.assertEqual(LocalEmployee.__annotations__, dict(name=str, age=int))
with self.assertRaises(TypeError):
NamedTuple('Name', [('x', int)], y=str)
with self.assertRaises(TypeError):
NamedTuple('Name', x=1, y='a')

def test_namedtuple_special_keyword_names(self):
NT = NamedTuple("NT", cls=type, self=object, typename=str, fields=list)
Expand Down Expand Up @@ -4259,8 +4240,6 @@ def test_namedtuple_errors(self):
NamedTuple('Emp', [('_name', str)])
with self.assertRaises(TypeError):
NamedTuple(typename='Emp', name=str, id=int)
with self.assertRaises(TypeError):
NamedTuple('Emp', fields=[('name', str), ('id', int)])

def test_copy_and_pickle(self):
global Emp # pickle wants to reference the class by name
Expand Down Expand Up @@ -4333,11 +4312,8 @@ def test_typeddict_create_errors(self):
TypedDict()
with self.assertRaises(TypeError):
TypedDict('Emp', [('name', str)], None)

with self.assertRaises(TypeError):
TypedDict(_typename='Emp', name=str, id=int)
with self.assertRaises(TypeError):
TypedDict('Emp', _fields={'name': str, 'id': int})

def test_typeddict_errors(self):
Emp = TypedDict('Emp', {'name': str, 'id': int})
Expand All @@ -4349,10 +4325,6 @@ def test_typeddict_errors(self):
isinstance(jim, Emp)
with self.assertRaises(TypeError):
issubclass(dict, Emp)
with self.assertRaises(TypeError):
TypedDict('Hi', x=1)
with self.assertRaises(TypeError):
TypedDict('Hi', [('x', int), ('y', 1)])
with self.assertRaises(TypeError):
TypedDict('Hi', [('x', int)], y=int)

Expand Down Expand Up @@ -5066,6 +5038,9 @@ def test_basics(self):
def foo(arg) -> TypeGuard[int]: ...
self.assertEqual(gth(foo), {'return': TypeGuard[int]})

with self.assertRaises(TypeError):
TypeGuard[int, str]

def test_repr(self):
self.assertEqual(repr(TypeGuard), 'typing.TypeGuard')
cv = TypeGuard[int]
Expand Down
4 changes: 1 addition & 3 deletions Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,7 @@ def _type_check(arg, msg, is_argument=True, module=None, *, allow_special_forms=
return arg
if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol):
raise TypeError(f"Plain {arg} is not valid as type argument")
if isinstance(arg, (type, TypeVar, ForwardRef, types.UnionType, ParamSpec)):
return arg
if not callable(arg):
if type(arg) is tuple:
raise TypeError(f"{msg} Got {arg!r:.100}.")
return arg

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
No longer require valid typeforms to be callable. Patch by Gregory Beauregard.