exec_node.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from typing import TYPE_CHECKING, List, Callable, Generator
  2. from api.od import ODAPI
  3. from .id_generator import IdGenerator
  4. class ExecNode:
  5. def __init__(self, out_connections: int = 1) -> None:
  6. from .null_node import NullNode
  7. self.next_state: list[ExecNode] = []
  8. if out_connections > 0:
  9. self.next_state = [NullNode()]*out_connections
  10. self.id: int = IdGenerator().generate_id()
  11. def nextState(self) -> "ExecNode":
  12. return self.next_state[0]
  13. def connect(self, next_state: "ExecNode", from_gate: int = 0, to_gate: int = 0) -> None:
  14. if from_gate >= len(self.next_state):
  15. raise IndexError
  16. self.next_state[from_gate] = next_state
  17. def execute(self, od: ODAPI) -> Generator | None:
  18. return None
  19. def get_id(self) -> int:
  20. return self.id
  21. def generate_dot(self, nodes: List[str], edges: List[str], visited: set[int]) -> None:
  22. visited.add(self.id)
  23. for edge in self.next_state:
  24. edges.append(f"{self.id} -> {edge.get_id()}")
  25. for next in self.next_state:
  26. next.generate_dot(nodes, edges, visited)