[ Web Proxy ]
URL:
Viewing: https://python-injection.remimd.dev/integrations/fastapi/ [Back]  [Original]

FastAPI - python-injection
Skip to content
python-injection
FastAPI
100nm/python-injection

FastAPI

Inject a dependency

Here's how to inject an instance into a FastAPI endpoint.

from injection.ext.fastapi import Inject


@app.get("/")
async def endpoint(dependency: Inject[Dependency]): ...

Useful scopes

Two fairly common scopes in FastAPI:

  • Application lifespan scope: associate with application lifespan.
  • Request scope: associate with http request lifetime.

For a better understanding of the scopes, here's the associated documentation.

Here's how to configure FastAPI:

from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from dataclasses import dataclass
from enum import StrEnum, auto

from fastapi import Depends, FastAPI, Request
from injection import MappedScope, adefine_scope


class InjectionScope(StrEnum):
    LIFESPAN = auto()
    REQUEST = auto()


@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncIterator[None]:
    async with adefine_scope(InjectionScope.LIFESPAN, kind="shared"):
        yield


@dataclass
class FastAPIRequestBindings:
    # You can use any bindings; Request is just an example.
    request: Request

    scope = MappedScope(InjectionScope.REQUEST)


async def request_scope(request: Request) -> AsyncIterator[None]:
    async with FastAPIRequestBindings(request).scope.adefine():
        yield


app = FastAPI(
    dependencies=[Depends(request_scope)],
    lifespan=lifespan,
)

Back to top

Web Proxy Viewer  |  New URL  |  Original Page