diff --git a/docarray/array/doc_list/doc_list.py b/docarray/array/doc_list/doc_list.py index b63bf98055..f27e31d174 100644 --- a/docarray/array/doc_list/doc_list.py +++ b/docarray/array/doc_list/doc_list.py @@ -16,7 +16,7 @@ from pydantic import parse_obj_as from typing_extensions import SupportsIndex -from typing_inspect import is_union_type +from typing_inspect import is_union_type, is_typevar from docarray.array.any_array import AnyDocArray from docarray.array.doc_list.io import IOMixinDocList @@ -337,8 +337,15 @@ def __class_getitem__(cls, item: Union[Type[BaseDoc], TypeVar, str]): if isinstance(item, type) and safe_issubclass(item, BaseDoc): return AnyDocArray.__class_getitem__.__func__(cls, item) # type: ignore - else: - return super().__class_getitem__(item) + if ( + isinstance(item, object) + and not is_typevar(item) + and not isinstance(item, str) + and item is not Any + ): + raise TypeError('Expecting a type, got object instead') + + return super().__class_getitem__(item) def __repr__(self): return AnyDocArray.__repr__(self) # type: ignore diff --git a/tests/units/array/test_array.py b/tests/units/array/test_array.py index f4f8113745..ab078ebac7 100644 --- a/tests/units/array/test_array.py +++ b/tests/units/array/test_array.py @@ -487,3 +487,13 @@ def test_legacy_doc(): newDoc = LegacyDocument() da = DocList[LegacyDocument]([newDoc]) da.summary() + + +def test_parameterize_list(): + from docarray import DocList, BaseDoc + + with pytest.raises(TypeError) as excinfo: + doc = DocList[BaseDoc()] + assert doc is None + + assert str(excinfo.value) == 'Expecting a type, got object instead'