Dependencies Injections

Dependencies in typed_route decorator.

In some cases you don't really need the return value of a dependency inside your path operation function. But you still need it to be executed/solved.

For those cases, you can add a list of dependencies to the typed_route decorator. It should be a list of Depends():

import flask
import flask_typed_routes as ftr


app = flask.Flask(__name__)


def verify_token():
    print("Verifying token")


def verify_key():
    print("Verifying key")


@app.get("/items/")
@ftr.typed_route(dependencies=[ftr.Depends(verify_token), ftr.Depends(verify_key)])
def read_items():
    return [{"item": "Foo"}, {"item": "Bar"}]

Dependencies using Depends

You can use Depends field to declare dependencies in your path operation function when you need to use the return value of a dependency within that function.

The Depends field takes a callable that returns the dependency value.

Tip

The Depends can take use_cache parameter to cache the dependency value.

import typing as t

import flask
import flask_typed_routes as ftr

app = flask.Flask(__name__)
app_ftr = ftr.FlaskTypedRoutes(app=app)


def verify_token():
    return {"token": "value"}


def verify_key():
    return {"key": "value"}



@app.get("/items/")
@ftr.typed_route()
def read_items(
    token: t.Annotated[dict, ftr.Depends(verify_token)],
    key: t.Annotated[dict, ftr.Depends(verify_key)],
):
    result = {"token": token, "key": key}
    return flask.jsonify(result)

Caching Dependencies

By default, use_cache is set to False so that the dependency is called again (if declared more than once) in the same request.

Set use_cache to False so that after a dependency is called for the first time in a request, if the dependency is declared again for the rest of the request (for example, if multiple dependencies need the dependency), the value will be reused for the rest of the request.

Example:

import typing as t

import flask
import flask_typed_routes as ftr

app = flask.Flask(__name__)
app_ftr = ftr.FlaskTypedRoutes(app=app)


def verify_token():
    return {"token": "value"}

def verify_key():
    return {"token": "value"}


@app.get("/items/")
@ftr.typed_route(dependencies=[ftr.Depends(verify_key, use_cache=True)])
def read_items(token: t.Annotated[dict, ftr.Depends(verify_token, use_cache=True)]):
    return flask.jsonify({"token": token})