Skip to content

Commit 404e70b

Browse files
committed
fix: allow multiple uses of injector module in a single python process
1 parent 367955f commit 404e70b

File tree

4 files changed

+36
-10
lines changed

4 files changed

+36
-10
lines changed

.dictionary

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ cls
33
composable
44
configurationerror
55
iterable
6+
lineno
67
mypy
78
pragma
89
py

src/banshee/extra/injector.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,6 @@ def __init__(self, registry: banshee.Registry | None = None) -> None:
9292
self.registry = registry
9393

9494
def configure(self, binder: injector.Binder) -> None:
95-
binder.bind(injector.inject(banshee.IdentityMiddleware))
96-
binder.bind(injector.inject(banshee.CausationMiddleware))
97-
binder.bind(injector.inject(banshee.HandleAfterMiddleware))
98-
binder.bind(injector.inject(banshee.DispatchMiddleware))
99-
10095
if self.registry:
10196
# https://github.com/python/mypy/issues/4717
10297
binder.bind(
@@ -109,15 +104,11 @@ def configure(self, binder: injector.Binder) -> None:
109104
@injector.singleton
110105
@injector.provider
111106
def _provide_factory(self, container: injector.Injector) -> banshee.HandlerFactory:
112-
# pylint: disable=no-self-use
113-
114107
return InjectorHandlerFactory(container)
115108

116109
@injector.singleton
117110
@injector.provider
118111
def _provide_message_bus(self, container: injector.Injector) -> banshee.Bus:
119-
# pylint: disable=no-self-use
120-
121112
return (
122113
banshee.Builder()
123114
.with_middleware(container.get(banshee.IdentityMiddleware))

src/banshee/message.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def message_for(
145145
:returns: a message for the request and context objects
146146
"""
147147
if not isinstance(request, Message):
148-
return Message(request, contexts=tuple(contexts) if contexts else tuple())
148+
return Message(request, contexts=tuple(contexts) if contexts else ())
149149

150150
if not contexts:
151151
return request
@@ -213,6 +213,7 @@ def __init__(self, iterator: collections.abc.Iterator[Middleware]) -> None:
213213
self.iterator = iterator
214214

215215
async def _final(self, message: Message[T], handle: HandleMessage) -> Message[T]:
216+
# pylint: disable=unused-argument
216217
return message
217218

218219
async def __call__(self, message: Message[T]) -> Message[T]:
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""
2+
Tests for :class:`banshee.extra.injector.BansheeModule`
3+
"""
4+
5+
import injector
6+
7+
import banshee
8+
import banshee.extra.injector
9+
10+
11+
def test_it_should_build_bus_instance() -> None:
12+
"""
13+
it should build bus instance.
14+
"""
15+
registry = banshee.Registry()
16+
container = injector.Injector(banshee.extra.injector.BansheeModule(registry))
17+
bus = container.get(banshee.Bus) # type: ignore
18+
19+
assert isinstance(bus, banshee.Bus)
20+
21+
22+
def test_it_should_allow_multiple_uses() -> None:
23+
"""
24+
it should allow multiple uses.
25+
"""
26+
registry = banshee.Registry()
27+
container = injector.Injector(banshee.extra.injector.BansheeModule(registry))
28+
bus1 = container.get(banshee.Bus) # type: ignore
29+
30+
container = injector.Injector(banshee.extra.injector.BansheeModule(registry))
31+
bus2 = container.get(banshee.Bus) # type: ignore
32+
33+
assert bus1 is not bus2

0 commit comments

Comments
 (0)