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