Skip to content

Depends

Dependency

Bases: Generic[T]

Represents a dependency wrapping a callable that returns a value of type T.

Attributes:

Name Type Description
callable Callable[..., T]

The callable that provides the dependency.

__init__(callable)

Initializes the dependency with the provided callable.

Parameters:

Name Type Description Default
callable Callable[..., T]

The callable to wrap as a dependency.

required

Provider

Manages dependency overrides for dependency injection.

Attributes:

Name Type Description
dependency_overrides dict

A mapping of original dependencies to their overrides.

__init__()

Initializes an empty dictionary for dependency overrides.

override(dependency, override)

Overrides a given dependency with a new callable.

Parameters:

Name Type Description Default
dependency Callable

The original dependency to override.

required
override Callable

The new callable to use instead of the original.

required

Depends(callable)

Creates a Dependency instance wrapping the given callable.

Parameters:

Name Type Description Default
callable Callable

The callable to wrap as a dependency.

required

Returns:

Name Type Description
Dependency Dependency

An instance of Dependency wrapping the callable.

Example

provider = Provider()

def get_session() -> Session: ...

@inject(provider) def add_user(user: dict, session: Session = Depends(get_session)): ...

@inject(provider) def mypy_comp_add_user(user: dict, session: Dependency[Session] = Depends(get_session)): ...

inject(provider)

Decorator to inject dependencies into a function based on a provider.

This decorator supports both synchronous and asynchronous functions. It resolves dependencies using the provided provider, manages the context with an exit stack, and calls the original function with the injected arguments.

Parameters:

Name Type Description Default
provider Provider

An instance responsible for providing dependencies.

required

Returns:

Name Type Description
Callable Callable

A decorator that wraps the target function, injecting dependencies.

Examples:

provider = Provider()

def get_session() -> Session:
    ...

@inject(provider)
def add_user(user: dict, session: Session = Depends(get_session)):
    ...