Skip to content

Commit 2beedcd

Browse files
author
Thomas Rabaix
committed
feat(pydantic): add support for pydantic model
1 parent b7cdb26 commit 2beedcd

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

ioc/component.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020

2121
import importlib, inspect, re, logging
2222

23+
HAS_PYDANTIC = False
24+
try:
25+
from pydantic import BaseModel as PydanticBaseModel
26+
HAS_PYDANTIC = True
27+
except ImportError:
28+
pass
29+
2330
class Reference(object):
2431
def __init__(self, id: str, method: Optional[str] = None) -> None:
2532
self.id = id
@@ -102,6 +109,22 @@ def __init__(self, logger: Optional[logging.Logger] = None) -> None:
102109
self.stack: list[str] = []
103110

104111
def _resolve(self, parameter: Any, parameter_holder: ParameterHolder) -> Any:
112+
if HAS_PYDANTIC and isinstance(parameter, PydanticBaseModel):
113+
# If the parameter is a Pydantic model, resolve its fields
114+
def walk_and_modify(model):
115+
for field in model.__fields__:
116+
value = getattr(model, field)
117+
if isinstance(value, PydanticBaseModel):
118+
parameter = walk_and_modify(value) # Recursive call for nested models
119+
else:
120+
parameter = self.resolve(value, parameter_holder)
121+
122+
setattr(model, field, parameter)
123+
124+
return model
125+
126+
return walk_and_modify(parameter)
127+
105128
if isinstance(parameter, (tuple)):
106129
parameter = list(parameter)
107130
for key in get_keys(parameter):

0 commit comments

Comments
 (0)