Run

Turn a normal function into a durable function. Any function passed to step.run will be executed in a durable way, including retries and memoization.

Arguments

  • Name
    step_id
    Type
    str
    Required
    required
    Description

    Step ID. Should be unique within the function.

  • Name
    handler
    Type
    Callable
    Required
    required
    Description

    A callable that has no arguments and returns a JSON serializable value.

  • Name
    *handler_args
    Type
    Required
    optional
    Description

    Positional arguments for the handler. This is type-safe since we infer the types from the handler using generics.

Examples

@inngest_client.create_function(
    fn_id="my_function",
    trigger=inngest.TriggerEvent(event="app/my_function"),
)
async def fn(
    ctx: inngest.Context,
    step: inngest.Step,
) -> None:
    # Pass a function to step.run
    await step.run("my_fn", my_fn)

    # Args are passed after the function
    await step.run("my_fn_with_args", my_fn_with_args, 1, "a")

    # Kwargs require functools.partial
    await step.run(
        "my_fn_with_args_and_kwargs",
        functools.partial(my_fn_with_args_and_kwargs, 1, b="a"),
    )

    # Defining functions like this gives you easy access to scoped variables
    def use_scoped_variable() -> None:
        print(ctx.event.data["user_id"])

    await step.run("use_scoped_variable", use_scoped_variable)

async def my_fn() -> None:
    pass

async def my_fn_with_args(a: int, b: str) -> None:
    pass

async def my_fn_with_args_and_kwargs(a: int, *, b: str) -> None:
    pass