Source code for fundi.from_
import typing
from contextlib import AbstractAsyncContextManager, AbstractContextManager
from fundi.scan import scan
from fundi.types import CallableInfo, TypeResolver
[docs]
def from_(
dependency: type | typing.Callable[..., typing.Any],
caching: bool = True,
async_: bool | None = None,
generator: bool | None = None,
context: bool | None = None,
use_return_annotation: bool = True,
) -> TypeResolver | CallableInfo[typing.Any]:
"""
Use callable or type as dependency for parameter of function
if dependency parameter is callable the ``fundi.scan.scan`` is used
if dependency parameter is type the ``fundi.types.TypeResolver`` is returned (unless that type is a subclass of AbstractContextManager or AbstractAsyncContextManager)
:param dependency: function dependency
:param caching: Whether to use cached result of this callable or not
:param async_: Override "async\_" attriubute value
:param generator: Override "generator" attriubute value
:param context: Override "context" attriubute value
:param use_return_annotation: Whether to use dependency's return
annotation to define it's type
:return: callable information
"""
if isinstance(dependency, type) and not issubclass(
dependency, (AbstractContextManager, AbstractAsyncContextManager)
):
return TypeResolver(dependency)
return scan(
dependency,
caching=caching,
async_=async_,
generator=generator,
context=context,
use_return_annotation=use_return_annotation,
)