def test_basic(self): """Test basic usage.""" with Pipeline('somename') as p: self.assertEqual(1, len(p.groups)) with OpsGroup(group_type='exit_handler'): op1 = ContainerOp(name='op1', image='image') with OpsGroup(group_type='branch'): op2 = ContainerOp(name='op2', image='image') op3 = ContainerOp(name='op3', image='image') with OpsGroup(group_type='loop'): op4 = ContainerOp(name='op4', image='image') self.assertEqual(1, len(p.groups)) self.assertEqual(1, len(p.groups[0].groups)) exit_handler_group = p.groups[0].groups[0] self.assertEqual('exit_handler', exit_handler_group.type) self.assertEqual(2, len(exit_handler_group.groups)) self.assertEqual(1, len(exit_handler_group.ops)) self.assertEqual('op1', exit_handler_group.ops[0].name) branch_group = exit_handler_group.groups[0] self.assertFalse(branch_group.groups) self.assertCountEqual([x.name for x in branch_group.ops], ['op2', 'op3']) loop_group = exit_handler_group.groups[1] self.assertFalse(loop_group.groups) self.assertCountEqual([x.name for x in loop_group.ops], ['op4'])
def _get_opsgroup_groups_helper( current_groups: dsl.OpsGroup, opsgroups_to_groups: Dict[str, List[dsl.OpsGroup]]) -> None: root_group = current_groups[-1] for g in root_group.groups: # Add recursive opsgroup in the ops_to_groups # such that the i/o dependency can be propagated to the ancester opsgroups if g.recursive_ref: continue opsgroups_to_groups[g.name] = [x.name for x in current_groups ] + [g.name] current_groups.append(g) _get_opsgroup_groups_helper(current_groups, opsgroups_to_groups) del current_groups[-1]