Beispiel #1
0
 def test_iterdeps(self):
     x = AsyncResult("1")
     x.backend._cache["1"] = {"status": states.SUCCESS, "result": None}
     c = [EagerResult(str(i), i, states.SUCCESS) for i in range(3)]
     for child in c:
         child.backend = Mock()
         child.backend.get_children.return_value = []
     x.backend.get_children = Mock()
     x.backend.get_children.return_value = c
     it = x.iterdeps()
     self.assertListEqual(list(it), [(None, x), (x, c[0]), (x, c[1]), (x, c[2])])
     x.backend._cache.pop("1")
     x.ready = Mock()
     x.ready.return_value = False
     with self.assertRaises(IncompleteStream):
         list(x.iterdeps())
     list(x.iterdeps(intermediate=True))
Beispiel #2
0
 def test_iterdeps(self):
     x = AsyncResult('1')
     x.backend._cache['1'] = {'status': states.SUCCESS, 'result': None}
     c = [EagerResult(str(i), i, states.SUCCESS) for i in range(3)]
     for child in c:
         child.backend = Mock()
         child.backend.get_children.return_value = []
     x.backend.get_children = Mock()
     x.backend.get_children.return_value = c
     it = x.iterdeps()
     self.assertListEqual(list(it), [
         (None, x),
         (x, c[0]),
         (x, c[1]),
         (x, c[2]),
     ])
     x.backend._cache.pop('1')
     x.ready = Mock()
     x.ready.return_value = False
     with self.assertRaises(IncompleteStream):
         list(x.iterdeps())
     list(x.iterdeps(intermediate=True))
Beispiel #3
0
    def test_build_graph_get_leaf_collect(self):
        x = AsyncResult("1")
        x.backend._cache["1"] = {"status": states.SUCCESS, "result": None}
        c = [EagerResult(str(i), i, states.SUCCESS) for i in range(3)]
        x.iterdeps = Mock()
        x.iterdeps.return_value = ((None, x), (x, c[0]), (c[0], c[1]), (c[1], c[2]))
        x.backend.READY_STATES = states.READY_STATES
        self.assertTrue(x.graph)

        self.assertIs(x.get_leaf(), 2)

        it = x.collect()
        self.assertListEqual(list(it), [(x, None), (c[0], 0), (c[1], 1), (c[2], 2)])
Beispiel #4
0
    def test_build_graph_get_leaf_collect(self):
        x = AsyncResult('1')
        x.backend._cache['1'] = {'status': states.SUCCESS, 'result': None}
        c = [EagerResult(str(i), i, states.SUCCESS) for i in range(3)]
        x.iterdeps = Mock()
        x.iterdeps.return_value = ((None, x), (x, c[0]), (c[0], c[1]), (c[1],
                                                                        c[2]))
        x.backend.READY_STATES = states.READY_STATES
        self.assertTrue(x.graph)

        self.assertIs(x.get_leaf(), 2)

        it = x.collect()
        self.assertListEqual(list(it), [
            (x, None),
            (c[0], 0),
            (c[1], 1),
            (c[2], 2),
        ])
Beispiel #5
0
    def get(self):
        app = self.application
        draw = self.get_argument('draw', type=int)
        start = self.get_argument('start', type=int)
        length = self.get_argument('length', type=int)
        search = self.get_argument('search[value]', type=str)

        column = self.get_argument('order[0][column]', type=int)
        sort_by = self.get_argument('columns[%s][data]' % column, type=str)
        sort_order = self.get_argument('order[0][dir]', type=str) == 'asc'
        do_grouping = self.get_argument('grouping', type=bool)

        def key(item):
            val = getattr(item[1], sort_by)
            if sys.version_info[0] == 3:
                val = str(val)
            return val

        def add_hierarchy(args):
            uuid, task = args
            if not hasattr(task, "hierarchy"):
                hierarchy = ascendants(task.uuid)
                task.hierarchy = hierarchy
                task._fields = task._fields + ('hierarchy',)
            return uuid, task

        def ascendants(uuid):
            asc = [uuid]
            while uuid != self.parents.get(uuid, uuid):
                asc.append(self.parents.get(uuid, uuid))
                uuid = self.parents.get(uuid, uuid)
            return asc

        tasks = iter_tasks(app.events, search=search)
        if do_grouping:
            for uuid, task in iter_tasks(app.events):
                aresult = AsyncResult(uuid)
                for parent, child in aresult.iterdeps(intermediate=True):
                    if isinstance(child, AsyncResult) and isinstance(parent, AsyncResult):
                            self.parents[child.id] = parent.id
                # for child in aresult.children or []:
                #     if isinstance(child, AsyncResult):
                #             self.parents[child.id] = uuid

            tasks = map(add_hierarchy, tasks)

            groups = []
            tasks = sorted(tasks, key=lambda args: args[1].hierarchy[-1])
            for root_uuid, group in itertools.groupby(tasks, key=lambda args: args[1].hierarchy[-1]):
                groups.append(sorted(group, key=lambda args: len(args[1].hierarchy)))

            # sort groups by root element
            groups = sorted(groups, key=lambda group: key(group[0]), reverse=sort_order)
            tasks = itertools.chain.from_iterable(groups)
        else:
            tasks = sorted(tasks, key=key, reverse=sort_order)
        tasks = list(map(self.format_task, tasks))

        filtered_tasks = []
        i = 0
        for _, task in tasks:
            if i < start:
                i += 1
                continue
            if i >= (start + length):
                break
            task = as_dict(task)
            if 'hierarchy' in task:
                task['hierarchy'] = "{}_{}".format(task['hierarchy'][-1], len(task['hierarchy']) - 1)
            if task['worker']:
                task['worker'] = task['worker'].hostname
            for k,v in task.items():
                if isinstance(v, str):
                    task[k] = html.escape(v)
            filtered_tasks.append(task)
            i += 1

        self.write(dict(draw=draw, data=filtered_tasks,
                        recordsTotal=len(tasks),
                        recordsFiltered=len(tasks)))