From ce3baeafd50aa2bc2b817b510557138ee0ea0eb5 Mon Sep 17 00:00:00 2001 From: gortibaldik Date: Wed, 18 Dec 2024 12:10:36 +0100 Subject: [PATCH] :art: Raise exception instead of hiding it in finally --- src/dependency_injector/providers.pyx | 4 ++-- .../test_thread_local_singleton_py3.py | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 tests/unit/providers/singleton/test_thread_local_singleton_py3.py diff --git a/src/dependency_injector/providers.pyx b/src/dependency_injector/providers.pyx index 2db9fa2f..fc50ed81 100644 --- a/src/dependency_injector/providers.pyx +++ b/src/dependency_injector/providers.pyx @@ -3221,8 +3221,8 @@ cdef class ThreadLocalSingleton(BaseSingleton): return future_result self._storage.instance = instance - finally: - return instance + + return instance def _async_init_instance(self, future_result, result): try: diff --git a/tests/unit/providers/singleton/test_thread_local_singleton_py3.py b/tests/unit/providers/singleton/test_thread_local_singleton_py3.py new file mode 100644 index 00000000..fb0a3638 --- /dev/null +++ b/tests/unit/providers/singleton/test_thread_local_singleton_py3.py @@ -0,0 +1,20 @@ +import pytest + +from dependency_injector.containers import Container +from dependency_injector.providers import ThreadLocalSingleton + + +class FailingClass: + def __init__(self): + raise ValueError("FAILING CLASS") + + +class TestContainer(Container): + failing_class = ThreadLocalSingleton(FailingClass) + + +def test_on_failure_value_error_is_raised(): + container = TestContainer() + + with pytest.raises(ValueError, match="FAILING CLASS"): + container.failing_class()