Skip to content

Commit 7517935

Browse files
refactor(metadata): use Metadata.from_email() directly
Replace parse_email() + Metadata.from_raw() with Metadata.from_email() for simpler code and proper validation. Use parse_metadata() helper where appropriate and fix empty metadata error handling. Fixes: #561 Signed-off-by: Lalatendu Mohanty <lmohanty@redhat.com>
1 parent 1bef76d commit 7517935

File tree

2 files changed

+7
-13
lines changed

2 files changed

+7
-13
lines changed

src/fromager/bootstrapper.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import zipfile
1313
from urllib.parse import urlparse
1414

15-
from packaging.metadata import Metadata, parse_email
1615
from packaging.requirements import Requirement
1716
from packaging.utils import NormalizedName, canonicalize_name
1817
from packaging.version import Version
@@ -907,9 +906,7 @@ def _get_version_from_package_metadata(
907906
config_settings=pbi.config_settings,
908907
)
909908
metadata_filename = source_dir.parent / metadata_dir_base / "METADATA"
910-
with open(metadata_filename, "rb") as f:
911-
raw_metadata, _ = parse_email(f.read())
912-
metadata = Metadata.from_raw(raw_metadata)
909+
metadata = dependencies.parse_metadata(metadata_filename)
913910
return metadata.version
914911

915912
def _resolve_prebuilt_with_history(

src/fromager/candidate.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from io import BytesIO
66
from zipfile import ZipFile
77

8-
from packaging.metadata import Metadata, parse_email
8+
from packaging.metadata import Metadata
99
from packaging.requirements import Requirement
1010
from packaging.utils import BuildTag, canonicalize_name
1111
from packaging.version import Version
@@ -14,6 +14,7 @@
1414

1515
logger = logging.getLogger(__name__)
1616

17+
1718
@dataclasses.dataclass(frozen=True, order=True, slots=True, repr=False, kw_only=True)
1819
class Candidate:
1920
name: str
@@ -109,8 +110,7 @@ def get_metadata_for_wheel(url: str, metadata_url: str | None = None) -> Metadat
109110
response.raise_for_status()
110111

111112
# Parse metadata directly from the response content
112-
raw_metadata, _ = parse_email(response.content)
113-
metadata = Metadata.from_raw(raw_metadata)
113+
metadata = Metadata.from_email(response.content)
114114
logger.debug(f"Successfully retrieved metadata via PEP 658 for {url}")
115115
return metadata
116116

@@ -127,10 +127,7 @@ def get_metadata_for_wheel(url: str, metadata_url: str | None = None) -> Metadat
127127
for n in z.namelist():
128128
if n.endswith(".dist-info/METADATA"):
129129
metadata_content = z.read(n)
130-
raw_metadata, _ = parse_email(metadata_content)
131-
metadata = Metadata.from_raw(raw_metadata)
132-
return metadata
130+
return Metadata.from_email(metadata_content)
133131

134-
# If we didn't find the metadata, return an empty metadata object
135-
raw_metadata, _ = parse_email(b"")
136-
return Metadata.from_raw(raw_metadata)
132+
# If we didn't find the metadata, raise an error
133+
raise ValueError(f"Could not find METADATA file in wheel: {url}")

0 commit comments

Comments
 (0)