コード例 #1
0
 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
コード例 #2
0
ファイル: comparison.py プロジェクト: ldv-klever/klever
 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)
コード例 #3
0
ファイル: comparison.py プロジェクト: ldv-klever/klever
 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)
コード例 #4
0
 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)
     }]
コード例 #5
0
 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
コード例 #6
0
    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
コード例 #7
0
    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
コード例 #8
0
 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)
     }
コード例 #9
0
    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'])
コード例 #10
0
 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)