11from contextlib import contextmanager
2+ from dataclasses import dataclass
23from typing import Any , ClassVar , TypeVar , overload , Generic
34from collections .abc import Callable , Awaitable , Generator , AsyncGenerator
45
56from tarina import ContextModel
7+ from typing_extensions import Self
68
9+ from .decorate import Check
710from .provider import TProviders , Provider , ProviderFactory
811from .exceptions import ExitState
912from .publisher import Publisher
1013from .subscriber import Propagator , Subscriber
1114from .typing import Resultable
1215
1316T = TypeVar ("T" )
17+ TC = TypeVar ("TC" )
1418T1 = TypeVar ("T1" )
1519_scopes : dict [str , Scope ]
1620scope_ctx : ContextModel [Scope ]
@@ -46,15 +50,31 @@ class Scope:
4650def configure (skip_req_missing : bool = False ) -> None : ...
4751
4852
49- class _Wrapper (Generic [T ]):
53+ class RegisterWrapper (Generic [T , TC ]):
54+ _scope : Scope
55+ _event : type | None
56+ _priority : int
57+ _providers : TProviders
58+ _propagators : list [Propagator ]
59+ _publisher : Publisher | None
60+ _pub_id : str
61+ _once : bool
62+ _skip_req_missing : bool
63+
64+ def if_ (self , predicate : Check | Callable [..., bool ] | Callable [..., Awaitable [bool ]] | bool , priority : int = 0 ) -> Self : ...
65+ def unless (self , predicate : Check | Callable [..., bool ] | Callable [..., Awaitable [bool ]] | bool , priority : int = 0 ) -> Self : ...
66+ def propagate (self , * propagators : Propagator ) -> Self : ...
67+ def __init__ (self , _scope : Scope , _event : type | None , _priority : int , _providers : TProviders , _propagators : list [Propagator ], _publisher : Publisher | None , _pub_id : str , _once : bool = False , _skip_req_missing : bool | None = None ): ...
68+ @overload
69+ def __call__ (self : RegisterWrapper [None , Callable ], func : Callable [..., T1 ]) -> Subscriber [T1 ]: ...
5070 @overload
51- def __call__ (self , func : Callable [..., AsyncGenerator [T | ExitState | None , None ]]) -> Subscriber [AsyncGenerator [T , None ]]: ...
71+ def __call__ (self : RegisterWrapper [ T , None ] , func : Callable [..., AsyncGenerator [T | ExitState | None , None ]]) -> Subscriber [AsyncGenerator [T , None ]]: ...
5272 @overload
53- def __call__ (self , func : Callable [..., Generator [T | ExitState | None , None , None ]]) -> Subscriber [Generator [T , None , None ]]: ...
73+ def __call__ (self : RegisterWrapper [ T , None ] , func : Callable [..., Generator [T | ExitState | None , None , None ]]) -> Subscriber [Generator [T , None , None ]]: ...
5474 @overload
55- def __call__ (self , func : Callable [..., Awaitable [T | ExitState | None ]]) -> Subscriber [Awaitable [T ]]: ...
75+ def __call__ (self : RegisterWrapper [ T , None ] , func : Callable [..., Awaitable [T | ExitState | None ]]) -> Subscriber [Awaitable [T ]]: ...
5676 @overload
57- def __call__ (self , func : Callable [..., T | ExitState | None ]) -> Subscriber [T ]: ...
77+ def __call__ (self : RegisterWrapper [ T , None ] , func : Callable [..., T | ExitState | None ]) -> Subscriber [T ]: ...
5878
5979
6080@overload
@@ -66,15 +86,15 @@ def on(event: type[Resultable[T1]], func: Callable[..., Awaitable[T1 | ExitState
6686@overload
6787def on (event : type [Resultable [T1 ]], func : Callable [..., T1 | ExitState | None ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T1 ]: ...
6888@overload
69- def on (event : type [Resultable [T1 ]], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> _Wrapper [T1 ]: ...
89+ def on (event : type [Resultable [T1 ]], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [T1 , None ]: ...
7090@overload
7191def on (event : type [Any ], func : Callable [..., T ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T ]: ... # type: ignore
7292@overload
73- def on (event : type [Any ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Callable [[ Callable [..., T ]], Subscriber [ T ] ]: ... # type: ignore
93+ def on (event : type [Any ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [ None , Callable ]: ... # type: ignore
7494@overload
7595def on_global (func : Callable [..., T ], * , priority : int = 16 , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T ]: ...
7696@overload
77- def on_global (* , priority : int = 16 , once : bool = False , skip_req_missing : bool | None = None ) -> Callable [[ Callable [..., T ]], Subscriber [ T ] ]: ...
97+ def on_global (* , priority : int = 16 , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [ None , Callable ]: ...
7898@overload
7999def use (pub : Publisher [Resultable [T1 ]], func : Callable [..., Generator [T1 | ExitState | None , None , None ]], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [Generator [T1 , None , None ]]: ...
80100@overload
@@ -84,12 +104,12 @@ def use(pub: Publisher[Resultable[T1]], func: Callable[..., Awaitable[T1 | ExitS
84104@overload
85105def use (pub : Publisher [Resultable [T1 ]], func : Callable [..., T1 | ExitState | None ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T1 ]: ...
86106@overload
87- def use (pub : Publisher [Resultable [T1 ]], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> _Wrapper [T1 ]: ...
107+ def use (pub : Publisher [Resultable [T1 ]], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [T1 , None ]: ...
88108@overload
89109def use (pub : Publisher [Any ], func : Callable [..., T ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T ]: ...
90110@overload
91- def use (pub : Publisher [Any ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Callable [[ Callable [..., T ]], Subscriber [ T ] ]: ...
111+ def use (pub : Publisher [Any ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [ None , Callable ]: ...
92112@overload
93113def use (pub : str , func : Callable [..., T ], * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Subscriber [T ]: ...
94114@overload
95- def use (pub : str , * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> Callable [[ Callable [..., T ]], Subscriber [ T ] ]: ...
115+ def use (pub : str , * , priority : int = 16 , providers : TProviders | None = None , once : bool = False , skip_req_missing : bool | None = None ) -> RegisterWrapper [ None , Callable ]: ...
0 commit comments