def status_matrix(self, form): status_matrix = GroupByResult() query = self._filter_query( form, TestCaseRun.objects.values( 'build', 'build__name', 'run__plan__tag', 'run__plan', 'run__plan__name', 'run', 'run__summary', 'case_run_status__name' ).annotate(total_count=Count('pk')) ) for row in query: tag_id = row['run__plan__tag'] build_id = row['build'] build_name = row['build__name'] plan_id = row['run__plan'] plan_name = row['run__plan__name'] run_id = row['run'] run_summary = row['run__summary'] status_name = row['case_run_status__name'] total_count = row['total_count'] builds = status_matrix.setdefault(tag_id, GroupByResult()) plans = builds.setdefault(TestBuild(pk=build_id, name=build_name), GroupByResult()) runs = plans.setdefault(TestPlan(pk=plan_id, name=plan_name), GroupByResult()) status_subtotal = runs.setdefault( TestRun(pk=run_id, summary=run_summary), GroupByResult()) status_subtotal[status_name] = total_count return status_matrix
def walk_status_matrix_rows(): '''For rendering template, walk through status matrix row by row''' prev_build = None builds = sorted(status_matrix.iteritems(), key=lambda item: item[0]) for build_id, tested_by_ids in builds: build_rowspan = len(tested_by_ids) tested_by_ids = sorted(tested_by_ids.iteritems(), key=lambda item: item[0]) for tested_by_id, status_subtotal in tested_by_ids: if build_id not in runs_subtotal: runs_count = 0 elif tested_by_id not in runs_subtotal[build_id]: runs_count = 0 else: runs_count = runs_subtotal[build_id][tested_by_id] build = TestBuild(pk=build_id, name=build_names.get(build_id, '')) if build == prev_build: _build = (build, None) else: _build = (build, build_rowspan) prev_build = build tested_by_username = tested_by_names.get(tested_by_id, None) tested_by = None if tested_by_username is not None: tested_by = User(pk=tested_by_id, username=tested_by_username) yield _build, tested_by, runs_count, status_subtotal
def _get_builds(self): '''Get builds from valid form @param form: the form containing valid data @type form: L{CustomSearchForm} @return: queried test builds @rtype: L{QuerySet} ''' sql, params = self._prepare_sql(sqls.custom_builds) rows = SQLExecution(sql, params).rows return [TestBuild(pk=row['build_id'], name=row['name']) for row in rows]
def _get_builds(self): """Get builds from valid form :param form: the form containing valid data :type form: :class:`CustomSearchForm` :return: queried test builds :rtype: QuerySet """ sql, params = self._prepare_sql(sqls.custom_builds) rows = SQLExecution(sql, params).rows return [ TestBuild(pk=row['build_id'], name=row['name']) for row in rows ]
def status_matrix(self, form): sql, params = self._prepare_sql(form, sqls.by_plan_tags_detail_status_matrix) rows = SQLExecution(sql, params, with_field_name=False).rows status_matrix = GroupByResult() for row in rows: (tag_id, build_id, build_name, plan_id, plan_name, run_id, run_summary, status_name, total_count) = row builds = status_matrix.setdefault(tag_id, GroupByResult()) plans = builds.setdefault(TestBuild(pk=build_id, name=build_name), GroupByResult()) runs = plans.setdefault(TestPlan(pk=plan_id, name=plan_name), GroupByResult()) status_subtotal = runs.setdefault( TestRun(pk=run_id, summary=run_summary), GroupByResult()) status_subtotal[status_name] = total_count return status_matrix