Skip to content

Commit f472f45

Browse files
authored
refactoring: ⚡️ recursion not necessary
1 parent 492cf29 commit f472f45

3 files changed

Lines changed: 14 additions & 24 deletions

File tree

cq/_core/middleware.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from collections.abc import AsyncGenerator, Awaitable, Callable, Iterator
1+
from collections.abc import AsyncGenerator, Awaitable, Callable
22
from dataclasses import dataclass, field
33
from typing import Self
44

@@ -12,10 +12,6 @@
1212
class MiddlewareGroup[**P, T]:
1313
__middlewares: list[Middleware[P, T]] = field(default_factory=list, init=False)
1414

15-
@property
16-
def __stack(self) -> Iterator[Middleware[P, T]]:
17-
return iter(self.__middlewares)
18-
1915
def add(self, *middlewares: Middleware[P, T]) -> Self:
2016
self.__middlewares.extend(reversed(middlewares))
2117
return self
@@ -27,7 +23,16 @@ async def invoke(
2723
*args: P.args,
2824
**kwargs: P.kwargs,
2925
) -> T:
30-
return await self.__apply_stack(handler, self.__stack)(*args, **kwargs)
26+
return await self.__apply_stack(handler)(*args, **kwargs)
27+
28+
def __apply_stack(
29+
self,
30+
handler: Callable[P, Awaitable[T]],
31+
) -> Callable[P, Awaitable[T]]:
32+
for middleware in self.__middlewares:
33+
handler = self.__apply_middleware(handler, middleware)
34+
35+
return handler
3136

3237
@classmethod
3338
def __apply_middleware(
@@ -62,15 +67,3 @@ async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
6267
return value
6368

6469
return wrapper
65-
66-
@classmethod
67-
def __apply_stack(
68-
cls,
69-
handler: Callable[P, Awaitable[T]],
70-
stack: Iterator[Middleware[P, T]],
71-
) -> Callable[P, Awaitable[T]]:
72-
for middleware in stack:
73-
new_handler = cls.__apply_middleware(handler, middleware)
74-
return cls.__apply_stack(new_handler, stack)
75-
76-
return handler

cq/_core/related_events.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ def add(self, *events: Event) -> None:
3434
async def related_events_recipe(event_bus: EventBus) -> AsyncIterator[RelatedEvents]:
3535
yield (instance := SimpleRelatedEvents())
3636

37-
if not instance:
38-
return
39-
4037
async with anyio.create_task_group() as task_group:
4138
for event in instance.items:
4239
task_group.start_soon(event_bus.dispatch, event)

uv.lock

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

0 commit comments

Comments
 (0)