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))
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))
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)])
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), ])
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)))