Skip to main content

Operation Inputs​

For both Compute and Sink operations, inputs serve as the connection points through which data flows in from preceding operations.

Key Characteristics of Inputs​

  • Named Inputs:
    Each input is identified by a unique name, ensuring clarity and preventing ambiguity in data connections.

  • Multiplicity Constraints:
    Inputs have constraints defining how many data streams they can accept:

    • Minimum Multiplicity (>0):
      Specifies the least number of data streams required for the operation to function.
    • Maximum Multiplicity:
      Sets the upper limit on the number of data streams the input can handle.
      • A value of 1 restricts the input to a single source.
      • Higher values or infinity (∞) allow multiple sources.

Accessing inputs​

Your interface script (for example, stage2_interface.py) receives a JSON payload containing:

  • inputs — files and data connected to input ports
  • parameters — configured operation parameters
  • outputs — output configuration information

The script parses this JSON to access the data produced by previous processes.

Description

Input Structure​

Inside the parsed JSON payload, the inputs object contains all ports created for the operation.

Each port name maps to an array of connected input files:

{
"context": {}
"inputs": {
"inputPortName": [
"/stage2/inputs/inputPortName/file1.png",
"/stage2/inputs/inputPortName/file2.png",
"/stage2/inputs/inputPortName/file3.png"
] // 3 sources connected to 1 port
},
"outputs":{},
"parameters": {}
}

In this example:

  • inputPortName is the name of the input port
  • The array contains all files connected to that port
  • Three sources are connected to a single input port (3:1 multiplicity)
Example: Reading Inputs in Python
import json
import argparse
import sys


def main():
parser = argparse.ArgumentParser()

# JSON payload passed to the interface script
parser.add_argument(
"stage2_input",
help="JSON string with inputs, parameters, and output path.",
)

args = parser.parse_args()

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Parse the JSON input
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
try:
stage2_arguments = json.loads(args.stage2_input)
except json.JSONDecodeError as e:
print(f"Error parsing JSON input: {e}")
sys.exit(1)

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Extract inputs
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
inputs = stage2_arguments.get("inputs", {})

# Get all files connected to the "inputPortName" port
input_files = inputs.get("inputPortName", [])

print(input_files)

# Example: accessing individual files
if len(input_files) >= 3:
input_file1 = input_files[0]
input_file2 = input_files[1]
input_file3 = input_files[2]

print(input_file1)
print(input_file2)
print(input_file3)


if __name__ == "__main__":
main()

Notes

  • Every input port is represented as an array, even if only one file is connected.
  • Use inputs.get("<portName>", []) to safely access a port.
  • Always validate the number of connected files before accessing array indices.

Importance of Input Rules​

These rules ensure that operations receive the appropriate amount and type of data, preventing invalid or incomplete configurations in workflows.