Invoke
v0.3.0+

Calls another Inngest function, waits for its completion, and returns its output.

This method behaves identically to the invoke step method, but accepts an ID instead of the function object. This can be useful for a few reasons:

  • Trigger a function whose code is in a different codebase.
  • Avoid circular dependencies.
  • Avoid undesired transitive imports.

Arguments

  • Name
    step_id
    Type
    str
    Required
    required
    Description

    Step ID. Should be unique within the function.

  • Name
    app_id
    Type
    str
    Required
    optional
    Description

    App ID of the invoked function.

  • Name
    function_id
    Type
    str
    Required
    required
    Description

    ID of the invoked function.

  • Name
    data
    Type
    object
    Required
    optional
    Description

    JSON-serializable data that will be passed to the invoked function as event.data.

  • Name
    user
    Type
    object
    Required
    optional
    Description

    JSON-serializable data that will be passed to the invoked function as event.user.

Examples

Within the same app

@inngest_client.create_function(
    fn_id="fn-1",
    trigger=inngest.TriggerEvent(event="app/fn-1"),
)
async def fn_1(
    ctx: inngest.Context,
    step: inngest.Step,
) -> str:
    return "Hello!"

@inngest_client.create_function(
    fn_id="fn-2",
    trigger=inngest.TriggerEvent(event="app/fn-2"),
)
async def fn_2(
    ctx: inngest.Context,
    step: inngest.Step,
) -> None:
    output = step.invoke_by_id(
        "invoke",
        function_id="fn-1",
    )

    # Prints "Hello!"
    print(output)

Across apps

inngest_client_1 = inngest.Inngest(app_id="app-1")
inngest_client_2 = inngest.Inngest(app_id="app-2")

@inngest_client_1.create_function(
    fn_id="fn-1",
    trigger=inngest.TriggerEvent(event="app/fn-1"),
)
async def fn_1(
    ctx: inngest.Context,
    step: inngest.Step,
) -> str:
    return "Hello!"

@inngest_client_2.create_function(
    fn_id="fn-2",
    trigger=inngest.TriggerEvent(event="app/fn-2"),
)
async def fn_2(
    ctx: inngest.Context,
    step: inngest.Step,
) -> None:
    output = step.invoke_by_id(
        "invoke",
        app_id="app-1",
        function_id="fn-1",
    )

    # Prints "Hello!"
    print(output)