|
| 1 | +import sys |
| 2 | +import traceback |
1 | 3 | from abc import ABC, abstractmethod
|
2 | 4 | from collections.abc import Mapping, Sequence
|
3 | 5 | from dataclasses import dataclass
|
@@ -305,14 +307,26 @@ def from_model(fn: Callable[["ResolutionContext", Any], Any]):
|
305 | 307 | """Resolve this field by invoking the function which will receive the entire parent ResolvableModel."""
|
306 | 308 | return Resolver(ParentFn(fn))
|
307 | 309 |
|
308 |
| - def execute(self, context: "ResolutionContext", model: ResolvableModel, field_name: str) -> Any: |
309 |
| - if isinstance(self.fn, ParentFn): |
310 |
| - return self.fn.callable(context, model) |
311 |
| - elif isinstance(self.fn, AttrWithContextFn): |
312 |
| - attr = getattr(model, field_name) |
313 |
| - return self.fn.callable(context.at_path(field_name), attr) |
314 |
| - else: |
315 |
| - raise ValueError(f"Unsupported DSLFieldResolver type: {self.fn}") |
| 310 | + def execute( |
| 311 | + self, |
| 312 | + context: "ResolutionContext", |
| 313 | + model: ResolvableModel, |
| 314 | + field_name: str, |
| 315 | + ) -> Any: |
| 316 | + try: |
| 317 | + if isinstance(self.fn, ParentFn): |
| 318 | + return self.fn.callable(context, model) |
| 319 | + elif isinstance(self.fn, AttrWithContextFn): |
| 320 | + attr = getattr(model, field_name) |
| 321 | + return self.fn.callable(context.at_path(field_name), attr) |
| 322 | + except Exception: |
| 323 | + raise context.build_resolve_fn_exc( |
| 324 | + traceback.format_exception(*sys.exc_info()), |
| 325 | + field_name=field_name, |
| 326 | + model=model, |
| 327 | + ) |
| 328 | + |
| 329 | + raise ValueError(f"Unsupported DSLFieldResolver type: {self.fn}") |
316 | 330 |
|
317 | 331 |
|
318 | 332 | ResolvedType: TypeAlias = Union[type[ResolvedKwargs], type[ResolvedFrom]]
|
|
0 commit comments