Since step.invoke and step.invoke_by_id do literally the same thing but with a different function signature, they should share the same logic.
I also renamed FunctionOpts.id to FunctionOpts.fully_qualified_id to make its purpose more obvious. Added FunctionOpts.local_id since this was necessary for accessing the local ID within step.invoke
Since
step.invoke
andstep.invoke_by_id
do literally the same thing but with a different function signature, they should share the same logic.I also renamed
FunctionOpts.id
toFunctionOpts.fully_qualified_id
to make its purpose more obvious. AddedFunctionOpts.local_id
since this was necessary for accessing the local ID withinstep.invoke