From 0887109cf81fad76fd226ac3400c716b121f3638 Mon Sep 17 00:00:00 2001 From: remimd Date: Thu, 15 Aug 2024 12:05:30 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Raise=20an=20exception=20?= =?UTF-8?q?in=20`InjectedFunction.on=5Fsetup`=20if=20already=20up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- injection/_core/module.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/injection/_core/module.py b/injection/_core/module.py index ad629d0..e462b07 100644 --- a/injection/_core/module.py +++ b/injection/_core/module.py @@ -764,7 +764,6 @@ class Arguments(NamedTuple): class InjectedFunction[**P, T](EventListener): __slots__ = ( "__dict__", - "__signature__", "__wrapped__", "__dependencies", "__owner", @@ -778,8 +777,8 @@ class InjectedFunction[**P, T](EventListener): __setup_queue: Queue[Callable[..., Any]] | None def __init__(self, wrapped: Callable[P, T], /) -> None: - self.__update_vars_from(wrapped) update_wrapper(self, wrapped, updated=()) + self.__update_vars_from(wrapped) self.__dependencies = Dependencies.empty() self.__owner = None self.__setup_queue = Queue() @@ -863,9 +862,10 @@ def on_setup[**_P, _T](self, wrapped: Callable[_P, _T] | None = None, /): # typ def decorator(wp): # type: ignore[no-untyped-def] queue = self.__setup_queue - if queue is not None: - queue.put_nowait(wp) + if queue is None: + raise RuntimeError(f"`{self}` is already up.") + queue.put_nowait(wp) return wp return decorator(wrapped) if wrapped else decorator @@ -906,9 +906,6 @@ def __setup(self) -> None: queue.join() self.__close_setup_queue() - def __set_signature(self) -> None: - self.__signature__ = inspect.signature(self.wrapped, eval_str=True) - def __update_vars_from(self, obj: Any) -> None: try: variables = vars(obj) @@ -918,7 +915,7 @@ def __update_vars_from(self, obj: Any) -> None: self.__update_vars(variables) def __update_vars(self, variables: Mapping[str, Any]) -> None: - restricted_vars = frozenset( + restricted_vars = frozenset(("__signature__", "__wrapped__")) | frozenset( var for var in dir(self) if not self.__is_dunder(var) ) vars(self).update(