Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 896c20b

Browse filesBrowse files
author
Joan Fontanals
authored
fix: create more info from dynamic (#1733)
Signed-off-by: Joan Fontanals Martinez <joan.martinez@jina.ai>
1 parent 24c00cc commit 896c20b
Copy full SHA for 896c20b

2 files changed

+28-4Lines changed: 28 additions & 4 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎docarray/utils/create_dynamic_doc_class.py‎

Copy file name to clipboardExpand all lines: docarray/utils/create_dynamic_doc_class.py
+10-4Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from docarray import DocList, BaseDoc
22
from docarray.typing import AnyTensor
33
from pydantic import create_model
4+
from pydantic.fields import FieldInfo
45
from typing import Dict, List, Any, Union, Optional, Type
56
from docarray.utils._internal._typing import safe_issubclass
67

@@ -36,14 +37,15 @@ class MyDoc(BaseDoc):
3637
"""
3738
fields: Dict[str, Any] = {}
3839
for field_name, field in model.__annotations__.items():
40+
field_info = model.__fields__[field_name].field_info
3941
try:
4042
if safe_issubclass(field, DocList):
4143
t: Any = field.doc_type
42-
fields[field_name] = (List[t], {})
44+
fields[field_name] = (List[t], field_info)
4345
else:
44-
fields[field_name] = (field, {})
46+
fields[field_name] = (field, field_info)
4547
except TypeError:
46-
fields[field_name] = (field, {})
48+
fields[field_name] = (field, field_info)
4749
return create_model(
4850
model.__name__, __base__=model, __validators__=model.__validators__, **fields
4951
)
@@ -222,6 +224,7 @@ class MyDoc(BaseDoc):
222224
if base_doc_name in cached_models:
223225
return cached_models[base_doc_name]
224226
for field_name, field_schema in schema.get('properties', {}).items():
227+
225228
field_type = _get_field_type_from_schema(
226229
field_schema=field_schema,
227230
field_name=field_name,
@@ -230,7 +233,10 @@ class MyDoc(BaseDoc):
230233
is_tensor=False,
231234
num_recursions=0,
232235
)
233-
fields[field_name] = (field_type, field_schema.get('description'))
236+
fields[field_name] = (
237+
field_type,
238+
FieldInfo(default=field_schema.pop('default', None), **field_schema),
239+
)
234240

235241
model = create_model(base_doc_name, __base__=BaseDoc, **fields)
236242
cached_models[base_doc_name] = model
Collapse file

‎tests/units/util/test_create_dynamic_code_class.py‎

Copy file name to clipboardExpand all lines: tests/units/util/test_create_dynamic_code_class.py
+18Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from docarray import BaseDoc, DocList
1010
from docarray.typing import AnyTensor, ImageUrl
1111
from docarray.documents import TextDoc
12+
from pydantic import Field
1213

1314

1415
@pytest.mark.parametrize('transformation', ['proto', 'json'])
@@ -238,3 +239,20 @@ class ResultTestDoc(BaseDoc):
238239

239240
assert len(original_back) == 0
240241
assert len(custom_da) == 0
242+
243+
244+
def test_create_with_field_info():
245+
class CustomDoc(BaseDoc):
246+
a: str = Field(examples=['Example here'], another_extra='I am another extra')
247+
248+
CustomDocCopy = create_pure_python_type_model(CustomDoc)
249+
new_custom_doc_model = create_base_doc_from_schema(
250+
CustomDocCopy.schema(), 'CustomDoc'
251+
)
252+
assert new_custom_doc_model.schema().get('properties')['a']['examples'] == [
253+
'Example here'
254+
]
255+
assert (
256+
new_custom_doc_model.schema().get('properties')['a']['another_extra']
257+
== 'I am another extra'
258+
)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.