Skip to content
Prev Previous commit
Add support of corouting functions
  • Loading branch information
rmk135 committed Sep 20, 2020
commit 9ffe2a31c61eb64cf27b9a4097cf9302ca3dcd84
25 changes: 18 additions & 7 deletions src/dependency_injector/wiring.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,26 @@ def _fetch_modules(package):


def _patch_with_injections(fn, injections):
@functools.wraps(fn)
def _patched(*args, **kwargs):
to_inject = {}
for injection, provider in injections.items():
to_inject[injection] = provider()
if inspect.iscoroutinefunction(fn):
@functools.wraps(fn)
async def _patched(*args, **kwargs):
to_inject = {}
for injection, provider in injections.items():
to_inject[injection] = provider()

to_inject.update(kwargs)
to_inject.update(kwargs)

return fn(*args, **to_inject)
return await fn(*args, **to_inject)
else:
@functools.wraps(fn)
def _patched(*args, **kwargs):
to_inject = {}
for injection, provider in injections.items():
to_inject[injection] = provider()

to_inject.update(kwargs)

return fn(*args, **to_inject)

_patched.__wired__ = True
_patched.__original__ = fn
Expand Down