72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
from collections import namedtuple
|
|
from typing import List, Dict, Any, Optional, Tuple
|
|
|
|
from safety.formatter import FormatterAPI
|
|
from safety.util import get_basic_announcements
|
|
|
|
|
|
class BareReport(FormatterAPI):
|
|
"""
|
|
Bare report, for command line tools.
|
|
"""
|
|
|
|
def render_vulnerabilities(self, announcements: List[Dict[str, Any]], vulnerabilities: List[Any],
|
|
remediations: Any, full: bool, packages: List[Any], fixes: Tuple = ()) -> str:
|
|
"""
|
|
Renders vulnerabilities in a bare format.
|
|
|
|
Args:
|
|
announcements (List[Dict[str, Any]]): List of announcements.
|
|
vulnerabilities (List[Any]): List of vulnerabilities.
|
|
remediations (Any): Remediation data.
|
|
full (bool): Flag indicating full output.
|
|
packages (List[Any]): List of packages.
|
|
fixes (Tuple, optional): Tuple of fixes.
|
|
|
|
Returns:
|
|
str: Rendered vulnerabilities.
|
|
"""
|
|
parsed_announcements = []
|
|
Announcement = namedtuple("Announcement", ["name"])
|
|
|
|
for announcement in get_basic_announcements(announcements, include_local=False):
|
|
normalized_message = "-".join(announcement.get('message', 'none').lower().split())
|
|
parsed_announcements.append(Announcement(name=normalized_message))
|
|
|
|
announcements_to_render = [announcement.name for announcement in parsed_announcements]
|
|
affected_packages = list(set([v.package_name for v in vulnerabilities if not v.ignored]))
|
|
|
|
return " ".join(announcements_to_render + affected_packages)
|
|
|
|
def render_licenses(self, announcements: List[Dict[str, Any]], packages_licenses: List[Dict[str, Any]]) -> str:
|
|
"""
|
|
Renders licenses in a bare format.
|
|
|
|
Args:
|
|
announcements (List[Dict[str, Any]]): List of announcements.
|
|
packages_licenses (List[Dict[str, Any]]): List of package licenses.
|
|
|
|
Returns:
|
|
str: Rendered licenses.
|
|
"""
|
|
parsed_announcements = []
|
|
|
|
for announcement in get_basic_announcements(announcements):
|
|
normalized_message = "-".join(announcement.get('message', 'none').lower().split())
|
|
parsed_announcements.append({'license': normalized_message})
|
|
|
|
announcements_to_render = [announcement.get('license') for announcement in parsed_announcements]
|
|
|
|
licenses = list(set([pkg_li.get('license') for pkg_li in packages_licenses]))
|
|
sorted_licenses = sorted(licenses)
|
|
return " ".join(announcements_to_render + sorted_licenses)
|
|
|
|
def render_announcements(self, announcements: List[Dict[str, Any]]) -> None:
|
|
"""
|
|
Renders announcements in a bare format.
|
|
|
|
Args:
|
|
announcements (List[Dict[str, Any]]): List of announcements.
|
|
"""
|
|
print('render_announcements bare')
|