Skip to content

Commit 492cf29

Browse files
authored
feat: ✨ Add threadsafe parameter new_command_bus function
1 parent e6a586d commit 492cf29

3 files changed

Lines changed: 39 additions & 36 deletions

File tree

cq/_core/message.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any
1+
from typing import Any, Final
22

33
import injection
44

@@ -22,23 +22,24 @@
2222
AnyCommandBus = CommandBus[Any]
2323

2424

25-
command_handler: HandlerDecorator[Command, Any] = HandlerDecorator(
25+
command_handler: Final[HandlerDecorator[Command, Any]] = HandlerDecorator(
2626
SingleHandlerManager(),
2727
)
28-
event_handler: HandlerDecorator[Event, None] = HandlerDecorator(
28+
event_handler: Final[HandlerDecorator[Event, None]] = HandlerDecorator(
2929
MultipleHandlerManager(),
3030
)
31-
query_handler: HandlerDecorator[Query, Any] = HandlerDecorator(
31+
query_handler: Final[HandlerDecorator[Query, Any]] = HandlerDecorator(
3232
SingleHandlerManager(),
3333
)
3434

3535

3636
@injection.injectable(inject=False, mode="fallback")
37-
def new_command_bus() -> CommandBus: # type: ignore[type-arg]
37+
def new_command_bus(*, threadsafe: bool | None = None) -> CommandBus: # type: ignore[type-arg]
3838
bus = SimpleBus(command_handler.manager)
3939
transaction_scope_middleware = InjectionScopeMiddleware(
4040
CQScope.TRANSACTION,
4141
exist_ok=True,
42+
threadsafe=threadsafe,
4243
)
4344
bus.add_middlewares(transaction_scope_middleware)
4445
return bus

cq/middlewares/scope.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ class InjectionScopeMiddleware:
2121

2222
async def __call__(self, *args: Any, **kwargs: Any) -> MiddlewareResult[Any]:
2323
async with AsyncExitStack() as stack:
24-
context_manager = adefine_scope(self.scope_name, threadsafe=self.threadsafe)
24+
cm = adefine_scope(self.scope_name, threadsafe=self.threadsafe)
2525
try:
26-
await stack.enter_async_context(context_manager)
26+
await stack.enter_async_context(cm)
27+
2728
except ScopeAlreadyDefinedError:
2829
if not self.exist_ok:
2930
raise
30-
del context_manager
31+
32+
del cm
3133
yield

uv.lock

Lines changed: 28 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)