|
@@ -15,6 +15,7 @@ class MessageInjector(Injector[Message]):
|
|
|
async def inject(self, message: Message, context: Context) -> Message:
|
|
|
return message
|
|
|
|
|
|
+
|
|
|
MessageInjector = MessageInjector()
|
|
|
|
|
|
|
|
@@ -22,6 +23,7 @@ class ContextInjector(Injector[Context]):
|
|
|
async def inject(self, message: Message, context: Context) -> Context:
|
|
|
return context
|
|
|
|
|
|
+
|
|
|
ContextInjector = ContextInjector()
|
|
|
|
|
|
Dep = TypeVar("Dep")
|
|
@@ -37,19 +39,19 @@ class Lazy(InjectorWithCleanup[Callable[[], Coroutine[None, None, Dep]]]):
|
|
|
class _Wrapper:
|
|
|
def __init__(self, deferred):
|
|
|
self._calculated = None
|
|
|
+
|
|
|
async def call():
|
|
|
if self._calculated is None:
|
|
|
self._calculated = await deferred.inject(message, context)
|
|
|
return self._calculated
|
|
|
+
|
|
|
self._call = call
|
|
|
|
|
|
def __call__(self):
|
|
|
return self._call()
|
|
|
-
|
|
|
+
|
|
|
return _Wrapper(self.deferred)
|
|
|
|
|
|
async def cleanup(self, dep: Callable[[], Coroutine[None, None, Dep]]):
|
|
|
if isinstance(self.deferred, InjectorWithCleanup) and dep._calculated is not None:
|
|
|
await self.deferred.cleanup(dep._calculated)
|
|
|
-
|
|
|
-
|