Return a list of affected purls and the fixed package found in the ``affected_package`` AffectedPackageV2 disregarding any ranges. Only exact version constraints (ie with an equality) are considered For eg: >>> purl = {"type": "turtle", "name": "green"} >>> vers = "vers:npm
(
affected_package: AffectedPackageV2,
logger: Callable = None,
)
| 45 | |
| 46 | |
| 47 | def get_exact_purls_v2( |
| 48 | affected_package: AffectedPackageV2, |
| 49 | logger: Callable = None, |
| 50 | ) -> Tuple[List[PackageURL], PackageURL]: |
| 51 | """ |
| 52 | Return a list of affected purls and the fixed package found in the ``affected_package`` |
| 53 | AffectedPackageV2 disregarding any ranges. |
| 54 | |
| 55 | Only exact version constraints (ie with an equality) are considered |
| 56 | For eg: |
| 57 | >>> purl = {"type": "turtle", "name": "green"} |
| 58 | >>> vers = "vers:npm/<1.0.0 | >=2.0.0 | <3.0.0" |
| 59 | >>> vers2 = "vers:npm/5.0.0" |
| 60 | >>> affected_package = AffectedPackageV2.from_dict({ |
| 61 | ... "package": purl, |
| 62 | ... "affected_version_range": vers, |
| 63 | ... "fixed_version_range": vers2 |
| 64 | ... }) |
| 65 | >>> got = get_exact_purls_v2(affected_package) |
| 66 | >>> expected = ( |
| 67 | ... [PackageURL(type='turtle', namespace=None, name='green', version='2.0.0', qualifiers={}, subpath=None)], |
| 68 | ... [PackageURL(type='turtle', namespace=None, name='green', version='5.0.0', qualifiers={}, subpath=None)] |
| 69 | ... ) |
| 70 | >>> assert expected == got |
| 71 | """ |
| 72 | if not affected_package: |
| 73 | return [], [] |
| 74 | |
| 75 | try: |
| 76 | affected_purls, fixed_purls = get_exact_purl_from_vers( |
| 77 | version_range=affected_package.affected_version_range, |
| 78 | base_purl=affected_package.package, |
| 79 | ) |
| 80 | |
| 81 | fixed_purls_2, affected_purls_2 = get_exact_purl_from_vers( |
| 82 | version_range=affected_package.fixed_version_range, |
| 83 | base_purl=affected_package.package, |
| 84 | ) |
| 85 | |
| 86 | affected_purls.extend(affected_purls_2) |
| 87 | fixed_purls.extend(fixed_purls_2) |
| 88 | |
| 89 | return affected_purls, fixed_purls |
| 90 | except Exception as e: |
| 91 | logger( |
| 92 | f"Failed to get exact purls for: {affected_package!r} with error: {e!r} \n{traceback_format_exc()}", |
| 93 | level=logging.ERROR, |
| 94 | ) |
| 95 | return [], [] |
no test coverage detected