Skip to content

Commit 6df7fab

Browse files
committed
Add source artifact metadata to extra_data
Extract sdist URL, hash, and filename from PyPI response and include in extra_data.source_artifact for downstream consumers that need source distribution information. Signed-off-by: Kai Hodžić <hodzic.e.k@outlook.com>
1 parent 22f705b commit 6df7fab

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

src/python_inspector/package_data.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@
3030
from python_inspector.utils_pypi import PypiSimpleRepository
3131

3232

33+
def get_sdist_from_urls(urls: list) -> Optional[dict]:
34+
"""Extract source distribution info from PyPI urls array."""
35+
for entry in urls or []:
36+
if entry.get("packagetype") == "sdist":
37+
return {
38+
"url": entry.get("url", ""),
39+
"sha256": entry.get("digests", {}).get("sha256", ""),
40+
"md5": entry.get("digests", {}).get("md5") or entry.get("md5_digest", ""),
41+
"size": entry.get("size"),
42+
"filename": entry.get("filename", ""),
43+
}
44+
return None
45+
46+
3347
async def get_pypi_data_from_purl(
3448
purl: str,
3549
environment: Environment,
@@ -88,6 +102,7 @@ async def get_pypi_data_from_purl(
88102
if not response:
89103
return None
90104

105+
sdist_info = get_sdist_from_urls(response.get("urls", []))
91106
homepage_url = info.get("home_page")
92107
project_urls = info.get("project_urls") or {}
93108
code_view_url = get_pypi_codeview_url(project_urls)
@@ -202,6 +217,7 @@ def remove_credentials_from_url(url: str):
202217
api_data_url=remove_credentials_from_url(api_url),
203218
bug_tracking_url=bug_tracking_url,
204219
code_view_url=code_view_url,
220+
extra_data={"source_artifact": sdist_info} if sdist_info else {},
205221
vcs_url=vcs_url,
206222
license_expression=info.get("license_expression"),
207223
declared_license=get_declared_license(info),

0 commit comments

Comments
 (0)