Workflow Nodes
List, get, iterate, count, and look up workflow nodes using label, creator, and property filters, with optional includes for related data.
project.workflow_nodes is a WorkflowNodeCollection. Workflow nodes are the vertices in
the project's computation graph. Each node has a display name, an optional label
(its type), typed properties, file attachments, and parent/child edges.
The default sort order for workflow nodes is created_at descending — newest first.
Basic list
from optixlog import SDKClient
from optixlog.management import Management
client = SDKClient(base_url="https://optixlog.leidos.com", api_key="sk-opt-...")
mgmt = Management(client)
project = mgmt.project("proj_grating_7f3a")
page = project.workflow_nodes.list()
for node in page.items:
print(node.id, node.display_name)Filters
All filters are AND. Filter by:
label— label name, e.g."SimulationRun".created_by— user id of the creator.has_property—dict[str, str]of required property key/value pairs.
# Nodes with label "SimulationRun", solver=="fdtd", created by a specific user
page = project.workflow_nodes.list(
label="SimulationRun",
created_by="user-xyz",
has_property={"solver": "fdtd"},
)Includes
Without include, related fields (label_ref, properties, attachments, parent_refs,
child_refs) are None. Pass the includes you need:
page = project.workflow_nodes.list(
include=["label", "properties", "attachments", "parents", "children"],
)
node = page.items[0]
print(node.label_ref.name) # e.g. "SimulationRun"
print(node.properties) # dict[str, str] | None
print(node.attachments) # list[FileRef] | None
print(node.parent_refs) # list[EntityRef] | None
print(node.child_refs) # list[EntityRef] | NoneGet by id
node = project.workflow_nodes.get(
"node-abc123",
include=["label", "properties", "attachments"],
)
# Returns None if not found
node = project.workflow_nodes.get_or_none("node-abc123", include=["label"])Iterate all nodes
for node in project.workflow_nodes.iter(
label="SimulationRun",
include=["properties"],
order_by="created_at",
order="desc",
):
print(node.id, node.properties)Count
sim_count = project.workflow_nodes.count(label="SimulationRun")
fdtd_count = project.workflow_nodes.count(has_property={"solver": "fdtd"})Unique lookups
# Exactly one node with run_id=="sim-001" — raises if zero or more than one
node = project.workflow_nodes.one(has_property={"run_id": "sim-001"})
# First FDTD simulation node, or None
node = project.workflow_nodes.first(
label="SimulationRun",
has_property={"solver": "fdtd"},
)Ordering
Order by created_at, updated_at, display_name, or label. Default is created_at
descending.
page = project.workflow_nodes.list(order_by="display_name", order="asc")WorkflowNode fields
Prop
Type
FileRef fields
Returned in node.attachments when include=["attachments"] is passed.
Prop
Type
Node labels
Labels (node types) are managed via project.workflow_nodes.labels. See
Node Labels.