Skip to content

Commit 8f86f46

Browse files
committed
Move get_versions to fetchcode_utils pipe
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 7d38a4f commit 8f86f46

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

vulnerabilities/pipelines/flag_ghost_packages.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@
99

1010
import logging
1111
from itertools import groupby
12-
from traceback import format_exc as traceback_format_exc
1312

1413
from aboutcode.pipeline import LoopProgress
1514
from fetchcode.package_versions import SUPPORTED_ECOSYSTEMS as FETCHCODE_SUPPORTED_ECOSYSTEMS
16-
from fetchcode.package_versions import versions
1715
from packageurl import PackageURL
1816

1917
from vulnerabilities.models import Package
2018
from vulnerabilities.pipelines import VulnerableCodePipeline
19+
from vulnerabilities.pipes.fetchcode_utils import get_versions
2120

2221

2322
class FlagGhostPackagePipeline(VulnerableCodePipeline):
@@ -89,16 +88,3 @@ def flag_ghost_packages(base_purl, packages, logger=None):
8988
pkg.save()
9089

9190
return ghost_packages
92-
93-
94-
def get_versions(purl, logger=None):
95-
"""Return set of known versions for the given purl."""
96-
try:
97-
return {v.value.lstrip("vV") for v in versions(str(purl))}
98-
except Exception as e:
99-
if logger:
100-
logger(
101-
f"Error while fetching known versions for {purl!s}: {e!r} \n {traceback_format_exc()}",
102-
level=logging.ERROR,
103-
)
104-
return

vulnerabilities/pipes/advisory.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10+
import hashlib
1011
import logging
1112
from datetime import datetime
1213
from datetime import timezone
1314
from traceback import format_exc as traceback_format_exc
1415
from typing import Callable
1516
from typing import List
17+
from typing import Union
1618

1719
from django.db import transaction
1820
from django.db.models.query import QuerySet
@@ -183,3 +185,14 @@ def import_advisory(
183185

184186
advisory.date_imported = datetime.now(timezone.utc)
185187
advisory.save()
188+
189+
190+
def advisories_checksum(advisories: Union[Advisory, List[Advisory]]) -> str:
191+
if isinstance(advisories, Advisory):
192+
advisories = [advisories]
193+
194+
contents = sorted([advisory.unique_content_id for advisory in advisories])
195+
combined_contents = "".join(contents)
196+
197+
checksum = hashlib.sha1(combined_contents.encode())
198+
return checksum.hexdigest()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/aboutcode-org/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
import logging
11+
from traceback import format_exc as traceback_format_exc
12+
from typing import Callable
13+
14+
from fetchcode.package_versions import SUPPORTED_ECOSYSTEMS as FETCHCODE_SUPPORTED_ECOSYSTEMS
15+
from fetchcode.package_versions import versions
16+
from packageurl import PackageURL
17+
18+
19+
def get_versions(purl: PackageURL, logger: Callable = None):
20+
"""Return set of known versions for the given purl."""
21+
if purl.type not in FETCHCODE_SUPPORTED_ECOSYSTEMS:
22+
return
23+
24+
try:
25+
return {v.value.lstrip("vV") for v in versions(str(purl))}
26+
except Exception as e:
27+
if logger:
28+
logger(
29+
f"Error while fetching known versions for {purl!s}: {e!r} \n {traceback_format_exc()}",
30+
level=logging.ERROR,
31+
)

vulnerabilities/tests/pipelines/test_flag_ghost_packages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
class FlagGhostPackagePipelineTest(TestCase):
2424
data = Path(__file__).parent.parent / "test_data"
2525

26-
@mock.patch("vulnerabilities.pipelines.flag_ghost_packages.versions")
26+
@mock.patch("vulnerabilities.pipes.fetchcode_utils.versions")
2727
def test_flag_ghost_package(self, mock_fetchcode_versions):
2828
Package.objects.create(type="pypi", name="foo", version="2.3.0")
2929
Package.objects.create(type="pypi", name="foo", version="3.0.0")
@@ -43,7 +43,7 @@ def test_flag_ghost_package(self, mock_fetchcode_versions):
4343
self.assertEqual(1, flagged_package_count)
4444
self.assertEqual(1, Package.objects.filter(is_ghost=True).count())
4545

46-
@mock.patch("vulnerabilities.pipelines.flag_ghost_packages.versions")
46+
@mock.patch("vulnerabilities.pipes.fetchcode_utils.versions")
4747
def test_detect_and_flag_ghost_packages(self, mock_fetchcode_versions):
4848
Package.objects.create(type="pypi", name="foo", version="2.3.0")
4949
Package.objects.create(type="pypi", name="foo", version="3.0.0")

0 commit comments

Comments
 (0)