purl2vcs


Namepurl2vcs JSON
Version 1.0.1 PyPI version JSON
download
home_pageNone
Summarypurl2vcs is an add-on library working with the PurlDB to find the version control system (VCS) URL of a package and detect the commit, tags and path for a given version.
upload_time2024-05-30 13:21:27
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords package-url purl git version hg svn tag commit open source scan package dependency sca
VCS
bugtrack_url
requirements aboutcode-toolkit arrow asgiref attrs banal beartype beautifulsoup4 binaryornot bitarray bleach boolean.py certifi cffi chardet charset-normalizer click colorama commoncode construct container-inspector crispy-bootstrap3 crontab cryptography cyclonedx-python-lib debian_inspector defusedxml Deprecated Django django-crispy-forms django-environ django-filter django-probes django-rq django-taggit djangorestframework dockerfile-parse dparse2 drf-spectacular elf-inspector et-xmlfile extractcode extractcode-7z extractcode-libarchive fasteners fetchcode fetchcode-container fingerprints flot fontawesomefree freezegun ftfy ftputil fusepy gemfileparser2 gitdb GitPython gunicorn html5lib htmllistparse idna importlib_metadata inflection intbitset isodate jaraco.functools javaproperties jawa Jinja2 jsonschema jsonschema-specifications jsonstreams license-expression lxml Markdown markdown-it-py MarkupSafe matchcode-toolkit mdurl mock more-itertools natsort normality openpyxl packagedcode-msitools packageurl-python packaging packvers parameter-expansion-patched pdfminer.six pefile pip pip-requirements-parser pkginfo2 pluggy plugincode ply psycopg psycopg-binary publicsuffix2 py-serializable pyahocorasick pycparser pyelftools PyGithub pygmars Pygments pyinstrument PyJWT pymaven-patch PyNaCl pyparsing python-dateutil python-dotenv python-inspector pytz PyYAML rdflib redis referencing regipy reppy2 requests resolvelib rpds-py rpm-inspector-rpm rq rq-scheduler rubymarshal saneyaml scancode-toolkit scancodeio semantic-version semver setuptools six smmap sortedcontainers soupsieve source-inspector spdx-tools sqlparse text-unidecode toml typecode typecode-libmagic typing_extensions univers uritemplate uritools urllib3 urlpy wcwidth webencodings wheel wrapt XlsxWriter xmltodict zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            purl2vcs
==========

purl2vcs is an add-on library working with the PurlDB to find the version control system (VCS) URL
of a package and detect the commit, and tags for a given version.

In the future, it will also find paths and branches, which is useful for monorepos.

Usage
-------

- First, import the main module: ``from purl2vcs import find_source_repo``

- To use the functions you first need to acquire some Package objects:
  Use the ``get_package_object_from_purl(package_url)`` passing a PURL string to get an object from
  the database

- To find the source repository of a Package, call `get_source_repo(package)`
  to will get a PackageURL object back.

- To generate all the source repository URLs of a Package, call `get_repo_urls(package)`.

- To convert a single source repo URLs to PURLs, call  ``convert_repo_url_to_purls``
- To convert a list of source repo URLs to PURLs, call  ``convert_repo_urls_to_purls``

- To find the commit or tags from a source repo PURL use ``get_tags_and_commits``

- The low level ``get_tags_and_commits`` is used in ``find_package_version_tag_and_commit`` to find
  the tag and commit of a given package ``version`` in a source repo PURL.


Installation
------------

Requirements
############

* install purldb dependencies
* `pip install purl2vcs`


Funding
-------

This project was funded through the NGI Assure Fund https://nlnet.nl/assure, a
fund established by NLnet https://nlnet.nl/ with financial support from the
European Commission's Next Generation Internet programme, under the aegis of DG
Communications Networks, Content and Technology under grant agreement No 957073.

This project is also funded through grants from the Google Summer of Code
program, continuing support and sponsoring from nexB Inc. and generous
donations from multiple sponsors.


License
-------

Copyright (c) nexB Inc. and others. All rights reserved.

purldb is a trademark of nexB Inc.

SPDX-License-Identifier: Apache-2.0

pur2vcs is licensed under the Apache License version 2.0.

See https://www.apache.org/licenses/LICENSE-2.0 for the license text.

See https://creativecommons.org/licenses/by-sa/4.0/legalcode for the license text.

See https://github.com/nexB/purldb for support or download.

See https://aboutcode.org for more information about nexB OSS projects.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "purl2vcs",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "package-url, purl, git, version, hg, svn, tag, commit, open source, scan, package, dependency, sca",
    "author": null,
    "author_email": "\"nexB. Inc. and others\" <info@aboutcode.org>",
    "download_url": "https://files.pythonhosted.org/packages/9d/83/e844fa5745a1524307839d1664c8e2fc3b2446dad8bbbc14d463c652be18/purl2vcs-1.0.1.tar.gz",
    "platform": null,
    "description": "purl2vcs\n==========\n\npurl2vcs is an add-on library working with the PurlDB to find the version control system (VCS) URL\nof a package and detect the commit, and tags for a given version.\n\nIn the future, it will also find paths and branches, which is useful for monorepos.\n\nUsage\n-------\n\n- First, import the main module: ``from purl2vcs import find_source_repo``\n\n- To use the functions you first need to acquire some Package objects:\n  Use the ``get_package_object_from_purl(package_url)`` passing a PURL string to get an object from\n  the database\n\n- To find the source repository of a Package, call `get_source_repo(package)`\n  to will get a PackageURL object back.\n\n- To generate all the source repository URLs of a Package, call `get_repo_urls(package)`.\n\n- To convert a single source repo URLs to PURLs, call  ``convert_repo_url_to_purls``\n- To convert a list of source repo URLs to PURLs, call  ``convert_repo_urls_to_purls``\n\n- To find the commit or tags from a source repo PURL use ``get_tags_and_commits``\n\n- The low level ``get_tags_and_commits`` is used in ``find_package_version_tag_and_commit`` to find\n  the tag and commit of a given package ``version`` in a source repo PURL.\n\n\nInstallation\n------------\n\nRequirements\n############\n\n* install purldb dependencies\n* `pip install purl2vcs`\n\n\nFunding\n-------\n\nThis project was funded through the NGI Assure Fund https://nlnet.nl/assure, a\nfund established by NLnet https://nlnet.nl/ with financial support from the\nEuropean Commission's Next Generation Internet programme, under the aegis of DG\nCommunications Networks, Content and Technology under grant agreement No 957073.\n\nThis project is also funded through grants from the Google Summer of Code\nprogram, continuing support and sponsoring from nexB Inc. and generous\ndonations from multiple sponsors.\n\n\nLicense\n-------\n\nCopyright (c) nexB Inc. and others. All rights reserved.\n\npurldb is a trademark of nexB Inc.\n\nSPDX-License-Identifier: Apache-2.0\n\npur2vcs is licensed under the Apache License version 2.0.\n\nSee https://www.apache.org/licenses/LICENSE-2.0 for the license text.\n\nSee https://creativecommons.org/licenses/by-sa/4.0/legalcode for the license text.\n\nSee https://github.com/nexB/purldb for support or download.\n\nSee https://aboutcode.org for more information about nexB OSS projects.\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "purl2vcs is an add-on library working with the PurlDB to find the version control system (VCS) URL of a package and detect the commit, tags and path for a given version.",
    "version": "1.0.1",
    "project_urls": {
        "Homepage": "https://github.com/nexB/purldb"
    },
    "split_keywords": [
        "package-url",
        " purl",
        " git",
        " version",
        " hg",
        " svn",
        " tag",
        " commit",
        " open source",
        " scan",
        " package",
        " dependency",
        " sca"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ceda50a228a13f24b30f66feba8c6dc4242fa5fd4fc231ed9e996359f0d6221e",
                "md5": "f961aa7c23f945363dacfbbb27d8718d",
                "sha256": "937759a2c1bad0b8f5945a576a513c54cd0dad3625e4ed744ac92b8ab405e0de"
            },
            "downloads": -1,
            "filename": "purl2vcs-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f961aa7c23f945363dacfbbb27d8718d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 14827,
            "upload_time": "2024-05-30T13:21:26",
            "upload_time_iso_8601": "2024-05-30T13:21:26.012676Z",
            "url": "https://files.pythonhosted.org/packages/ce/da/50a228a13f24b30f66feba8c6dc4242fa5fd4fc231ed9e996359f0d6221e/purl2vcs-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9d83e844fa5745a1524307839d1664c8e2fc3b2446dad8bbbc14d463c652be18",
                "md5": "be22becf7047cd65dd514dc376532fd3",
                "sha256": "2d135f86951d232c2f96f280814bd273e28533b9fe45d6d59874939c2e5e41bc"
            },
            "downloads": -1,
            "filename": "purl2vcs-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "be22becf7047cd65dd514dc376532fd3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 70613,
            "upload_time": "2024-05-30T13:21:27",
            "upload_time_iso_8601": "2024-05-30T13:21:27.978882Z",
            "url": "https://files.pythonhosted.org/packages/9d/83/e844fa5745a1524307839d1664c8e2fc3b2446dad8bbbc14d463c652be18/purl2vcs-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-30 13:21:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nexB",
    "github_project": "purldb",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aboutcode-toolkit",
            "specs": [
                [
                    "==",
                    "10.1.0"
                ]
            ]
        },
        {
            "name": "arrow",
            "specs": [
                [
                    "==",
                    "1.2.3"
                ]
            ]
        },
        {
            "name": "asgiref",
            "specs": [
                [
                    "==",
                    "3.8.1"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "23.2.0"
                ]
            ]
        },
        {
            "name": "banal",
            "specs": [
                [
                    "==",
                    "1.0.6"
                ]
            ]
        },
        {
            "name": "beartype",
            "specs": [
                [
                    "==",
                    "0.18.2"
                ]
            ]
        },
        {
            "name": "beautifulsoup4",
            "specs": [
                [
                    "==",
                    "4.12.3"
                ]
            ]
        },
        {
            "name": "binaryornot",
            "specs": [
                [
                    "==",
                    "0.4.4"
                ]
            ]
        },
        {
            "name": "bitarray",
            "specs": [
                [
                    "==",
                    "2.6.0"
                ]
            ]
        },
        {
            "name": "bleach",
            "specs": [
                [
                    "==",
                    "6.1.0"
                ]
            ]
        },
        {
            "name": "boolean.py",
            "specs": [
                [
                    "==",
                    "4.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2024.2.2"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.3.2"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.1.7"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "commoncode",
            "specs": [
                [
                    "==",
                    "31.0.3"
                ]
            ]
        },
        {
            "name": "construct",
            "specs": [
                [
                    "==",
                    "2.10.70"
                ]
            ]
        },
        {
            "name": "container-inspector",
            "specs": [
                [
                    "==",
                    "32.0.1"
                ]
            ]
        },
        {
            "name": "crispy-bootstrap3",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "crontab",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "42.0.5"
                ]
            ]
        },
        {
            "name": "cyclonedx-python-lib",
            "specs": [
                [
                    "==",
                    "7.3.2"
                ]
            ]
        },
        {
            "name": "debian_inspector",
            "specs": [
                [
                    "==",
                    "31.1.0"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "Deprecated",
            "specs": [
                [
                    "==",
                    "1.2.14"
                ]
            ]
        },
        {
            "name": "Django",
            "specs": [
                [
                    "==",
                    "5.0.4"
                ]
            ]
        },
        {
            "name": "django-crispy-forms",
            "specs": [
                [
                    "==",
                    "2.1"
                ]
            ]
        },
        {
            "name": "django-environ",
            "specs": [
                [
                    "==",
                    "0.11.2"
                ]
            ]
        },
        {
            "name": "django-filter",
            "specs": [
                [
                    "==",
                    "24.2"
                ]
            ]
        },
        {
            "name": "django-probes",
            "specs": [
                [
                    "==",
                    "1.7.0"
                ]
            ]
        },
        {
            "name": "django-rq",
            "specs": [
                [
                    "==",
                    "2.10.2"
                ]
            ]
        },
        {
            "name": "django-taggit",
            "specs": [
                [
                    "==",
                    "5.0.1"
                ]
            ]
        },
        {
            "name": "djangorestframework",
            "specs": [
                [
                    "==",
                    "3.15.1"
                ]
            ]
        },
        {
            "name": "dockerfile-parse",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "dparse2",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "drf-spectacular",
            "specs": [
                [
                    "==",
                    "0.26.5"
                ]
            ]
        },
        {
            "name": "elf-inspector",
            "specs": [
                [
                    "==",
                    "0.0.1"
                ]
            ]
        },
        {
            "name": "et-xmlfile",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "extractcode",
            "specs": [
                [
                    "==",
                    "31.0.0"
                ]
            ]
        },
        {
            "name": "extractcode-7z",
            "specs": [
                [
                    "==",
                    "16.5.210531"
                ]
            ]
        },
        {
            "name": "extractcode-libarchive",
            "specs": [
                [
                    "==",
                    "3.5.1.210531"
                ]
            ]
        },
        {
            "name": "fasteners",
            "specs": [
                [
                    "==",
                    "0.19"
                ]
            ]
        },
        {
            "name": "fetchcode",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "fetchcode-container",
            "specs": [
                [
                    "==",
                    "1.2.3.210512"
                ]
            ]
        },
        {
            "name": "fingerprints",
            "specs": [
                [
                    "==",
                    "1.2.3"
                ]
            ]
        },
        {
            "name": "flot",
            "specs": [
                [
                    "==",
                    "0.7.2"
                ]
            ]
        },
        {
            "name": "fontawesomefree",
            "specs": [
                [
                    "==",
                    "6.5.1"
                ]
            ]
        },
        {
            "name": "freezegun",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "ftfy",
            "specs": [
                [
                    "==",
                    "6.2.0"
                ]
            ]
        },
        {
            "name": "ftputil",
            "specs": [
                [
                    "==",
                    "5.0.4"
                ]
            ]
        },
        {
            "name": "fusepy",
            "specs": [
                [
                    "==",
                    "3.0.1"
                ]
            ]
        },
        {
            "name": "gemfileparser2",
            "specs": [
                [
                    "==",
                    "0.9.3"
                ]
            ]
        },
        {
            "name": "gitdb",
            "specs": [
                [
                    "==",
                    "4.0.11"
                ]
            ]
        },
        {
            "name": "GitPython",
            "specs": [
                [
                    "==",
                    "3.1.43"
                ]
            ]
        },
        {
            "name": "gunicorn",
            "specs": [
                [
                    "==",
                    "22.0.0"
                ]
            ]
        },
        {
            "name": "html5lib",
            "specs": [
                [
                    "==",
                    "1.1"
                ]
            ]
        },
        {
            "name": "htmllistparse",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.7"
                ]
            ]
        },
        {
            "name": "importlib_metadata",
            "specs": [
                [
                    "==",
                    "7.1.0"
                ]
            ]
        },
        {
            "name": "inflection",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "intbitset",
            "specs": [
                [
                    "==",
                    "3.1.0"
                ]
            ]
        },
        {
            "name": "isodate",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "jaraco.functools",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "javaproperties",
            "specs": [
                [
                    "==",
                    "0.8.1"
                ]
            ]
        },
        {
            "name": "jawa",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.1.3"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.22.0"
                ]
            ]
        },
        {
            "name": "jsonschema-specifications",
            "specs": [
                [
                    "==",
                    "2023.12.1"
                ]
            ]
        },
        {
            "name": "jsonstreams",
            "specs": [
                [
                    "==",
                    "0.6.0"
                ]
            ]
        },
        {
            "name": "license-expression",
            "specs": [
                [
                    "==",
                    "30.3.0"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    "==",
                    "5.2.1"
                ]
            ]
        },
        {
            "name": "Markdown",
            "specs": [
                [
                    "==",
                    "3.5.1"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "2.1.5"
                ]
            ]
        },
        {
            "name": "matchcode-toolkit",
            "specs": [
                [
                    "==",
                    "5.1.0"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    "==",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "mock",
            "specs": [
                [
                    "==",
                    "5.1.0"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    "==",
                    "10.2.0"
                ]
            ]
        },
        {
            "name": "natsort",
            "specs": [
                [
                    "==",
                    "8.2.0"
                ]
            ]
        },
        {
            "name": "normality",
            "specs": [
                [
                    "==",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "openpyxl",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "packagedcode-msitools",
            "specs": [
                [
                    "==",
                    "0.101.210706"
                ]
            ]
        },
        {
            "name": "packageurl-python",
            "specs": [
                [
                    "==",
                    "0.15.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.0"
                ]
            ]
        },
        {
            "name": "packvers",
            "specs": [
                [
                    "==",
                    "21.5"
                ]
            ]
        },
        {
            "name": "parameter-expansion-patched",
            "specs": [
                [
                    "==",
                    "0.3.1"
                ]
            ]
        },
        {
            "name": "pdfminer.six",
            "specs": [
                [
                    "==",
                    "20231228"
                ]
            ]
        },
        {
            "name": "pefile",
            "specs": [
                [
                    "==",
                    "2023.2.7"
                ]
            ]
        },
        {
            "name": "pip",
            "specs": [
                [
                    "==",
                    "22.2.2"
                ]
            ]
        },
        {
            "name": "pip-requirements-parser",
            "specs": [
                [
                    "==",
                    "32.0.1"
                ]
            ]
        },
        {
            "name": "pkginfo2",
            "specs": [
                [
                    "==",
                    "30.0.0"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "plugincode",
            "specs": [
                [
                    "==",
                    "32.0.0"
                ]
            ]
        },
        {
            "name": "ply",
            "specs": [
                [
                    "==",
                    "3.11"
                ]
            ]
        },
        {
            "name": "psycopg",
            "specs": [
                [
                    "==",
                    "3.1.18"
                ]
            ]
        },
        {
            "name": "psycopg-binary",
            "specs": [
                [
                    "==",
                    "3.1.18"
                ]
            ]
        },
        {
            "name": "publicsuffix2",
            "specs": [
                [
                    "==",
                    "2.20191221"
                ]
            ]
        },
        {
            "name": "py-serializable",
            "specs": [
                [
                    "==",
                    "1.0.3"
                ]
            ]
        },
        {
            "name": "pyahocorasick",
            "specs": [
                [
                    "==",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.22"
                ]
            ]
        },
        {
            "name": "pyelftools",
            "specs": [
                [
                    "==",
                    "0.31"
                ]
            ]
        },
        {
            "name": "PyGithub",
            "specs": [
                [
                    "==",
                    "1.56"
                ]
            ]
        },
        {
            "name": "pygmars",
            "specs": [
                [
                    "==",
                    "0.8.0"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.17.2"
                ]
            ]
        },
        {
            "name": "pyinstrument",
            "specs": [
                [
                    "==",
                    "4.6.2"
                ]
            ]
        },
        {
            "name": "PyJWT",
            "specs": [
                [
                    "==",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "pymaven-patch",
            "specs": [
                [
                    "==",
                    "0.3.2"
                ]
            ]
        },
        {
            "name": "PyNaCl",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "python-inspector",
            "specs": [
                [
                    "==",
                    "0.12.0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "rdflib",
            "specs": [
                [
                    "==",
                    "7.0.0"
                ]
            ]
        },
        {
            "name": "redis",
            "specs": [
                [
                    "==",
                    "5.0.4"
                ]
            ]
        },
        {
            "name": "referencing",
            "specs": [
                [
                    "==",
                    "0.34.0"
                ]
            ]
        },
        {
            "name": "regipy",
            "specs": [
                [
                    "==",
                    "4.2.0"
                ]
            ]
        },
        {
            "name": "reppy2",
            "specs": [
                [
                    "==",
                    "0.3.6"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "resolvelib",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "rpds-py",
            "specs": [
                [
                    "==",
                    "0.18.0"
                ]
            ]
        },
        {
            "name": "rpm-inspector-rpm",
            "specs": [
                [
                    "==",
                    "4.16.1.3.210404"
                ]
            ]
        },
        {
            "name": "rq",
            "specs": [
                [
                    "==",
                    "1.16.2"
                ]
            ]
        },
        {
            "name": "rq-scheduler",
            "specs": [
                [
                    "==",
                    "0.13.1"
                ]
            ]
        },
        {
            "name": "rubymarshal",
            "specs": [
                [
                    "==",
                    "1.0.3"
                ]
            ]
        },
        {
            "name": "saneyaml",
            "specs": [
                [
                    "==",
                    "0.6.0"
                ]
            ]
        },
        {
            "name": "scancode-toolkit",
            "specs": []
        },
        {
            "name": "scancodeio",
            "specs": []
        },
        {
            "name": "semantic-version",
            "specs": [
                [
                    "==",
                    "2.10.0"
                ]
            ]
        },
        {
            "name": "semver",
            "specs": [
                [
                    "==",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "69.5.1"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "smmap",
            "specs": [
                [
                    "==",
                    "5.0.1"
                ]
            ]
        },
        {
            "name": "sortedcontainers",
            "specs": [
                [
                    "==",
                    "2.4.0"
                ]
            ]
        },
        {
            "name": "soupsieve",
            "specs": [
                [
                    "==",
                    "2.5"
                ]
            ]
        },
        {
            "name": "source-inspector",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "spdx-tools",
            "specs": [
                [
                    "==",
                    "0.8.2"
                ]
            ]
        },
        {
            "name": "sqlparse",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "text-unidecode",
            "specs": [
                [
                    "==",
                    "1.3"
                ]
            ]
        },
        {
            "name": "toml",
            "specs": [
                [
                    "==",
                    "0.10.2"
                ]
            ]
        },
        {
            "name": "typecode",
            "specs": [
                [
                    "==",
                    "30.0.1"
                ]
            ]
        },
        {
            "name": "typecode-libmagic",
            "specs": [
                [
                    "==",
                    "5.39.210531"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    "==",
                    "4.11.0"
                ]
            ]
        },
        {
            "name": "univers",
            "specs": [
                [
                    "==",
                    "30.11.0"
                ]
            ]
        },
        {
            "name": "uritemplate",
            "specs": [
                [
                    "==",
                    "4.1.1"
                ]
            ]
        },
        {
            "name": "uritools",
            "specs": [
                [
                    "==",
                    "4.0.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.2.1"
                ]
            ]
        },
        {
            "name": "urlpy",
            "specs": [
                [
                    "==",
                    "0.5"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.13"
                ]
            ]
        },
        {
            "name": "webencodings",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "wheel",
            "specs": [
                [
                    "==",
                    "0.37.1"
                ]
            ]
        },
        {
            "name": "wrapt",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "XlsxWriter",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "xmltodict",
            "specs": [
                [
                    "==",
                    "0.13.0"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.18.1"
                ]
            ]
        }
    ],
    "lcname": "purl2vcs"
}
        
Elapsed time: 0.86705s