code: def skip_tree_node(self, tree_node, tx_context=None):
          
          if not tx_context:
              # create transaction context if one was not provided
              # format: {process_name: {timeperiod: AbstractTreeNode} }
              tx_context = collections.defaultdict(dict)
  
          if tree_node.timeperiod in tx_context[tree_node.process_name]:
              # the node has already been marked for skipping
              return tx_context
  
          if tree_node.job_record.is_finished:
              # the node is finished and does not require skipping
              pass
          else:
              state_machine_name = context.process_context[tree_node.process_name].state_machine_name
              state_machine = self.state_machines[state_machine_name]
              state_machine.skip_job(tree_node.job_record)
  
          tx_context[tree_node.process_name][tree_node.timeperiod] = tree_node
          for timeperiod, node in tree_node.children.items():
              self.skip_tree_node(node, tx_context)
  
          dependant_nodes = self._find_dependant_tree_nodes(tree_node)
          for node in dependant_nodes:
              self.skip_tree_node(node, tx_context)
  
          return tx_context
docs: method skips the node and all its dependants and child nodes