From 8266238241e953a9db0c2db9c82804554bc89015 Mon Sep 17 00:00:00 2001 From: punndcoder28 Date: Sat, 16 Sep 2023 22:52:54 +0530 Subject: [PATCH] fix: raise exception when type of DocList is object Signed-off-by: punndcoder28 --- docarray/array/doc_list/doc_list.py | 13 ++++++++++--- tests/units/array/test_array.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docarray/array/doc_list/doc_list.py b/docarray/array/doc_list/doc_list.py index b63bf980556..f27e31d1743 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 f4f81137455..ab078ebac78 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'