44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
from dataclasses import field
|
|
from typing import Dict, List
|
|
|
|
from pydantic.dataclasses import dataclass
|
|
|
|
from .base import IgnoreCodes, IgnoredItems
|
|
from .package import PythonDependency
|
|
from .specification import PythonSpecification
|
|
from .vulnerability import Vulnerability
|
|
|
|
|
|
def not_ignored(vuln):
|
|
return not vuln.ignored
|
|
|
|
|
|
@dataclass
|
|
class DependencyResultModel:
|
|
dependencies: List[PythonDependency]
|
|
ignored_vulns: IgnoredItems = field(default_factory=lambda: IgnoredItems({}))
|
|
ignored_vulns_data: Dict[str, Vulnerability] = field(default_factory=lambda: {})
|
|
|
|
failed: bool = False
|
|
|
|
def get_affected_specifications(
|
|
self, include_ignored: bool = False
|
|
) -> List[PythonSpecification]:
|
|
affected = []
|
|
for dep in self.dependencies:
|
|
affected += [
|
|
spec
|
|
for spec in dep.specifications
|
|
if (any(spec.vulnerabilities) if include_ignored else any(filter(not_ignored, spec.vulnerabilities)))
|
|
]
|
|
return affected
|
|
|
|
def get_affected_dependencies(self) -> List[PythonDependency]:
|
|
affected = []
|
|
for dep in self.dependencies:
|
|
for spec in dep.specifications:
|
|
if any(filter(not_ignored, spec.vulnerabilities)):
|
|
affected.append(dep)
|
|
break
|
|
return affected
|