[core/ui] replace and remove depending/required nodes methods

This commit is contained in:
Julien-Haudegond 2020-08-24 11:59:03 +02:00
parent 11e68e77ed
commit ba1994deb9
3 changed files with 25 additions and 28 deletions

View file

@ -916,14 +916,6 @@ class Graph(BaseObject):
outputNodes, edges = self.nodesFromNode(node, filterTypes=None, reverse=True)
return outputNodes[1:] # exclude current node
def nodesDependingOnNode(self, startNode, filterTypes=None):
nodes, edges = self.nodesFromNode(startNode, filterTypes=filterTypes, reverse=True)
return nodes
def nodesRequiredForNode(self, startNode, filterTypes=None):
nodes, edges = self.nodesFromNode(startNode, filterTypes=filterTypes, reverse=False)
return nodes
@Slot(Node, result=int)
def canSubmitOrCompute(self, startNode):
if startNode.isAlreadySubmittedOrFinished():

View file

@ -857,8 +857,9 @@ class BaseNode(BaseObject):
# Unlock required nodes if the current node changes to Error or Stopped
if currentStatus in (Status.ERROR, Status.STOPPED):
requiredNodes = self.graph.nodesRequiredForNode(self)
for node in requiredNodes:
self.setLocked(False)
inputNodes = self.getInputNodes(recursive=True)
for node in inputNodes:
node.setLocked(False)
# Avoid useless travel through nodes
@ -868,23 +869,25 @@ class BaseNode(BaseObject):
if currentStatus == Status.SUCCESS:
# At this moment, the node is necessarily locked because of previous if statement
requiredNodes = self.graph.nodesRequiredForNode(self)
dependentNodes = self.graph.nodesDependingOnNode(self)
inputNodes = self.getInputNodes(recursive=True)
outputNodes = self.getOutputNodes(recursive=True)
stayLocked = None
# Check if at least one dependentNode is submitted or currently running
for node in dependentNodes:
for node in outputNodes:
if node.getGlobalStatus() in lockedStatus and node._chunks.at(0).statusNodeName == node.name:
stayLocked = True
break
if not stayLocked:
# Unlock every required node
for node in requiredNodes:
self.setLocked(False)
# Unlock every input node
for node in inputNodes:
node.setLocked(False)
return
elif currentStatus in lockedStatus:
requiredNodes = self.graph.nodesRequiredForNode(self)
for node in requiredNodes:
self.setLocked(True)
inputNodes = self.getInputNodes(recursive=True)
for node in inputNodes:
node.setLocked(True)
return

View file

@ -401,11 +401,11 @@ class UIGraph(QObject):
# If some dependent nodes are submitted, the first one will be in error
# Make sure to remove those nodes from the Task Manager list
dependentNodes = self._graph.nodesDependingOnNode(node)
for node in dependentNodes[1:]: # exclude current node
if node.getGlobalStatus() == Status.ERROR:
node.upgradeStatusTo(Status.NONE)
self._taskManager.removeNode(node)
outputNodes = node.getOutputNodes(recursive=True)
for n in outputNodes:
if n.getGlobalStatus() == Status.ERROR:
n.upgradeStatusTo(Status.NONE)
self._taskManager.removeNode(n)
self.computeStatusChanged.emit()
@ -413,13 +413,15 @@ class UIGraph(QObject):
def cancelNodeComputation(self, node):
""" Cancel the computation of the node and all the nodes depending on it. """
if node.getGlobalStatus() == Status.SUBMITTED:
# Current node belongs to this list
for node in self._graph.nodesDependingOnNode(node):
# Status from SUBMITTED to NONE
# Make sure to remove the nodes from the Task Manager list
node.clearSubmittedChunks()
# Make sure to remove the node from the Task Manager list
self._taskManager.removeNode(node)
for n in node.getOutputNodes(recursive=True):
n.clearSubmittedChunks()
self._taskManager.removeNode(n)
@Slot(Node)
def submit(self, node=None):
""" Submit the graph to the default Submitter.