from OdenGraphQt import BaseNode class ArrayNode(BaseNode): """ Array Node: - Inputs: 'in' (value to store), 'ArraySize' (defines maximum length) - Output: 'Array' (the current array as a string) - Stores incoming values in an array with size defined by ArraySize. When full, it removes the oldest value. """ __identifier__ = 'bunny-lab.io.array_node' NODE_NAME = 'Array' def __init__(self): super(ArrayNode, self).__init__() self.values = {} # Ensure values is a dictionary. self.add_input('in') self.add_input('ArraySize') self.add_output('Array') self.array = [] self.value = "[]" # Output as a string. self.array_size = 10 # Default array size. self.set_name("Array: []") def process_input(self): # Get array size from 'ArraySize' input if available. size_port = self.input('ArraySize') connected_size = size_port.connected_ports() if size_port is not None else [] if connected_size: connected_port = connected_size[0] parent_node = connected_port.node() try: self.array_size = int(float(getattr(parent_node, 'value', 10))) except (ValueError, TypeError): self.array_size = 10 # Get new value from 'in' input if available. in_port = self.input('in') connected_in = in_port.connected_ports() if in_port is not None else [] if connected_in: connected_port = connected_in[0] parent_node = connected_port.node() new_value = getattr(parent_node, 'value', None) if new_value is not None: self.array.append(new_value) while len(self.array) > self.array_size: self.array.pop(0) self.value = str(self.array) self.set_name(f"Array: {self.value}")