def __getattr__(self, name): """Returns node class""" # FIXME: use create_node here class_dict = node_dictionary() node_class = class_dict[name] constructor = _StreamForkConstructor(self, node_class) return constructor
def update(self, nodes = None, connections = None): """Adds nodes and connections specified in the dictionary. Dictionary might contain node names instead of real classes. You can use this method for creating stream from a dictionary that was created from a JSON file, for example. """ node_dict = node_dictionary() # FIXME: use either node type identifier or fully initialized node, not # node class (Warning: might break some existing code, # depreciate it first nodes = nodes or {} connections = connections or [] for (name, obj) in nodes.items(): if isinstance(obj, Node): node_instance = obj elif isinstance(obj, type) and issubclass(obj, Node): self.logger.warn("Using classes in Stream.update is depreciated") node_instance = obj() else: if not "type" in obj: raise Exception("Node dictionary has no 'type' key") node_type = obj["type"] if node_type in node_dict: node_class = node_dict[node_type] node_instance = node_class() node_instance.configure(obj) else: raise Exception("No node class of type '%s'" % node_type) self.add(node_instance, name) if connections: for connection in connections: self.connect(connection[0], connection[1])