BUG: Improve Package from PurlDB failures
维护者通常 1 天内回复
@tdruez 已经在做这个了。
开始于 2025年5月5日。
评估
这个 Issue 还没有评估数据。
描述
Extracted from https://github.com/aboutcode-org/dejacode/issues/295#issuecomment-2824782627
Running "Improve Package from PurlDB" fails with duplicate key value violates unique constraint"component_catalog_packag_dataspace_id_type_namesp_c6620419_uniq"DETAIL:Key(dataspace_id,type,namespace,name,version,qualifiers,subpath,download_url,filename)=(3,npm,,parse-json,4.0.0,,,https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz,parse-json-4.0.0.tgz)alreadyexists. since assigning the download_url would make it a fully duplicate package.
Attempting to enhance the package in the product with data from PurlDB fails, because assigning the download URL would violate the uniqueness constraint that covers dataspace_id, type, namespace, name, version, qualifiers, subpath, download_url, and filename
This is a corner case where the data pulled from the PurlDB can trigger a "unique constraint" violation when applied to a package.
Context
PURL from a CycloneDX SBOM: pkg:npm/[email protected]
Note that in that data source context, no download_url is provided.
"There are multiple entries in the PurlDB for this Package." -> 4 results in the PurlDB for this PURL.
https://public.purldb.io/api/packages/?purl=pkg:npm/[email protected]
[
{
"uuid": "d1eb90f6-5115-49b8-a5f8-782e948cbd3d",
"filename": "parse-json-4.0.0.tgz",
"purl": "pkg:npm/[email protected]",
"type": "npm",
"name": "parse-json",
"version": "4.0.0",
"download_url": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"sha1": "be35f5425be1f7f6c747184f98a788cb99477ee0",
"package_content": null,
"package_sets": []
},
{
"uuid": "bd3c0519-50d6-47a9-b01a-d3241e0ef641",
"filename": null,
"package_sets": [],
"purl": "pkg:npm/[email protected]",
"type": "npm",
"namespace": "",
"name": "parse-json",
"version": "4.0.0",
"download_url": "https://registry.npmjs.com/parse-json/-/parse-json-4.0.0.tgz",
"sha1": "be35f5425be1f7f6c747184f98a788cb99477ee0",
"package_sets": []
},
{
"uuid": "0ff3a534-5570-4289-8560-6e46bb3bad4f",
"filename": "parse-json-4.0.0.tgz",
"purl": "pkg:npm/%40types/[email protected]",
"type": "npm",
"namespace": "@types",
"name": "parse-json",
"version": "4.0.0",
"download_url": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"package_content": null,
"package_sets": [
{
"uuid": "721da624-9d02-401f-82b6-46142449635d",
"packages": [
"https://public.purldb.io/api/packages/0ff3a534-5570-4289-8560-6e46bb3bad4f/",
"https://public.purldb.io/api/packages/ec74c5e3-676b-489a-a059-4176bdfe6ea8/"
]
}
]
},
{
"uuid": "680f4c25-68b3-4e21-8c16-6db2a822e752",
"filename": null,
"purl": "pkg:npm/%40types/[email protected]",
"type": "npm",
"namespace": "@types",
"name": "parse-json",
"version": "4.0.0",
"download_url": "https://registry.npmjs.com/@types/parse-json/-/parse-json-4.0.0.tgz",
"package_content": null,
"package_sets": [
{
"uuid": "c4608309-c909-4a86-bf75-c3363d50bf98",
"packages": [
"https://public.purldb.io/api/packages/680f4c25-68b3-4e21-8c16-6db2a822e752/",
"https://public.purldb.io/api/packages/ec74c5e3-676b-489a-a059-4176bdfe6ea8/"
]
}
],
}
]
- Since the provided purl has no namespace, ie:
pkg:npm/[email protected], the entries forpkg:npm/%40types/[email protected]should not be returned - The default ordering of the results should be by each PURL field. From
packageurl.contrib.django.models.PackageURLQuerySetMixin.order_by_package_url:
PACKAGE_URL_FIELDS = ("type", "namespace", "name", "version", "qualifiers", "subpath")
def order_by_package_url(self):
"""Order by Package URL fields."""
return self.order_by(*PACKAGE_URL_FIELDS)
- The 2 entries for
pkg:npm/[email protected]are the same, thesha1id equal, the only difference is the domain in thedownload_url:npmjs.orgvsnpmjs.com. The issue in the DejaCode context using the PurlDB is which one of those package should we use?
An approach could be to take the common fields values from the multiple entries. In this case, as the only know value on the DejaCode side ispkg:npm/[email protected], we could ignore the download_url and hash and import everything that is shared across the PurlDB records.
TODO (Fix) in DejaCode
-
The task should not break, any issues happening during the "Improve Packages from PurlDB" should be properly handled and logged during the
improve_packages_from_purldbtask. -
Using data pulled from PurlDB onto a package should not raise a unique constraint violation.
- 主要语言
- Python
- 星标
- 52
- 派生
- 30
- 平均合并
- 4 小时 57 分钟
- 30 天内合并 PR
- 21
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aboutcode-org/dejacode 的其他 Issue
-
DOC: Document workflow between ScanCode.io and DejaCode可能已有人在做 @tdruez 于 1 天前认领。 未关闭documentation
难度 3/5 1-2 天 新手友好度 55/100
aboutcode-org/dejacode#606 · 2 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 45/100
aboutcode-org/dejacode#603 ·
维护者通常 1 天内回复
-
design needed enhancement
难度 3/5 1-2 天 新手友好度 62/100
aboutcode-org/dejacode#561 · 3 条评论 ·
维护者通常 1 天内回复
-
Enhancement request: Refine License Category - Copyleft Limited可能重新可做 @hesa 于 119 天前认领,目前没有进行中的 PR。 未关闭design needed enhancement
aboutcode-org/dejacode#499 · 13 条评论 · 已指派 3 人 ·
维护者通常 1 天内回复
-
BUG: Product overview page splits product with many versions across pages可能重新可做 关联的 PR 已关闭且未合并。 未关闭bug design needed enhancement
难度 3/5 1-2 天 新手友好度 45/100
aboutcode-org/dejacode#460 ·
维护者通常 1 天内回复
查看 aboutcode-org/dejacode 的全部 Issue
相似的 Issue
-
bug
难度 1/5 1 小时以内 新手友好度 86/100
awslabs/visual-asset-management-system#937 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
-
follow-up
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 83/100
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 2 天内回复