Skip to content

Commit 26d1d91

Browse files
committed
Add 'file_name' qualifier to PURL
1 parent 774b8f9 commit 26d1d91

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

src/auditwheel/repair.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import logging
77
import os
88
import platform
9-
import re
109
import shutil
1110
import stat
1211
from collections.abc import Iterable
@@ -23,17 +22,10 @@
2322
from .policy import get_replace_platforms
2423
from .tools import is_subdir, unique_by_index
2524
from .wheel_abi import WheelAbIInfo
26-
from .wheeltools import InWheelCtx, add_platforms
25+
from .wheeltools import WHEEL_INFO_RE, InWheelCtx, add_platforms
2726

2827
logger = logging.getLogger(__name__)
2928

30-
# Copied from wheel 0.31.1
31-
WHEEL_INFO_RE = re.compile(
32-
r"""^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?))(-(?P<build>\d.*?))?
33-
-(?P<pyver>[a-z].+?)-(?P<abi>.+?)-(?P<plat>.+?)(\.whl|\.dist-info)$""",
34-
re.VERBOSE,
35-
).match
36-
3729

3830
def repair_wheel(
3931
wheel_abi: WheelAbIInfo,

src/auditwheel/sboms.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from urllib.parse import quote
88

99
from auditwheel._vendor.whichprovides import whichprovides
10+
from auditwheel.wheeltools import WHEEL_INFO_RE
1011

1112

1213
def create_sbom_for_wheel(
@@ -26,10 +27,15 @@ def create_sbom_for_wheel(
2627
# from the wheel filename. This segment doesn't
2728
# change even after "repairing", so we don't have
2829
# to worry about it changing.
29-
wheel_name, wheel_version, *_ = wheel_fname.split("-", 2)
30-
wheel_name = wheel_name.lower()
30+
match = WHEEL_INFO_RE(wheel_fname)
31+
if not match:
32+
msg = f"Failed to parse wheel file name: {wheel_fname}"
33+
raise ValueError(msg)
34+
wheel_name = match.group("name")
35+
wheel_version = match.group("ver")
3136
wheel_purl = (
3237
f"pkg:pypi/{quote(wheel_name, safe='')}@{quote(wheel_version, safe='')}"
38+
f"?file_name={quote(wheel_fname, safe='')}"
3339
)
3440

3541
sbom_components: list[dict[str, typing.Any]] = [

src/auditwheel/wheeltools.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import hashlib
1010
import logging
1111
import os
12+
import re
1213
import zlib
1314
from base64 import urlsafe_b64encode
1415
from collections.abc import Generator, Iterable
@@ -30,6 +31,14 @@
3031
logger = logging.getLogger(__name__)
3132

3233

34+
# Copied from wheel 0.31.1
35+
WHEEL_INFO_RE = re.compile(
36+
r"""^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?))(-(?P<build>\d.*?))?
37+
-(?P<pyver>[a-z].+?)-(?P<abi>.+?)-(?P<plat>.+?)(\.whl|\.dist-info)$""",
38+
re.VERBOSE,
39+
).match
40+
41+
3342
def _dist_info_dir(bdist_dir: Path) -> Path:
3443
"""Get the .dist-info directory from an unpacked wheel
3544

tests/integration/test_manylinux.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from typing import Any
1616

1717
import docker
18+
import packaging.tags
1819
import pytest
1920
from docker.models.containers import Container
2021
from elftools.elf.elffile import ELFFile
@@ -549,17 +550,21 @@ def test_numpy_sbom(
549550
sbom_components = sbom.pop("components")
550551
sbom_dependencies = sbom.pop("dependencies")
551552

553+
expected_tag = (
554+
f"{packaging.tags.interpreter_name()}{packaging.tags.interpreter_version()}"
555+
)
556+
expected_numpy_purl = f"pkg:pypi/numpy@{NUMPY_VERSION}?file_name=numpy-{NUMPY_VERSION}-{expected_tag}-{expected_tag}-{policy}.whl"
552557
assert sbom == {
553558
"bomFormat": "CycloneDX",
554559
"specVersion": "1.4",
555560
"version": 1,
556561
"metadata": {
557562
"component": {
558563
"type": "library",
559-
"bom-ref": f"pkg:pypi/numpy@{NUMPY_VERSION}",
564+
"bom-ref": expected_numpy_purl,
560565
"name": "numpy",
561566
"version": NUMPY_VERSION,
562-
"purl": f"pkg:pypi/numpy@{NUMPY_VERSION}",
567+
"purl": expected_numpy_purl,
563568
},
564569
# "tools": [{...}, ...],
565570
},
@@ -572,9 +577,9 @@ def test_numpy_sbom(
572577
assert "version" in sbom_tools[0]
573578

574579
assert sbom_components[0] == {
575-
"bom-ref": f"pkg:pypi/numpy@{NUMPY_VERSION}",
580+
"bom-ref": expected_numpy_purl,
576581
"name": "numpy",
577-
"purl": f"pkg:pypi/numpy@{NUMPY_VERSION}",
582+
"purl": expected_numpy_purl,
578583
"type": "library",
579584
"version": NUMPY_VERSION,
580585
}

0 commit comments

Comments
 (0)