Use custom exception types.

This commit is contained in:
Jacob Segal 2024-04-20 18:12:42 -07:00
parent a0bf532558
commit 5dc13651b0
2 changed files with 13 additions and 4 deletions

View File

@ -2,6 +2,12 @@ import nodes
from comfy.graph_utils import is_link from comfy.graph_utils import is_link
class DependencyCycleError(Exception):
pass
class NodeInputError(Exception):
pass
class DynamicPrompt: class DynamicPrompt:
def __init__(self, original_prompt): def __init__(self, original_prompt):
# The original prompt provided by the user # The original prompt provided by the user
@ -76,10 +82,10 @@ class TopologicalSort:
def make_input_strong_link(self, to_node_id, to_input): def make_input_strong_link(self, to_node_id, to_input):
inputs = self.dynprompt.get_node(to_node_id)["inputs"] inputs = self.dynprompt.get_node(to_node_id)["inputs"]
if to_input not in inputs: if to_input not in inputs:
raise Exception(f"Node {to_node_id} says it needs input {to_input}, but there is no input to that node at all") raise NodeInputError(f"Node {to_node_id} says it needs input {to_input}, but there is no input to that node at all")
value = inputs[to_input] value = inputs[to_input]
if not is_link(value): if not is_link(value):
raise Exception(f"Node {to_node_id} says it needs input {to_input}, but that value is a constant") raise NodeInputError(f"Node {to_node_id} says it needs input {to_input}, but that value is a constant")
from_node_id, from_socket = value from_node_id, from_socket = value
self.add_strong_link(from_node_id, from_socket, to_node_id) self.add_strong_link(from_node_id, from_socket, to_node_id)
@ -141,7 +147,7 @@ class ExecutionList(TopologicalSort):
return None return None
available = self.get_ready_nodes() available = self.get_ready_nodes()
if len(available) == 0: if len(available) == 0:
raise Exception("Dependency cycle detected") raise DependencyCycleError("Dependency cycle detected")
next_node = available[0] next_node = available[0]
# If an output node is available, do that first. # If an output node is available, do that first.
# Technically this has no effect on the overall length of execution, but it feels better as a user # Technically this has no effect on the overall length of execution, but it feels better as a user

View File

@ -23,6 +23,9 @@ class ExecutionResult(Enum):
FAILURE = 1 FAILURE = 1
SLEEPING = 2 SLEEPING = 2
class DuplicateNodeError(Exception):
pass
class IsChangedCache: class IsChangedCache:
def __init__(self, dynprompt, outputs_cache): def __init__(self, dynprompt, outputs_cache):
self.dynprompt = dynprompt self.dynprompt = dynprompt
@ -337,7 +340,7 @@ def execute(server, dynprompt, caches, current_item, extra_data, executed, promp
# Check for conflicts # Check for conflicts
for node_id in new_graph.keys(): for node_id in new_graph.keys():
if dynprompt.get_node(node_id) is not None: if dynprompt.get_node(node_id) is not None:
raise Exception(f"Attempt to add duplicate node {node_id}. Ensure node ids are unique and deterministic or use graph_utils.GraphBuilder.") raise DuplicateNodeError(f"Attempt to add duplicate node {node_id}. Ensure node ids are unique and deterministic or use graph_utils.GraphBuilder.")
for node_id, node_info in new_graph.items(): for node_id, node_info in new_graph.items():
new_node_ids.append(node_id) new_node_ids.append(node_id)
display_id = node_info.get("override_display_id", unique_id) display_id = node_info.get("override_display_id", unique_id)