|
20 | 20 |
|
21 | 21 | import importlib, inspect, re, logging |
22 | 22 |
|
| 23 | +HAS_PYDANTIC = False |
| 24 | +try: |
| 25 | + from pydantic import BaseModel as PydanticBaseModel |
| 26 | + HAS_PYDANTIC = True |
| 27 | +except ImportError: |
| 28 | + pass |
| 29 | + |
23 | 30 | class Reference(object): |
24 | 31 | def __init__(self, id: str, method: Optional[str] = None) -> None: |
25 | 32 | self.id = id |
@@ -102,6 +109,22 @@ def __init__(self, logger: Optional[logging.Logger] = None) -> None: |
102 | 109 | self.stack: list[str] = [] |
103 | 110 |
|
104 | 111 | 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 | + |
105 | 128 | if isinstance(parameter, (tuple)): |
106 | 129 | parameter = list(parameter) |
107 | 130 | for key in get_keys(parameter): |
|
0 commit comments