diff --git a/sanic/signals.py b/sanic/signals.py index 3b662684c0..5710f1edc7 100644 --- a/sanic/signals.py +++ b/sanic/signals.py @@ -154,9 +154,7 @@ async def _dispatch( try: for signal in signals: params.pop("__trigger__", None) - requirements = getattr( - signal.handler, "__requirements__", None - ) + requirements = signal.extra.requirements if ( (condition is None and signal.ctx.exclusive is False) or (condition is None and not requirements) @@ -219,8 +217,13 @@ def add( # type: ignore if not trigger: event = ".".join([*parts[:2], "<__trigger__>"]) - handler.__requirements__ = condition # type: ignore - handler.__trigger__ = trigger # type: ignore + try: + # Attaching __requirements__ and __trigger__ to the handler + # is deprecated and will be removed in v23.6. + handler.__requirements__ = condition # type: ignore + handler.__trigger__ = trigger # type: ignore + except AttributeError: + pass signal = super().add( event, @@ -232,6 +235,7 @@ def add( # type: ignore signal.ctx.exclusive = exclusive signal.ctx.trigger = trigger signal.ctx.definition = event_definition + signal.extra.requirements = condition return cast(Signal, signal)