From eea8c768a896455655f78aaa2bc4eb1f1b64b206 Mon Sep 17 00:00:00 2001 From: Joan Fontanals Martinez Date: Wed, 6 Sep 2023 17:29:43 +0200 Subject: [PATCH] fix: skip annotations if not in __fields__ Signed-off-by: Joan Fontanals Martinez --- docarray/utils/create_dynamic_doc_class.py | 2 ++ tests/units/util/test_create_dynamic_code_class.py | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docarray/utils/create_dynamic_doc_class.py b/docarray/utils/create_dynamic_doc_class.py index a3f86aad2c..087f0f467d 100644 --- a/docarray/utils/create_dynamic_doc_class.py +++ b/docarray/utils/create_dynamic_doc_class.py @@ -51,6 +51,8 @@ class MyDoc(BaseDoc): """ fields: Dict[str, Any] = {} for field_name, field in model.__annotations__.items(): + if field_name not in model.__fields__: + continue field_info = model.__fields__[field_name].field_info try: if safe_issubclass(field, DocList): diff --git a/tests/units/util/test_create_dynamic_code_class.py b/tests/units/util/test_create_dynamic_code_class.py index 848a1dd805..4a26388e65 100644 --- a/tests/units/util/test_create_dynamic_code_class.py +++ b/tests/units/util/test_create_dynamic_code_class.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Optional, Union, ClassVar import numpy as np import pytest @@ -17,9 +17,11 @@ def test_create_pydantic_model_from_schema(transformation): class Nested2Doc(BaseDoc): value: str + classvar: ClassVar[str] = 'classvar2' class Nested1Doc(BaseDoc): nested: Nested2Doc + classvar: ClassVar[str] = 'classvar1' class CustomDoc(BaseDoc): tensor: Optional[AnyTensor] @@ -34,6 +36,7 @@ class CustomDoc(BaseDoc): lu: List[Union[str, int]] = [0, 1, 2] tags: Optional[Dict[str, Any]] = None nested: Nested1Doc + classvar: ClassVar[str] = 'classvar' CustomDocCopy = create_pure_python_type_model(CustomDoc) new_custom_doc_model = create_base_doc_from_schema( @@ -87,6 +90,9 @@ class CustomDoc(BaseDoc): assert custom_partial_da[0].single_text.text == 'single hey ha' assert custom_partial_da[0].single_text.embedding.shape == (2,) assert original_back[0].nested.nested.value == 'hello world' + assert original_back[0].classvar == 'classvar' + assert original_back[0].nested.classvar == 'classvar1' + assert original_back[0].nested.nested.classvar == 'classvar2' assert len(original_back) == 1 assert original_back[0].url == 'photo.jpg'