1111from __future__ import annotations
1212
1313import abc
14- from typing import Self
14+ from typing import Generic , TypeVar
1515
16+ __all__ = ("Provider" , "Override" )
1617
17- class Provider [T ](abc .ABC ):
18+ T = TypeVar ("T" )
19+ U = TypeVar ("U" )
20+
21+
22+ class Provider (abc .ABC , Generic [T ]):
1823 """
1924 Signposts something that can be injected.
2025 """
@@ -37,13 +42,13 @@ def _evaluate(self) -> T:
3742 """
3843 return self ()
3944
40- def override [ U : Provider | None ] (self , provider : U ) -> Override [U ]:
45+ def override (self , provider : Provider [ U ] | None ) -> Override [Provider [ U ] | None ]:
4146 """
4247 Override the current providers value with another provider.
4348 """
4449 return Override (self , provider )
4550
46- def override_existing [ U ] (self , value : U ) -> Override [Provider [T ]]:
51+ def override_existing (self , value : U ) -> Override [Provider [U ]]:
4752 """
4853 Override the current provider with an existing singleton.
4954 """
@@ -52,21 +57,21 @@ def override_existing[U](self, value: U) -> Override[Provider[T]]:
5257 return self .override (ExistingSingleton (value ))
5358
5459
55- class Override [ ProviderT : Provider ] :
60+ class Override ( Generic [ T ]) :
5661 """
5762 A context manager to implement overrides for providers.
5863 """
5964
6065 __slots__ = ("_base" , "_override" , "_before" )
6166
62- def __init__ (self , base : Provider , override : ProviderT | None = None ):
67+ def __init__ (self , base : Provider , override : Provider [ T ] | None = None ):
6368 # noinspection PyProtectedMember
6469 self ._before = base ._override
6570 self ._base = base
6671 self ._override = override
6772 base ._override = override
6873
69- def __enter__ (self ) -> Self :
74+ def __enter__ (self ) -> Override [ T ] :
7075 yield self
7176
7277 def disable (self ) -> None :
0 commit comments