{"id":21927588,"url":"https://github.com/package-url/packageurl-python","last_synced_at":"2025-05-15T07:05:58.336Z","repository":{"id":40625922,"uuid":"110709667","full_name":"package-url/packageurl-python","owner":"package-url","description":"Python implementation of the package url spec.  This project is sponsored by NLnet project https://nlnet.nl/project/vulnerabilitydatabase/ , the Google Summer of Code, nexB and other generous sponsors.","archived":false,"fork":false,"pushed_at":"2025-04-09T15:31:24.000Z","size":16724,"stargazers_count":74,"open_issues_count":40,"forks_count":47,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-14T12:59:55.301Z","etag":null,"topics":["hacktoberfest","library","package-url","purl","python"],"latest_commit_sha":null,"homepage":"","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/package-url.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":null,"code_of_conduct":null,"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":"2017-11-14T15:40:59.000Z","updated_at":"2025-04-09T15:31:29.000Z","dependencies_parsed_at":"2024-01-08T21:43:31.990Z","dependency_job_id":"2c7e887d-7c1a-4de0-97fa-ac795ec5607c","html_url":"https://github.com/package-url/packageurl-python","commit_stats":{"total_commits":237,"total_committers":19,"mean_commits":"12.473684210526315","dds":0.6540084388185654,"last_synced_commit":"6f38e3e2f90be99d634cf72d0c0755c8c9e62084"},"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/package-url%2Fpackageurl-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/package-url%2Fpackageurl-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/package-url%2Fpackageurl-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/package-url%2Fpackageurl-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/package-url","download_url":"https://codeload.github.com/package-url/packageurl-python/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254292042,"owners_count":22046426,"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","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":["hacktoberfest","library","package-url","purl","python"],"created_at":"2024-11-28T22:16:30.246Z","updated_at":"2025-05-15T07:05:53.318Z","avatar_url":"https://github.com/package-url.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"=================\npackageurl-python\n=================\n\nPython library to parse and build \"purl\" aka. Package URLs.\nSee https://github.com/package-url/purl-spec for details.\n\nJoin the discussion at https://gitter.im/package-url/Lobby or enter a ticket for support.\n\nLicense: MIT\n\nTests and build status\n======================\n\n+----------------------+\n| **Tests and build**  |\n+======================+\n| |ci-tests|           |\n+----------------------+\n\nInstall\n=======\n::\n\n    pip install packageurl-python\n\nUsage\n=====\n::\n\n    \u003e\u003e\u003e from packageurl import PackageURL\n\n    \u003e\u003e\u003e purl = PackageURL.from_string(\"pkg:maven/org.apache.commons/io@1.3.4\")\n    \u003e\u003e\u003e print(purl.to_dict())\n    {'type': 'maven', 'namespace': 'org.apache.commons', 'name': 'io', 'version': '1.3.4', 'qualifiers': None, 'subpath': None}\n\n    \u003e\u003e\u003e print(purl.to_string())\n    pkg:maven/org.apache.commons/io@1.3.4\n\n    \u003e\u003e\u003e print(str(purl))\n    pkg:maven/org.apache.commons/io@1.3.4\n\n    \u003e\u003e\u003e print(repr(purl))\n    PackageURL(type='maven', namespace='org.apache.commons', name='io', version='1.3.4', qualifiers={}, subpath=None)\n\nUtilities\n=========\n\nDjango models\n^^^^^^^^^^^^^\n\n`packageurl.contrib.django.models.PackageURLMixin` is a Django abstract model mixin to\nuse Package URLs in Django.\n\nSQLAlchemy mixin\n^^^^^^^^^^^^^^^^\n\n`packageurl.contrib.sqlalchemy.mixin.PackageURLMixin` is a SQLAlchemy declarative mixin\nto use Package URLs in SQLAlchemy models.\n\nURL to PURL\n^^^^^^^^^^^\n\n`packageurl.contrib.url2purl.get_purl(url)` returns a Package URL inferred from an URL.\n\n::\n\n    \u003e\u003e\u003e from packageurl.contrib import url2purl\n    \u003e\u003e\u003e url2purl.get_purl(\"https://github.com/package-url/packageurl-python\")\n    PackageURL(type='github', namespace='package-url', name='packageurl-python', version=None, qualifiers={}, subpath=None)\n\nPURL to URL\n^^^^^^^^^^^\n\n- `packageurl.contrib.purl2url.get_repo_url(purl)` returns a repository URL inferred\n  from a Package URL.\n- `packageurl.contrib.purl2url.get_download_url(purl)` returns a download URL inferred\n  from a Package URL.\n- `packageurl.contrib.purl2url.get_inferred_urls(purl)` return all inferred URLs\n  (repository, download) from a Package URL.\n\n::\n\n    \u003e\u003e\u003e from packageurl.contrib import purl2url\n\n    \u003e\u003e\u003e purl2url.get_repo_url(\"pkg:gem/bundler@2.3.23\")\n    \"https://rubygems.org/gems/bundler/versions/2.3.23\"\n\n    \u003e\u003e\u003e purl2url.get_download_url(\"pkg:gem/bundler@2.3.23\")\n    \"https://rubygems.org/downloads/bundler-2.3.23.gem\"\n\n    \u003e\u003e\u003e purl2url.get_inferred_urls(\"pkg:gem/bundler@2.3.23\")\n    [\"https://rubygems.org/gems/bundler/versions/2.3.23\", \"https://rubygems.org/downloads/bundler-2.3.23.gem\"]\n\nRun tests\n=========\n\nInstall test dependencies::\n\n    python3 thirdparty/virtualenv.pyz --never-download --no-periodic-update .\n    bin/pip install -e .\"[test]\"\n\nRun tests::\n\n    bin/pytest tests\n\nMake a new release\n==================\n\n- Start a new release branch\n- Update the CHANGELOG.rst, AUTHORS.rst, and README.rst if needed\n- Bump version in setup.cfg\n- Run all tests\n- Install restview and validate that all .rst docs are correct\n- Commit and push this branch\n- Make a PR and merge once approved\n- Tag and push that tag. This triggers the pypi-release.yml workflow that takes care of\n  building the dist release files and upload those to pypi::\n\n    VERSION=v0.x.x\n    git tag -a $VERSION -m \"Tag $VERSION\"\n    git push origin $VERSION\n\n- Review the GitHub release created by the workflow at\n  https://github.com/package-url/packageurl-python/releases\n\n.. |ci-tests| image:: https://github.com/package-url/packageurl-python/actions/workflows/ci.yml/badge.svg?branch=main\n    :target: https://github.com/package-url/packageurl-python/actions/workflows/ci.yml\n    :alt: CI Tests and build status\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpackage-url%2Fpackageurl-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpackage-url%2Fpackageurl-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpackage-url%2Fpackageurl-python/lists"}