Change signal routing for increased consistency
This commit is contained in:
parent
5e12edbc38
commit
ac51d29085
@ -123,12 +123,20 @@ class SignalRouter(BaseRouter):
|
|||||||
if context:
|
if context:
|
||||||
params.update(context)
|
params.update(context)
|
||||||
|
|
||||||
|
signals = group.routes
|
||||||
if not reverse:
|
if not reverse:
|
||||||
handlers = handlers[::-1]
|
signals = signals[::-1]
|
||||||
try:
|
try:
|
||||||
for handler in handlers:
|
for signal in signals:
|
||||||
if condition is None or condition == handler.__requirements__:
|
trigger = params.pop("__trigger__", None)
|
||||||
maybe_coroutine = handler(**params)
|
kwargs = params
|
||||||
|
if signal.ctx.trigger:
|
||||||
|
kwargs[signal.ctx.trigger] = trigger
|
||||||
|
if (
|
||||||
|
condition is None
|
||||||
|
or condition == signal.handler.__requirements__
|
||||||
|
) and (signal.ctx.trigger or event == signal.ctx.definition):
|
||||||
|
maybe_coroutine = signal.handler(**params)
|
||||||
if isawaitable(maybe_coroutine):
|
if isawaitable(maybe_coroutine):
|
||||||
retval = await maybe_coroutine
|
retval = await maybe_coroutine
|
||||||
if retval:
|
if retval:
|
||||||
@ -172,22 +180,33 @@ class SignalRouter(BaseRouter):
|
|||||||
event: str,
|
event: str,
|
||||||
condition: Optional[Dict[str, Any]] = None,
|
condition: Optional[Dict[str, Any]] = None,
|
||||||
) -> Signal:
|
) -> Signal:
|
||||||
|
event_definition = event
|
||||||
parts = self._build_event_parts(event)
|
parts = self._build_event_parts(event)
|
||||||
if parts[2].startswith("<"):
|
if parts[2].startswith("<"):
|
||||||
name = ".".join([*parts[:-1], "*"])
|
name = ".".join([*parts[:-1], "*"])
|
||||||
|
trigger = parts[2][1:-1]
|
||||||
else:
|
else:
|
||||||
name = event
|
name = event
|
||||||
|
trigger = None
|
||||||
|
|
||||||
|
if not trigger:
|
||||||
|
event = ".".join([*parts[:2], "<__trigger__>"])
|
||||||
|
|
||||||
handler.__requirements__ = condition # type: ignore
|
handler.__requirements__ = condition # type: ignore
|
||||||
|
handler.__trigger__ = trigger # type: ignore
|
||||||
|
|
||||||
return super().add(
|
signal = super().add(
|
||||||
event,
|
event,
|
||||||
handler,
|
handler,
|
||||||
requirements=condition,
|
|
||||||
name=name,
|
name=name,
|
||||||
append=True,
|
append=True,
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
|
signal.ctx.trigger = trigger
|
||||||
|
signal.ctx.definition = event_definition
|
||||||
|
|
||||||
|
return signal
|
||||||
|
|
||||||
def finalize(self, do_compile: bool = True, do_optimize: bool = False):
|
def finalize(self, do_compile: bool = True, do_optimize: bool = False):
|
||||||
self.add(_blank, "sanic.__signal__.__init__")
|
self.add(_blank, "sanic.__signal__.__init__")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user