Using the Injector Module multiple times in one process causes a crash, this prevents some system test configurations.
To be able to create and use multiple containers with the module.
=================================================== test session starts ===================================================
platform linux -- Python 3.11.6, pytest-7.4.2, pluggy-1.3.0 -- /VENV/bin/python
cachedir: .pytest_cache
rootdir: /ROOT
configfile: pyproject.toml
plugins: mypy-0.10.3, pylint-0.21.0, cov-4.1.0, pydocstyle-2.3.2, typeguard-4.1.5, anyio-3.7.1, asyncio-0.21.1
asyncio: mode=Mode.STRICT
collected 1 item
tests/bug.py::test_bug FAILED [100%]
======================================================== FAILURES =========================================================
________________________________________________________ test_bug _________________________________________________________
def test_bug() -> None:
r = banshee.Registry()
c = injector.Injector(banshee.extra.injector.BansheeModule(r))
c.get(banshee.Bus)
> c = injector.Injector(banshee.extra.injector.BansheeModule(r))
tests/bug.py:10:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/VENV/lib/python3.11/site-packages/injector/__init__.py:923: in __init__
self.binder.install(module)
/VENV/lib/python3.11/site-packages/injector/__init__.py:564: in install
instance(self)
/VENV/lib/python3.11/site-packages/injector/__init__.py:869: in __call__
self.configure(binder)
/VENV/lib/python3.11/site-packages/banshee/extra/injector.py:95: in configure
binder.bind(injector.inject(banshee.IdentityMiddleware))
/VENV/lib/python3.11/site-packages/injector/__init__.py:1410: in inject
inject(cast(Any, constructor_or_class).__init__)
/VENV/lib/python3.11/site-packages/injector/__init__.py:1415: in inject
read_and_store_bindings(function, bindings)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
f = <slot wrapper '__init__' of 'object' objects>, bindings = {}
@private
def read_and_store_bindings(f: Callable, bindings: Dict[str, type]) -> None:
function_bindings = getattr(f, '__bindings__', None) or {}
if function_bindings == 'deferred':
function_bindings = {}
merged_bindings = dict(function_bindings, **bindings)
if hasattr(f, '__func__'):
f = cast(Any, f).__func__
> cast(Any, f).__bindings__ = merged_bindings
E AttributeError: 'wrapper_descriptor' object has no attribute '__bindings__'
/VENV/lib/python3.11/site-packages/injector/__init__.py:1477: AttributeError
================================================= short test summary info =================================================
FAILED tests/bug.py::test_bug - AttributeError: 'wrapper_descriptor' object has no attribute '__bindings__'
==================================================== 1 failed in 0.06s ====================================================
The calls seem to be superfluous and can be removed without changing functionality.