{"id":31772035,"url":"https://github.com/aboutcode-org/purldb-toolkit","last_synced_at":"2025-10-10T03:55:14.868Z","repository":{"id":288338477,"uuid":"966438896","full_name":"aboutcode-org/purldb-toolkit","owner":"aboutcode-org","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-16T22:35:22.000Z","size":701,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-09-17T12:00:37.222Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aboutcode-org.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.rst","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-14T23:32:07.000Z","updated_at":"2025-07-19T11:07:25.000Z","dependencies_parsed_at":"2025-04-17T10:32:00.013Z","dependency_job_id":"4f2e73be-a340-4700-93d8-2721a0323413","html_url":"https://github.com/aboutcode-org/purldb-toolkit","commit_stats":null,"previous_names":["aboutcode-org/purldb-toolkit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aboutcode-org/purldb-toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aboutcode-org%2Fpurldb-toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aboutcode-org%2Fpurldb-toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aboutcode-org%2Fpurldb-toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aboutcode-org%2Fpurldb-toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aboutcode-org","download_url":"https://codeload.github.com/aboutcode-org/purldb-toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aboutcode-org%2Fpurldb-toolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002601,"owners_count":26083426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-10T03:55:10.959Z","updated_at":"2025-10-10T03:55:14.862Z","avatar_url":"https://github.com/aboutcode-org.png","language":"Python","readme":"purldb-toolkit\n==============\n\n.. contents:: :local:\n    :depth: 3\n\npurldb-toolkit is a command line utility and library to use the PurlDB, its API\nand various related libraries.\n\npurldb-toolkit exposes the ``purlcli`` command that acts as a client to the PURL\nlibraries, the PurlDB and MatchCode REST API and exposes various PURL-based\nservices.\n\npurldb-toolkit serves as a tool, a library and an example of how to use the\nservices programmatically.\n\n\nInstallation\n------------\n\n.. code-block:: console\n\n    pip install purldb-toolkit\n\n\nUsage\n-----\n\nThe purlcli command exposes multiple subcommands. Run this to command to get basic help:\n\n.. code-block:: console\n\n    purlcli  --help\n    Usage: purlcli [OPTIONS] COMMAND [ARGS]...\n\n      Return information for a PURL or list of PURLs.\n\n    Options:\n      --help  Show this message and exit.\n\n    Commands:\n      d2d       Run deploy-to-devel \"back2source\" analysis between packages.\n      metadata  Fetch package metadata for a PURL.\n      urls      Return known URLs for a PURL.\n      validate  Validate PURL syntax and existence.\n      versions  List all known versions for a PURL.\n\n\n\nThe purlcli exposes the following subcommands:\n\n-  validate      Validate PURL syntax.\n-  metadata      Fetch package metadata for a PURL.\n-  urls          Return known URLs for a PURL.\n-  versions      List all known versions for a PURL.\n-  d2d           Run deploy-to-devel between packages.\n\n\nEach subcommand use the same set of options::\n\n    Options:\n      --purl PURL    Package-URL or PURL.\n      --output FILE  Write output as JSON to FILE. Default is to print on screen.\n                     [default: -]\n      --file FILE    Read a list of PURLs from a FILE, one per line.\n      --help         Show this message and exit.\n\n\n``validate``: validate a PURL\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis command validates a PURL in two ways:\n\n* validate that the PURL syntax is correct\n* validate that the PURL points to an existing package querying the PurlDB and upstream\n  package registries as needed.\n\n\nExamples\n########\n\n**Submit multiple PURLs using the command line:**\n\n.. code-block:: console\n\n    purlcli validate --purl pkg:npm/canonical-path@1.0.0 --purl pkg:nginx/nginx@0.8.9 --output \u003cpath/to/output.json\u003e\n\n*Sample output:*\n\n.. code-block:: json\n\n    {\n        \"headers\": [\n            {\n                \"tool_name\": \"purlcli\",\n                \"tool_version\": \"0.2.0\",\n                \"options\": {\n                    \"command\": \"validate\",\n                    \"--purl\": [\n                        \"pkg:npm/canonical-path@1.0.0\",\n                        \"pkg:nginx/nginx@0.8.9\"\n                    ],\n                    \"--file\": null,\n                    \"--output\": \"\u003cpath/to/output.json\u003e\"\n                },\n                \"errors\": [],\n                \"warnings\": [\n                    \"'check_existence' is not supported for 'pkg:nginx/nginx@0.8.9'\"\n                ]\n            }\n        ],\n        \"packages\": [\n            {\n                \"purl\": \"pkg:npm/canonical-path@1.0.0\",\n                \"valid\": true,\n                \"exists\": true,\n                \"message\": \"The provided Package URL is valid, and the package exists in the upstream repo.\"\n            },\n            {\n                \"purl\": \"pkg:nginx/nginx@0.8.9\",\n                \"valid\": true,\n                \"exists\": null,\n                \"message\": \"The provided PackageURL is valid, but `check_existence` is not supported for this package type.\"\n            }\n        ]\n    }\n\n\n**Submit multiple PURLs using a .txt file:**\n\n.. code-block:: console\n\n    purlcli validate --file \u003cpath/to/output.txt\u003e --output \u003cpath/to/output.json\u003e\n\n*Sample input.txt:*\n\n.. code-block:: text\n\n    pkg:npm/canonical-path@1.0.0\n    pkg:nginx/nginx@0.8.9\n\n\nDetails\n#######\n\n``validate`` calls the ``validate/`` endpoint of the `purldb API \u003chttps://public.purldb.io/api/\u003e`_.\n\nSee also https://public.purldb.io/api/docs/#/validate for details.\n\n\n----\n\n\n``versions``: collect package versions for a PURL\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThis command collects and return a list of all the known versions of a PURL by querying the PurlDB\nand upstream package registries as needed.\n\n\nThis command collects and return a list of all the known versions of a PURL by querying the PurlDB\nand upstream package registries as needed.\n\n\nExamples\n########\n\n**Submit multiple PURLs using the command line:**\n\n.. code-block:: console\n\n    purlcli versions --purl pkg:npm/canonical-path --purl pkg:nginx/nginx --output \u003cpath/to/output.json\u003e\n\n*Sample output:*\n\n.. code-block:: json\n\n    {\n        \"headers\": [\n            {\n                \"tool_name\": \"purlcli\",\n                \"tool_version\": \"0.2.0\",\n                \"options\": {\n                    \"command\": \"versions\",\n                    \"--purl\": [\n                        \"pkg:npm/canonical-path\",\n                        \"pkg:nginx/nginx\"\n                    ],\n                    \"--file\": null,\n                    \"--output\": \"\u003cpath/to/output.json\u003e\"\n                },\n                \"errors\": [],\n                \"warnings\": [\n                    \"'pkg:nginx/nginx' not supported with `versions` command\"\n                ]\n            }\n        ],\n        \"packages\": [\n            {\n                \"purl\": \"pkg:npm/canonical-path@0.0.1\",\n                \"version\": \"0.0.1\",\n                \"release_date\": \"2013-12-19\"\n            },\n            {\n                \"purl\": \"pkg:npm/canonical-path@0.0.2\",\n                \"version\": \"0.0.2\",\n                \"release_date\": \"2013-12-19\"\n            },\n            {\n                \"purl\": \"pkg:npm/canonical-path@1.0.0\",\n                \"version\": \"1.0.0\",\n                \"release_date\": \"2018-10-24\"\n            }\n        ]\n    }\n\n\nDetails\n#######\n\n``versions`` calls ``versions()`` from `fetchcode/package_versions.py`.\n\nVersion information is not needed in submitted PURLs and, if included, will be\nremoved before processing.\n\n\n----\n\n\n``metadata``: collect package metadata for a PURL\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis command collects and return the metadata for the package pointed by a PURL. It does so by\nquerying the PurlDB and upstream package registries as needed.\n\nThe metadata consist of all available information found in the package manifest and package registry\nor repository API.\n\nThe schema is the schema used by ScanCode Toolkit, PurlDB and all other AboutCode projects.\n\nExamples\n########\n\n**Submit multiple PURLs using the command line:**\n\n.. code-block:: console\n\n    purlcli metadata --purl pkg:openssl/openssl@3.0.6 --purl pkg:nginx/nginx@0.8.9 --purl pkg:gnu/glibc@2.38 --output \u003cpath/to/output.json\u003e\n\n*Sample output:*\n\n.. code-block:: json\n\n    {\n        \"headers\": [\n            {\n                \"tool_name\": \"purlcli\",\n                \"tool_version\": \"0.2.0\",\n                \"options\": {\n                    \"command\": \"metadata\",\n                    \"--purl\": [\n                        \"pkg:openssl/openssl@3.0.6\",\n                        \"pkg:nginx/nginx@0.8.9\",\n                        \"pkg:gnu/glibc@2.38\"\n                    ],\n                    \"--file\": null,\n                    \"--output\": \"\u003cpath/to/output.json\u003e\"\n                },\n                \"errors\": [],\n                \"warnings\": [\n                    \"'check_existence' is not supported for 'pkg:openssl/openssl@3.0.6'\",\n                    \"'pkg:nginx/nginx@0.8.9' not supported with `metadata` command\",\n                    \"'check_existence' is not supported for 'pkg:gnu/glibc@2.38'\"\n                ]\n            }\n        ],\n        \"packages\": [\n            {\n                \"purl\": \"pkg:openssl/openssl@3.0.6\",\n                \"type\": \"openssl\",\n                \"namespace\": null,\n                \"name\": \"openssl\",\n                \"version\": \"3.0.6\",\n                \"qualifiers\": {},\n                \"subpath\": null,\n                \"primary_language\": \"C\",\n                \"description\": null,\n                \"release_date\": \"2022-10-11T12:39:09\",\n                \"parties\": [],\n                \"keywords\": [],\n                \"homepage_url\": \"https://www.openssl.org\",\n                \"download_url\": \"https://github.com/openssl/openssl/archive/refs/tags/openssl-3.0.6.tar.gz\",\n                \"api_url\": \"https://api.github.com/repos/openssl/openssl\",\n                \"size\": null,\n                \"sha1\": null,\n                \"md5\": null,\n                \"sha256\": null,\n                \"sha512\": null,\n                \"bug_tracking_url\": \"https://github.com/openssl/openssl/issues\",\n                \"code_view_url\": \"https://github.com/openssl/openssl\",\n                \"vcs_url\": \"git://github.com/openssl/openssl.git\",\n                \"copyright\": null,\n                \"license_expression\": null,\n                \"declared_license\": \"Apache-2.0\",\n                \"notice_text\": null,\n                \"root_path\": null,\n                \"dependencies\": [],\n                \"contains_source_code\": null,\n                \"source_packages\": [],\n                \"repository_homepage_url\": null,\n                \"repository_download_url\": null,\n                \"api_data_url\": null\n            },\n            {\n                \"purl\": \"pkg:gnu/glibc@2.38\",\n                \"type\": \"gnu\",\n                \"namespace\": null,\n                \"name\": \"glibc\",\n                \"version\": \"2.38\",\n                \"qualifiers\": {},\n                \"subpath\": null,\n                \"primary_language\": null,\n                \"description\": null,\n                \"release_date\": \"2023-07-31T17:34:00\",\n                \"parties\": [],\n                \"keywords\": [],\n                \"homepage_url\": \"https://ftp.gnu.org/pub/gnu/glibc/\",\n                \"download_url\": \"https://ftp.gnu.org/pub/gnu/glibc/glibc-2.38.tar.gz\",\n                \"api_url\": null,\n                \"size\": null,\n                \"sha1\": null,\n                \"md5\": null,\n                \"sha256\": null,\n                \"sha512\": null,\n                \"bug_tracking_url\": null,\n                \"code_view_url\": null,\n                \"vcs_url\": null,\n                \"copyright\": null,\n                \"license_expression\": null,\n                \"declared_license\": null,\n                \"notice_text\": null,\n                \"root_path\": null,\n                \"dependencies\": [],\n                \"contains_source_code\": null,\n                \"source_packages\": [],\n                \"repository_homepage_url\": null,\n                \"repository_download_url\": null,\n                \"api_data_url\": null\n            }\n        ]\n    }\n\n\nDetails\n#######\n\n``metadata`` calls ``info()`` from `fetchcode/package.py`.\n\nThe intended output for each PURL type supported by the ``metadata`` command is:\n\n- an input PURL with a version: output the metadata for the input version\n- an input PURL without a version: output a list of the metadata for all versions\n\n\n----\n\n\n``urls``: collect package URLs for a PURL\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis command collects and return the known URL for a PURL. It does so by based\non package type/ecosystem conventions. It optionally also checks if the inferred\nURLs exists on the web.\n\nExamples\n########\n\n**Submit multiple PURLs using the command line:**\n\n.. code-block:: console\n\n    purlcli urls --purl pkg:npm/canonical-path@1.0.0 --purl pkg:nginx/nginx@0.8.9 --purl pkg:rubygems/rails@7.0.0 --output \u003cpath/to/output.json\u003e\n\n*Sample output:*\n\n.. code-block:: json\n\n    {\n        \"headers\": [\n            {\n                \"tool_name\": \"purlcli\",\n                \"tool_version\": \"0.2.0\",\n                \"options\": {\n                    \"command\": \"urls\",\n                    \"--purl\": [\n                        \"pkg:npm/canonical-path@1.0.0\",\n                        \"pkg:nginx/nginx@0.8.9\",\n                        \"pkg:rubygems/rails@7.0.0\"\n                    ],\n                    \"--file\": null,\n                    \"--output\": \"\u003cpath/to/output.json\u003e\"\n                },\n                \"errors\": [],\n                \"warnings\": [\n                    \"'pkg:nginx/nginx@0.8.9' not supported with `urls` command\",\n                    \"'check_existence' is not supported for 'pkg:rubygems/rails@7.0.0'\"\n                ]\n            }\n        ],\n        \"packages\": [\n            {\n                \"purl\": \"pkg:npm/canonical-path@1.0.0\",\n                \"download_url\": \"http://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz\",\n                \"inferred_urls\": [\n                    \"https://www.npmjs.com/package/canonical-path/v/1.0.0\",\n                    \"http://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz\"\n                ],\n                \"repository_download_url\": null,\n                \"repository_homepage_url\": \"https://www.npmjs.com/package/canonical-path/v/1.0.0\"\n            },\n            {\n                \"purl\": \"pkg:rubygems/rails@7.0.0\",\n                \"download_url\": \"https://rubygems.org/downloads/rails-7.0.0.gem\",\n                \"inferred_urls\": [\n                    \"https://rubygems.org/gems/rails/versions/7.0.0\",\n                    \"https://rubygems.org/downloads/rails-7.0.0.gem\"\n                ],\n                \"repository_download_url\": null,\n                \"repository_homepage_url\": \"https://rubygems.org/gems/rails/versions/7.0.0\"\n            }\n        ]\n    }\n\n\n**Include head and get requests:**\n\n``--head``\n\n.. code-block:: console\n\n    purlcli urls --purl pkg:npm/canonical-path@1.0.0 --purl pkg:nginx/nginx@0.8.9 --purl pkg:rubygems/rails@7.0.0 --output \u003cpath/to/output.json\u003e --head\n\n*Sample output:*\n\n.. code-block:: json\n\n    {\n        \"headers\": [\n            {\n                \"tool_name\": \"purlcli\",\n                \"tool_version\": \"0.2.0\",\n                \"options\": {\n                    \"command\": \"urls\",\n                    \"--purl\": [\n                        \"pkg:npm/canonical-path@1.0.0\",\n                        \"pkg:nginx/nginx@0.8.9\",\n                        \"pkg:rubygems/rails@7.0.0\"\n                    ],\n                    \"--file\": null,\n                    \"--head\": true,\n                    \"--output\": \"\u003cstdout\u003e\"\n                },\n                \"errors\": [],\n                \"warnings\": [\n                    \"'pkg:nginx/nginx@0.8.9' not supported with `urls` command\",\n                    \"'check_existence' is not supported for 'pkg:rubygems/rails@7.0.0'\"\n                ]\n            }\n        ],\n        \"packages\": [\n            {\n                \"purl\": \"pkg:npm/canonical-path@1.0.0\",\n                \"download_url\": {\n                    \"url\": \"http://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz\",\n                    \"get_request_status_code\": 200,\n                    \"head_request_status_code\": 301\n                },\n                \"inferred_urls\": [\n                    {\n                        \"url\": \"https://www.npmjs.com/package/canonical-path/v/1.0.0\",\n                        \"get_request_status_code\": 200,\n                        \"head_request_status_code\": 200\n                    },\n                    {\n                        \"url\": \"http://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz\",\n                        \"get_request_status_code\": 200,\n                        \"head_request_status_code\": 301\n                    }\n                ],\n                \"repository_download_url\": {\n                    \"url\": null,\n                    \"get_request_status_code\": \"N/A\",\n                    \"head_request_status_code\": \"N/A\"\n                },\n                \"repository_homepage_url\": {\n                    \"url\": \"https://www.npmjs.com/package/canonical-path/v/1.0.0\",\n                    \"get_request_status_code\": 200,\n                    \"head_request_status_code\": 200\n                }\n            },\n            {\n                \"purl\": \"pkg:rubygems/rails@7.0.0\",\n                \"download_url\": {\n                    \"url\": \"https://rubygems.org/downloads/rails-7.0.0.gem\",\n                    \"get_request_status_code\": 200,\n                    \"head_request_status_code\": 200\n                },\n                \"inferred_urls\": [\n                    {\n                        \"url\": \"https://rubygems.org/gems/rails/versions/7.0.0\",\n                        \"get_request_status_code\": 200,\n                        \"head_request_status_code\": 200\n                    },\n                    {\n                        \"url\": \"https://rubygems.org/downloads/rails-7.0.0.gem\",\n                        \"get_request_status_code\": 200,\n                        \"head_request_status_code\": 200\n                    }\n                ],\n                \"repository_download_url\": {\n                    \"url\": null,\n                    \"get_request_status_code\": \"N/A\",\n                    \"head_request_status_code\": \"N/A\"\n                },\n                \"repository_homepage_url\": {\n                    \"url\": \"https://rubygems.org/gems/rails/versions/7.0.0\",\n                    \"get_request_status_code\": 200,\n                    \"head_request_status_code\": 200\n                }\n            }\n        ]\n    }\n\n\n\n\n``d2d``: Run a deployed code to development code analysis\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis command runs deploy-to-devel aka. \"back2source\" analysis between packages.\n\nIts behavior depends on the number of --purl options and their values.\n\n- With a single PURL, run the deploy-to-devel between all the PURLs of the set of PURLs  that\n  this PURL belongs to.\n\n- With two PURLs, run the deploy-to-devel between these two PURLs. The first is the \"from\" PURL,\n  and the second is the \"to\" PURL. The first or \"from\" PURL is typically the source code or version\n  control checkout. The second or \"to\" PURL is the target of a build or transformnation such as a\n  binary, or a source archive.\n\n- You can also provide two HTTP URLs instead of PURLs and  use these as direct download URLs.\n\nThis command waits for the run to complete and save results to the `output` FILE.\n\n\n\nExamples\n########\n\n**Run a d2d analysis between two Java JARs (source and binary)**\n\nYou first need to install and run matchcode locally so you have the endpoint accessible. Starting\nfrom a https://github.com/aboutcode-org/purldb/ clone::\n\n    git clone https://github.com/aboutcode-org/purldb\n    cd purldb\n    make dev\n    make envfile\n    SECRET_KEY=\"1\" make postgres_matchcodeio\n    SECRET_KEY=\"1\" make run_matchcodeio\n\nThen in another shell::\n\n    cd purldb\n    source venv/bin/activate\n\nFinally run the command:\n\n.. code-block:: console\n\n    purlcli d2d \\\n        --purl\n        https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/4.0.0-incubating/htrace-core-4.0.0-incubating-sources.jar\n        \\ --purl\n        https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/4.0.0-incubating/htrace-core-4.0.0-incubating.jar\n        \\ --matchcode-api-url http://127.0.0.1:8002/api/\n\n*Sample output:*\n\nHere you can see that there are over 730 resources that require review and that\nmay be present in the binary and not present in the sources.\n\n.. code-block:: json\n\n    {\n        \"url\": \"http://127.0.0.1:8002/api/d2d/5d9dbcca-48f0-4788-a356-29196f785c52/\",\n        \"uuid\": \"5d9dbcca-48f0-4788-a356-29196f785c52\",\n        \"created_date\": \"2024-06-04T16:31:24.879808Z\",\n        \"input_sources\": [\n            {\n                \"uuid\": \"6b459edd-6b8b-473a-add7-cc79152b4d5e\",\n                \"filename\": \"htrace-core-4.0.0-incubating-sources.jar\",\n                \"download_url\": \"https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/4.0.0-incubating/htrace-core-4.0.0-incubating-sources.jar#from\",\n                \"is_uploaded\": false,\n                \"tag\": \"from\",\n                \"size\": 42766,\n                \"is_file\": true,\n                \"exists\": true\n            },\n            {\n                \"uuid\": \"bb811a08-ea8c-46b4-8720-865f068ecc0d\",\n                \"filename\": \"htrace-core-4.0.0-incubating.jar\",\n                \"download_url\": \"https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/4.0.0-incubating/htrace-core-4.0.0-incubating.jar#to\",\n                \"is_uploaded\": false,\n                \"tag\": \"to\",\n                \"size\": 1485031,\n                \"is_file\": true,\n                \"exists\": true\n            }\n        ],\n        \"runs\": [\n            \"8689ba05-3859-4eab-b2cf-9bec1495629f\"\n        ],\n        \"resource_count\": 849,\n        \"package_count\": 1,\n        \"dependency_count\": 0,\n        \"relation_count\": 37,\n        \"codebase_resources_summary\": {\n            \"ignored-directory\": 56,\n            \"mapped\": 37,\n            \"not-deployed\": 1,\n            \"requires-review\": 730,\n            \"scanned\": 25\n        },\n        \"discovered_packages_summary\": {\n            \"total\": 1,\n            \"with_missing_resources\": 0,\n            \"with_modified_resources\": 0\n        },\n        \"discovered_dependencies_summary\": {\n            \"total\": 0,\n            \"is_runtime\": 0,\n            \"is_optional\": 0,\n            \"is_pinned\": 0\n        },\n        \"codebase_relations_summary\": {\n            \"java_to_class\": 34,\n            \"sha1\": 3\n        },\n        \"codebase_resources_discrepancies\": {\n            \"total\": 730\n        }\n    }\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 AND CC-BY-SA-4.0\n\npurldb software is licensed under the Apache License version 2.0.\n\npurldb data is licensed collectively under CC-BY-SA-4.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/aboutcode-org/purldb for support or download.\n\nSee https://aboutcode.org for more information about nexB OSS projects.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faboutcode-org%2Fpurldb-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faboutcode-org%2Fpurldb-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faboutcode-org%2Fpurldb-toolkit/lists"}