Source code for violations.pip_review

from functools import partial
from operator import is_not
import re
from django.template.loader import render_to_string
from tasks.const import STATUS_SUCCESS, STATUS_FAILED
from .base import library


match_line = partial(re.match, r'^(.*)==(.*) is available \(you have (.*)\)$')
not_none = partial(is_not, None)


@library.register('pip_review')
[docs]def pip_review_violation(data): """pip-review violation parser :param data: task data :type data: dict :returns: dict """ count = len(data['raw'].split('\n')) - 1 packages = [ match.groups() for match in map(match_line, data['raw'].split('\n')) if match ] data['status'] = STATUS_SUCCESS if count == 0 else STATUS_FAILED data['preview'] = render_to_string('violations/pip_review/preview.html', { 'count': count, }) data['prepared'] = render_to_string( 'violations/pip_review/prepared.html', {'packages': packages}, ) data['plot'] = { 'outdated': count, } return data