Skip to content

Commit 738c497

Browse files
committed
Add support for batch 1 download URLs
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 9fb5350 commit 738c497

2 files changed

Lines changed: 72 additions & 2 deletions

File tree

src/packageurl/contrib/purl2url.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,72 @@ def build_repo_download_url(purl):
443443
return get_repo_download_url(purl)
444444

445445

446+
@download_router.route("pkg:hex/.*")
447+
def build_hex_download_url(purl):
448+
"""
449+
Return a hex download URL from the `purl` string.
450+
"""
451+
purl_data = PackageURL.from_string(purl)
452+
453+
name = purl_data.name
454+
version = purl_data.version
455+
456+
if name and version:
457+
return f"https://repo.hex.pm/tarballs/{name}-{version}.tar"
458+
459+
460+
@download_router.route("pkg:golang/.*")
461+
def build_golang_download_url(purl):
462+
"""
463+
Return a golang download URL from the `purl` string.
464+
"""
465+
purl_data = PackageURL.from_string(purl)
466+
467+
namespace = purl_data.namespace
468+
name = purl_data.name
469+
version = purl_data.version
470+
471+
if not name:
472+
return
473+
474+
if namespace:
475+
name = f"{namespace}/{name}"
476+
477+
if name and version:
478+
return f"https://proxy.golang.org/{name}/@v/{version}.zip"
479+
480+
481+
@download_router.route("pkg:pub/.*")
482+
def build_pub_download_url(purl):
483+
"""
484+
Return a pub download URL from the `purl` string.
485+
"""
486+
purl_data = PackageURL.from_string(purl)
487+
488+
name = purl_data.name
489+
version = purl_data.version
490+
491+
if name and version:
492+
return f"https://pub.dev/api/archives/{name}-{version}.tar.gz"
493+
494+
495+
@download_router.route("pkg:swift/.*")
496+
def build_swift_download_url(purl):
497+
"""
498+
Return a Swift Package download URL from the `purl` string.
499+
"""
500+
purl_data = PackageURL.from_string(purl)
501+
502+
name = purl_data.name
503+
version = purl_data.version
504+
namespace = purl_data.namespace
505+
506+
if not (namespace or name or version):
507+
return
508+
509+
return f"https://{namespace}/{name}/archive/{version}.zip"
510+
511+
446512
def get_repo_download_url(purl):
447513
"""
448514
Return ``download_url`` if present in ``purl`` qualifiers or

tests/contrib/test_purl2url.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ def test_purl2url_get_download_url():
9898
"pkg:maven/org.apache.commons/commons-io@1.3.2?repository_url=https://repo1.maven.org/maven2": "https://repo1.maven.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar",
9999
"pkg:maven/org.apache.commons/commons-io@1.3.2?type=pom": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom",
100100
"pkg:maven/org.apache.commons/commons-math3@3.6.1?classifier=sources": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1-sources.jar",
101+
"pkg:hex/plug@1.11.1": "https://repo.hex.pm/tarballs/plug-1.11.1.tar",
102+
"pkg:golang/xorm.io/xorm@v0.8.2": "https://proxy.golang.org/xorm.io/xorm/@v/v0.8.2.zip",
103+
"pkg:golang/gopkg.in/ldap.v3@v3.1.0": "https://proxy.golang.org/gopkg.in/ldap.v3/@v/v3.1.0.zip",
104+
"pkg:pub/http@0.13.3": "https://pub.dev/api/archives/http-0.13.3.tar.gz",
105+
"pkg:swift/github.com/Alamofire/Alamofire@5.4.3": "https://github.com/Alamofire/Alamofire/archive/5.4.3.zip",
106+
"pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4": "https://github.com/RxSwiftCommunity/RxFlow/archive/2.12.4.zip",
101107
# From `download_url` qualifier
102108
"pkg:github/yarnpkg/yarn@1.3.2?download_url=https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz&version_prefix=v": "https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz",
103109
"pkg:generic/lxc-master.tar.gz?download_url=https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz": "https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz",
@@ -112,8 +118,6 @@ def test_purl2url_get_download_url():
112118
"pkg:bitbucket/birkenfeld": None,
113119
"pkg:pypi/sortedcontainers@2.4.0": None,
114120
"pkg:composer/psr/log@1.1.3": None,
115-
"pkg:golang/xorm.io/xorm@v0.8.2": None,
116-
"pkg:golang/gopkg.in/ldap.v3@v3.1.0": None,
117121
}
118122

119123
for purl, url in purls_url.items():

0 commit comments

Comments
 (0)