mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-07-05 04:43:30 +03:00
Fix double printing of exception when initializing resource causes error
This commit is contained in:
parent
b2ea773c71
commit
f470400bbe
|
@ -7,6 +7,10 @@ that were made in every particular version.
|
||||||
From version 0.7.6 *Dependency Injector* framework strictly
|
From version 0.7.6 *Dependency Injector* framework strictly
|
||||||
follows `Semantic versioning`_
|
follows `Semantic versioning`_
|
||||||
|
|
||||||
|
Development version
|
||||||
|
-------------------
|
||||||
|
- Fix double printing of exception when initializing resource causes error.
|
||||||
|
|
||||||
4.23.1
|
4.23.1
|
||||||
------
|
------
|
||||||
- Hotfix a bug with importing FastAPI ``Request``.
|
- Hotfix a bug with importing FastAPI ``Request``.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3486,7 +3486,6 @@ cdef class Resource(Provider):
|
||||||
resource = initializer.result()
|
resource = initializer.result()
|
||||||
except Exception:
|
except Exception:
|
||||||
self.__initialized = False
|
self.__initialized = False
|
||||||
raise
|
|
||||||
else:
|
else:
|
||||||
self.__resource = resource
|
self.__resource = resource
|
||||||
self.__shutdowner = shutdowner
|
self.__shutdowner = shutdowner
|
||||||
|
|
|
@ -449,14 +449,45 @@ class AsyncResourceTest(AsyncTestCase):
|
||||||
self.assertTrue(provider.initialized)
|
self.assertTrue(provider.initialized)
|
||||||
self.assertTrue(provider.is_async_mode_enabled())
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
||||||
# Disable default exception handling to prevent output
|
with self.assertRaises(RuntimeError):
|
||||||
asyncio.get_event_loop().set_exception_handler(lambda loop, context: ...)
|
self._run(future)
|
||||||
|
|
||||||
|
self.assertFalse(provider.initialized)
|
||||||
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
||||||
|
def test_init_async_gen_with_error(self):
|
||||||
|
async def _init():
|
||||||
|
raise RuntimeError()
|
||||||
|
yield
|
||||||
|
|
||||||
|
provider = providers.Resource(_init)
|
||||||
|
|
||||||
|
future = provider()
|
||||||
|
self.assertTrue(provider.initialized)
|
||||||
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
||||||
with self.assertRaises(RuntimeError):
|
with self.assertRaises(RuntimeError):
|
||||||
self._run(future)
|
self._run(future)
|
||||||
|
|
||||||
# Restore default exception handling
|
self.assertFalse(provider.initialized)
|
||||||
asyncio.get_event_loop().set_exception_handler(None)
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
||||||
|
def test_init_async_subclass_with_error(self):
|
||||||
|
class _Resource(resources.AsyncResource):
|
||||||
|
async def init(self):
|
||||||
|
raise RuntimeError()
|
||||||
|
|
||||||
|
async def shutdown(self, resource):
|
||||||
|
pass
|
||||||
|
|
||||||
|
provider = providers.Resource(_Resource)
|
||||||
|
|
||||||
|
future = provider()
|
||||||
|
self.assertTrue(provider.initialized)
|
||||||
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
||||||
|
with self.assertRaises(RuntimeError):
|
||||||
|
self._run(future)
|
||||||
|
|
||||||
self.assertFalse(provider.initialized)
|
self.assertFalse(provider.initialized)
|
||||||
self.assertTrue(provider.is_async_mode_enabled())
|
self.assertTrue(provider.is_async_mode_enabled())
|
||||||
|
|
Loading…
Reference in New Issue
Block a user