Skip to content

Commit aee327c

Browse files
committed
Add code and tests to handle cocoapods PURL with no name #143
Reference: #143 Signed-off-by: John M. Horan <johnmhoran@gmail.com>
1 parent 4bd76d5 commit aee327c

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/packageurl/contrib/purl2url.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
# Visit https://github.com/package-url/packageurl-python for support and
2525
# download.
2626

27+
2728
from packageurl import PackageURL
2829
from packageurl.contrib.route import NoRouteAvailable
2930
from packageurl.contrib.route import Router
@@ -75,7 +76,12 @@ def get_download_url(purl):
7576
return download_url
7677

7778
# Fallback on the `download_url` qualifier when available.
78-
purl_data = PackageURL.from_string(purl)
79+
purl_data = None
80+
try:
81+
purl_data = PackageURL.from_string(purl)
82+
except Exception as e:
83+
print(f"An error occurred in get_download_url(): {e}")
84+
return
7985
return purl_data.qualifiers.get("download_url", None)
8086

8187

@@ -309,13 +315,18 @@ def build_cocoapods_repo_url(purl):
309315
"""
310316
Return a CocoaPods repo URL from the `purl` string.
311317
"""
312-
purl_data = PackageURL.from_string(purl)
313-
name = purl_data.name
314-
315-
if name:
316-
repository_homepage_url = f"https://cocoapods.org/pods/{name}"
318+
purl_data = None
319+
name = None
320+
try:
321+
purl_data = PackageURL.from_string(purl)
322+
name = purl_data.name
323+
except Exception as e:
324+
print(f"An error occurred in build_cocoapods_repo_url(): {e}")
325+
return
317326

318-
return repository_homepage_url
327+
if not name:
328+
return
329+
return f"https://cocoapods.org/pods/{name}"
319330

320331

321332
# Download URLs:

tests/contrib/test_purl2url.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def test_purl2url_get_repo_url():
6666
"pkg:golang/gopkg.in/ldap.v3@v3.1.0": "https://pkg.go.dev/gopkg.in/ldap.v3@v3.1.0",
6767
"pkg:cocoapods/AFNetworking@4.0.1": "https://cocoapods.org/pods/AFNetworking",
6868
"pkg:cocoapods/MapsIndoors@3.24.0": "https://cocoapods.org/pods/MapsIndoors",
69+
"pkg:cocoapods/": None,
6970
}
7071

7172
for purl, url in purls_url.items():
@@ -140,6 +141,7 @@ def test_purl2url_get_inferred_urls():
140141
"https://pypi.org/project/sortedcontainers/2.4.0/"
141142
],
142143
"pkg:cocoapods/AFNetworking@4.0.1": ["https://cocoapods.org/pods/AFNetworking"],
144+
"pkg:cocoapods/": [],
143145
"pkg:composer/psr/log@1.1.3": ["https://packagist.org/packages/psr/log#1.1.3"],
144146
"pkg:rubygems/package-name": ["https://rubygems.org/gems/package-name"],
145147
"pkg:bitbucket/birkenfeld": [],

0 commit comments

Comments
 (0)