def get_value(self, column, mark_version): val = '-' href = None color = None if column == 'verdict': val = mark_version.get_verdict_display() color = safe_color(mark_version.verdict) return val, href, color
def __init__(self, report): super().__init__("s_{}".format(report.pk), block_class='safe') self.type = 'safe' self.title = _('Safe') self.href = reverse('reports:safe', args=[report.decision.identifier, report.identifier]) self.subtitle = { 'text': report.cache.get_verdict_display(), 'color': safe_color(report.cache.verdict) } self.attrs = self.get_attrs(report)
def __init__(self, mark_report): super().__init__("sm_{}".format(mark_report.mark_id)) self.type = 'mark' self.title = _('Safes mark') self.href = reverse('marks:safe', args=[mark_report.mark_id]) self.subtitle = { 'text': mark_report.mark.get_verdict_display(), 'color': safe_color(mark_report.mark.verdict) } self.tags = self.get_tags(mark_report.mark)
def verdict(self): if self.type == 'unknown' or self.v1.verdict == self.v2.verdict: return None if self.type == 'safe': return [{ 'id': self.v1.verdict, 'text': self.v1.get_verdict_display(), 'color': safe_color(self.v1.verdict) }, { 'id': self.v2.verdict, 'text': self.v2.get_verdict_display(), 'color': safe_color(self.v2.verdict) }] return [{ 'id': self.v1.verdict, 'text': self.v1.get_verdict_display(), 'color': unsafe_color(self.v1.verdict) }, { 'id': self.v2.verdict, 'text': self.v2.get_verdict_display(), 'color': unsafe_color(self.v2.verdict) }]
def verdicts(self): if self.type == 'safe': return list({ 'id': v_id, 'text': v_text, 'color': safe_color(v_id) } for v_id, v_text in MARK_SAFE) elif self.type == 'unsafe': return list({ 'id': v_id, 'text': v_text, 'color': unsafe_color(v_id) } for v_id, v_text in MARK_UNSAFE) return None
def __collect_simple_info(self, **kwargs): columns = SafeColumns() queryset = ReportSafe.objects.filter( **kwargs).values('cache__verdict').annotate(total=Count( 'id', distinct=True)).order_by('cache__verdict').values_list( 'cache__verdict', 'total') info_data = [] for verdict, total_num in queryset: column = columns.get_verdict_column(verdict) info_data.append({ 'title': columns.titles.get(column, column), 'url': "{}?verdict={}".format(self._base_url, verdict), 'color': safe_color(verdict), 'value': total_num }) return info_data
def __collect_detailed_info(self, **kwargs): columns = SafeColumns(detailed=True) queryset = ReportSafe.objects.filter( **kwargs).values('cache__verdict').annotate( total=Count('id', distinct=True), manual=Count( Case(When(cache__marks_confirmed__gt=0, then=F('id')), default=None), distinct=True)).order_by('cache__verdict').values_list( 'cache__verdict', 'manual', 'total') info_data = [] for verdict, manual_num, total_num in queryset: column = columns.get_verdict_column(verdict) verdict_url = "{}?verdict={}".format(self._base_url, verdict) verdict_data = { 'title': columns.titles.get(column, column), 'url': verdict_url, 'color': safe_color(verdict), 'value': total_num } is_detailed = columns.is_detailed(verdict) if is_detailed: manual_col = columns.get_verdict_column(verdict, manual=True) verdict_data['manual'] = { 'title': columns.titles.get(manual_col, manual_col), 'url': "{}&manual=1".format(verdict_url), 'value': manual_num } automatic_col = columns.get_verdict_column(verdict, manual=False) verdict_data['automatic'] = { 'title': columns.titles.get(automatic_col, automatic_col), 'url': "{}&manual=0".format(verdict_url), 'value': total_num - manual_num } info_data.append(verdict_data) return info_data
def get_context_data(self, **kwargs): mark_version = MarkSafeHistory.objects.select_related('mark', 'author') \ .get(mark=self.object, version=F('mark__version')) return { 'mark': self.object, 'mark_version': mark_version, 'verdict': { 'id': mark_version.verdict, 'text': mark_version.get_verdict_display(), 'color': safe_color(mark_version.verdict, inverted=True) }, 'access': MarkAccess(self.request.user, mark=self.object), 'versions': SMVlistSerializerRO(mark=self.object).data, 'tags': MarkTagsTree(mark_version), 'reports': SafeAssociationsTable(self.request.user, self.object, self.get_view(VIEW_TYPES[14]), self.request.GET) }
def values(self): value_data = { ASSOCIATION_TYPE[0][0]: { 'title': self.ass_type_block_titles[ASSOCIATION_TYPE[0][0]], 'color': '#8f361e', 'values': [] }, ASSOCIATION_TYPE[1][0]: { 'title': self.ass_type_block_titles[ASSOCIATION_TYPE[1][0]], 'color': '#c71a2d', 'values': [] }, ASSOCIATION_TYPE[2][0]: { 'title': self.ass_type_block_titles[ASSOCIATION_TYPE[2][0]], 'color': '#7506b4', 'values': [] }, ASSOCIATION_TYPE[3][0]: { 'title': self.ass_type_block_titles[ASSOCIATION_TYPE[3][0]], 'color': '#3f9f32', 'values': [] } } source_dict = dict(MARK_SOURCE) cnt = 1 for mark_data in self.queryset: row_data = [] for col in self.columns: val = '-' href = None color = None if col == 'mark_num': val = cnt href = reverse('marks:{}'.format(self.report_type), args=[mark_data['id']]) elif col == 'verdict': val = self._verdicts_map[mark_data['verdict']] if self.report_type == 'unsafe': color = unsafe_color(mark_data['verdict']) else: color = safe_color(mark_data['verdict']) elif col == 'problem': val = mark_data['problem'] problem_link = mark_data['link'] if problem_link is not None: if not problem_link.startswith('http'): problem_link = 'http://' + problem_link href = problem_link elif col == 'similarity': if mark_data['error'] is not None: val = mark_data['error'] color = result_color(0) else: val = "{:.0%}".format(mark_data['similarity']) color = result_color(mark_data['similarity']) elif col == 'status': if mark_data['status']: val = self._statuses_map[mark_data['status']] color = bug_status_color(mark_data['status']) elif col == 'source': val = source_dict[mark_data['source']] elif col == 'tags': if mark_data['cache_tags']: val = '; '.join( x.split(' - ')[-1] for x in sorted(mark_data['cache_tags'])) elif col == 'ass_author': if mark_data['ass_author'] and mark_data[ 'ass_author'] in self.authors: val = self.authors[ mark_data['ass_author']].get_full_name() href = reverse('users:show-profile', args=[mark_data['ass_author']]) elif col == 'description': if len(mark_data['description']): val = mark_data['description'] elif col == 'likes': val = { 'id': mark_data['ass_id'], 'likes_num': len(self.likes_data['likes'].get( mark_data['ass_id'], [])), 'dislikes_num': len(self.likes_data['dislikes'].get( mark_data['ass_id'], [])), 'like_url': reverse('marks:api-like-{}'.format(self.report_type), args=[mark_data['ass_id']]) } elif col == 'buttons': val = { 'edit': reverse('marks:{}-edit-inl'.format(self.report_type), args=[mark_data['id']]), 'delete': reverse('marks:api-{}-detail'.format(self.report_type), args=[mark_data['id']]), } if mark_data['ass_type'] in { ASSOCIATION_TYPE[1][0], ASSOCIATION_TYPE[2][0] }: val['confirm'] = reverse('marks:api-confirm-{}'.format( self.report_type), args=[mark_data['ass_id']]) if mark_data['ass_type'] in { ASSOCIATION_TYPE[2][0], ASSOCIATION_TYPE[3][0] }: val['unconfirm'] = reverse( 'marks:api-confirm-{}'.format(self.report_type), args=[mark_data['ass_id']]) elif col == 'change_date': val = mark_data['cahnge_date'] elif col == 'author': if mark_data['author'] and mark_data[ 'author'] in self.authors: val = self.authors[mark_data['author']].get_full_name() href = reverse('users:show-profile', args=[mark_data['author']]) row_data.append({ 'value': val, 'color': color, 'column': col, 'href': href }) cnt += 1 value_data[mark_data['ass_type']]['values'].append(row_data) return list(value_data[at] for at in sorted(value_data, reverse=True) if value_data[at]['values'])
def get_verdict_html(self, verdict, text): color = safe_color(verdict) if color: return '<span style="color: {color};">{text}</span>'.format( color=color, text=text) return '<span>{text}</span>'.format(text=text)