Example #1
0
    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'])
Example #2
0
 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]