99from types import ModuleType as PythonModule
1010from typing import Any , Self , final , overload
1111
12- from injection import Module , mod
13- from injection .loaders import PythonModuleLoader
12+ from injection import Module
13+ from injection .loaders import ProfileLoader , PythonModuleLoader
1414
1515__all__ = ("AsyncEntrypoint" , "Entrypoint" , "autocall" , "entrypointmaker" )
1616
@@ -35,7 +35,7 @@ def entrypointmaker[*Ts, **P, T1, T2](
3535 wrapped : EntrypointSetupMethod [* Ts , P , T1 , T2 ],
3636 / ,
3737 * ,
38- module : Module = ...,
38+ profile_loader : ProfileLoader = ...,
3939) -> EntrypointDecorator [P , T1 , T2 ]: ...
4040
4141
@@ -44,7 +44,7 @@ def entrypointmaker[*Ts, **P, T1, T2](
4444 wrapped : None = ...,
4545 / ,
4646 * ,
47- module : Module = ...,
47+ profile_loader : ProfileLoader = ...,
4848) -> Callable [
4949 [EntrypointSetupMethod [* Ts , P , T1 , T2 ]],
5050 EntrypointDecorator [P , T1 , T2 ],
@@ -55,12 +55,12 @@ def entrypointmaker[*Ts, **P, T1, T2](
5555 wrapped : EntrypointSetupMethod [* Ts , P , T1 , T2 ] | None = None ,
5656 / ,
5757 * ,
58- module : Module | None = None ,
58+ profile_loader : ProfileLoader | None = None ,
5959) -> Any :
6060 def decorator (
6161 wp : EntrypointSetupMethod [* Ts , P , T1 , T2 ],
6262 ) -> EntrypointDecorator [P , T1 , T2 ]:
63- return Entrypoint ._make_decorator (wp , module )
63+ return Entrypoint ._make_decorator (wp , profile_loader )
6464
6565 return decorator (wrapped ) if wrapped else decorator
6666
@@ -69,11 +69,15 @@ def decorator(
6969@dataclass (repr = False , eq = False , frozen = True , slots = True )
7070class Entrypoint [** P , T ]:
7171 function : Callable [P , T ]
72- module : Module = field (default_factory = mod )
72+ profile_loader : ProfileLoader = field (default_factory = ProfileLoader )
7373
7474 def __call__ (self , / , * args : P .args , ** kwargs : P .kwargs ) -> T :
7575 return self .function (* args , ** kwargs )
7676
77+ @property
78+ def __module (self ) -> Module :
79+ return self .profile_loader .module
80+
7781 def async_to_sync [_T ](
7882 self : AsyncEntrypoint [P , _T ],
7983 run : Callable [[Coroutine [Any , Any , _T ]], _T ] = asyncio .run ,
@@ -95,7 +99,7 @@ def decorate(
9599 return self .__recreate (decorator (self .function ))
96100
97101 def inject (self ) -> Self :
98- return self .decorate (self .module .make_injected_function )
102+ return self .decorate (self .__module .make_injected_function )
99103
100104 def load_modules (
101105 self ,
@@ -105,13 +109,13 @@ def load_modules(
105109 ) -> Self :
106110 return self .setup (lambda : loader .load (* packages ))
107111
108- def load_profile (self , / , * names : str ) -> Self :
112+ def load_profile (self , name : str , / ) -> Self :
109113 @contextmanager
110- def decorator (module : Module ) -> Iterator [None ]:
111- with module . load_profile ( * names ):
114+ def decorator (loader : ProfileLoader ) -> Iterator [None ]:
115+ with loader . load ( name ):
112116 yield
113117
114- return self .decorate (decorator (self .module ))
118+ return self .decorate (decorator (self .profile_loader ))
115119
116120 def setup (self , function : Callable [..., Any ], / ) -> Self :
117121 @contextmanager
@@ -136,20 +140,21 @@ def __recreate[**_P, _T](
136140 function : Callable [_P , _T ],
137141 / ,
138142 ) -> Entrypoint [_P , _T ]:
139- return type (self )(function , self .module )
143+ return type (self )(function , self .profile_loader )
140144
141145 @classmethod
142146 def _make_decorator [* Ts , _T ](
143147 cls ,
144148 setup_method : EntrypointSetupMethod [* Ts , P , T , _T ],
145149 / ,
146- module : Module | None = None ,
150+ profile_loader : ProfileLoader | None = None ,
147151 ) -> EntrypointDecorator [P , T , _T ]:
148- module = module or mod ()
149- setup_method = module .make_injected_function (setup_method )
152+ profile_loader = profile_loader or ProfileLoader ()
153+ setup_method = profile_loader . module .make_injected_function (setup_method )
150154
151155 def decorator (function : Callable [P , T ]) -> Callable [P , _T ]:
152- self = cls (function , module )
156+ profile_loader .init ()
157+ self = cls (function , profile_loader )
153158 return MethodType (setup_method , self )().function
154159
155160 return decorator
0 commit comments