From 5db4ea966248c938e1c447e127f14fbe396d362b Mon Sep 17 00:00:00 2001 From: huangsong Date: Wed, 22 Dec 2021 10:54:15 +0800 Subject: [PATCH] SignalEmitter extends dict to save the signals --- ormar/signals/signal.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/ormar/signals/signal.py b/ormar/signals/signal.py index 7568d5a..32d73cd 100644 --- a/ormar/signals/signal.py +++ b/ormar/signals/signal.py @@ -1,6 +1,6 @@ import asyncio import inspect -from typing import Any, Callable, Dict, TYPE_CHECKING, Tuple, Type, Union +from typing import Any, Callable, Dict, Tuple, Type, TYPE_CHECKING, Union from ormar.exceptions import SignalDefinitionError @@ -95,21 +95,15 @@ class Signal: await asyncio.gather(*receivers) -class SignalEmitter: +class SignalEmitter(dict): """ Emitter that registers the signals in internal dictionary. If signal with given name does not exist it's auto added on access. """ - - if TYPE_CHECKING: # pragma: no cover - signals: Dict[str, Signal] - - def __init__(self) -> None: - object.__setattr__(self, "signals", dict()) - def __getattr__(self, item: str) -> Signal: - return self.signals.setdefault(item, Signal()) + return self.setdefault(item, Signal()) - def __setattr__(self, key: str, value: Any) -> None: - signals = object.__getattribute__(self, "signals") - signals[key] = value + def __setattr__(self, key: str, value: Signal) -> None: + if not isinstance(value, Signal): + raise ValueError(f"{value} is not valid signal") + self[key] = value