diff --git a/src/packageurl/utils.py b/src/packageurl/utils.py new file mode 100644 index 0000000..c8a528f --- /dev/null +++ b/src/packageurl/utils.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) the purl authors +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Visit https://github.com/package-url/packageurl-python for support and +# download. + +from packageurl import PackageURL + + +def get_golang_purl(go_package: str): + """ + Return a PackageURL object given an imported ``go_package`` + """ + if not go_package: + return + parts = go_package.split("/") + if not parts: + return + name = parts[-1] + namespace = "/".join(parts[:-1]) + return PackageURL(type="golang", namespace=namespace, name=name) diff --git a/tests/contrib/test_utils.py b/tests/contrib/test_utils.py index 64157b1..6f92d7f 100644 --- a/tests/contrib/test_utils.py +++ b/tests/contrib/test_utils.py @@ -25,6 +25,7 @@ # download. from packageurl.contrib.django.utils import purl_to_lookups +from packageurl.utils import get_golang_purl def test_purl_to_lookups_without_encode(): @@ -53,3 +54,15 @@ def test_purl_to_lookups_with_encode(): "version": "0", "qualifiers": "arch=aarch64&distroversion=edge&reponame=main", } + + +def test_get_golang_purl(): + assert None == get_golang_purl(None) + golang_purl_1 = get_golang_purl( + "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" + ) + assert "pkg:golang/github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" == str( + golang_purl_1 + ) + assert golang_purl_1.name == "v3" + assert golang_purl_1.namespace == "github.com/envoyproxy/go-control-plane/envoy/config/listener"