diff --git a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py index 9344f5b7bba5c4aac28d9fc473e6ae1ce5d8f256..b0c49e4945929a52843b2432403ef679996d8bde 100755 --- a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py +++ b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py @@ -215,14 +215,27 @@ class ResourceAssigner(): if predecessor_trees: otdb_id = specification_tree['otdb_id'] + pred_otdb_ids = [pt['otdb_id'] for pt in predecessor_trees] + logger.info('proccessing predecessors otdb_ids=%s for otdb_id=%s', pred_otdb_ids, otdb_id) + task = self.radbrpc.getTask(otdb_id=otdb_id) - for predecessor_tree in predecessor_trees: - pred_otdb_id = predecessor_tree['otdb_id'] - predecessor_task = self.radbrpc.getTask(otdb_id=pred_otdb_id) - if predecessor_task and predecessor_task['id'] not in task['predecessor_ids']: - self.radbrpc.insertTaskPredecessor(task['id'], predecessor_task['id']) - self.processPredecessors(predecessor_tree) + if task: + for predecessor_tree in predecessor_trees: + #first process the predecessor's predecessors + self.processPredecessors(predecessor_tree) + + #then check if the predecessor needs to be linked to this task + pred_otdb_id = predecessor_tree['otdb_id'] + predecessor_task = self.radbrpc.getTask(otdb_id=pred_otdb_id) + if predecessor_task: + if predecessor_task['id'] not in task['predecessor_ids']: + logger.info('connecting predecessor task with otdb_id=%s to it\'s successor with otdb_id=%s', pred_otdb_id, otdb_id) + self.radbrpc.insertTaskPredecessor(task['id'], predecessor_task['id']) + else: + logger.warning('could not find predecessor task with otdb_id=%s in radb for task otdb_id=%s', pred_otdb_id, otdb_id) + else: + logger.info('no predecessors for otdb_id=%s', specification_tree['otdb_id']) except Exception as e: logger.error(e)