Skip to content

Commit 9273ab3

Browse files
committed
Add locals on callable exception
1 parent cef6d35 commit 9273ab3

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/dependency_injector/providers.pxd

+14-3
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,8 @@ cdef inline void __async_prepare_args_kwargs_callback(
477477
for value, (key, _) in zip(result, future_args_kwargs):
478478
args[key] = value
479479
except Exception as exception:
480+
exception.__traceback__.tb_frame.f_locals.clear()
481+
exception.__traceback__.tb_frame.f_locals.update(locals())
480482
future_result.set_exception(exception)
481483
else:
482484
future_result.set_result(args)
@@ -525,6 +527,8 @@ cdef inline void __async_inject_attributes_callback(object future_result, object
525527
for name, value in attributes.items():
526528
setattr(instance, name, value)
527529
except Exception as exception:
530+
exception.__traceback__.tb_frame.f_locals.clear()
531+
exception.__traceback__.tb_frame.f_locals.update(locals())
528532
future_result.set_exception(exception)
529533
else:
530534
future_result.set_result(instance)
@@ -575,15 +579,20 @@ cdef inline object __call(
575579
asyncio.ensure_future(args_kwargs_ready)
576580

577581
return future_result
578-
579-
return call(*args, **kwargs)
580-
582+
try:
583+
return call(*args, **kwargs)
584+
except Exception as exception:
585+
exception.__traceback__.tb_frame.f_locals.clear()
586+
exception.__traceback__.tb_frame.f_locals.update(locals())
587+
raise exception
581588

582589
cdef inline void __async_call_callback(object future_result, object call, object future):
583590
try:
584591
args, kwargs = future.result()
585592
result = call(*args, **kwargs)
586593
except Exception as exception:
594+
exception.__traceback__.tb_frame.f_locals.clear()
595+
exception.__traceback__.tb_frame.f_locals.update(locals())
587596
future_result.set_exception(exception)
588597
else:
589598
if __is_future_or_coroutine(result):
@@ -597,6 +606,8 @@ cdef inline object __async_result_callback(object future_result, object future):
597606
try:
598607
result = future.result()
599608
except Exception as exception:
609+
exception.__traceback__.tb_frame.f_locals.clear()
610+
exception.__traceback__.tb_frame.f_locals.update(locals())
600611
future_result.set_exception(exception)
601612
else:
602613
future_result.set_result(result)

0 commit comments

Comments
 (0)