Skip to content

Commit dc64255

Browse files
authored
Merge pull request #84 from nexB/metadata_issues
Adapt python-inspector output according to SCTK output
2 parents 1e7cf2b + a471aee commit dc64255

20 files changed

+11823
-4834
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ Changelog
22
=========
33

44

5+
v0.8.5
6+
------
7+
- Adapt python-inspector output according to SCTK output.
8+
9+
510
v0.8.4
611
------
712

src/python_inspector/package_data.py

Lines changed: 76 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -13,74 +13,26 @@
1313

1414
from packageurl import PackageURL
1515

16-
from _packagedcode import models
1716
from _packagedcode.models import PackageData
17+
from _packagedcode.pypi import get_declared_license
18+
from _packagedcode.pypi import get_description
19+
from _packagedcode.pypi import get_keywords
20+
from _packagedcode.pypi import get_parties
1821
from python_inspector import utils_pypi
1922
from python_inspector.resolution import get_python_version_from_env_tag
2023
from python_inspector.utils_pypi import Environment
2124
from python_inspector.utils_pypi import PypiSimpleRepository
2225

2326

24-
def get_pypi_bugtracker_url(project_urls):
25-
bug_tracking_url = project_urls.get("Tracker")
26-
if not (bug_tracking_url):
27-
bug_tracking_url = project_urls.get("Issue Tracker")
28-
if not (bug_tracking_url):
29-
bug_tracking_url = project_urls.get("Bug Tracker")
30-
return bug_tracking_url
31-
32-
33-
def get_pypi_codeview_url(project_urls):
34-
code_view_url = project_urls.get("Source")
35-
if not (code_view_url):
36-
code_view_url = project_urls.get("Code")
37-
if not (code_view_url):
38-
code_view_url = project_urls.get("Source Code")
39-
return code_view_url
40-
41-
42-
def get_wheel_download_urls(
43-
purl: PackageURL,
44-
repos: List[PypiSimpleRepository],
45-
environment: Environment,
46-
python_version: str,
47-
) -> List[str]:
48-
"""
49-
Return a list of download urls for the given purl.
50-
"""
51-
for repo in repos:
52-
for wheel in utils_pypi.get_supported_and_valid_wheels(
53-
repo=repo,
54-
name=purl.name,
55-
version=purl.version,
56-
environment=environment,
57-
python_version=python_version,
58-
):
59-
yield wheel.download_url
60-
61-
62-
def get_sdist_download_url(
63-
purl: PackageURL, repos: List[PypiSimpleRepository], python_version: str
64-
) -> str:
65-
"""
66-
Return a list of download urls for the given purl.
67-
"""
68-
for repo in repos:
69-
sdist = utils_pypi.get_valid_sdist(
70-
repo=repo,
71-
name=purl.name,
72-
version=purl.version,
73-
python_version=python_version,
74-
)
75-
if sdist:
76-
return sdist.download_url
77-
78-
7927
def get_pypi_data_from_purl(
8028
purl: str, environment: Environment, repos: List[PypiSimpleRepository]
8129
) -> PackageData:
8230
"""
83-
Generate `Package` object from the `purl` string of npm type
31+
Generate `Package` object from the `purl` string of pypi type
32+
33+
``purl`` is a package-url of pypi type
34+
``environment`` is a `Environment` object defaulting Python version 3.8 and linux OS
35+
``repos`` is a list of `PypiSimpleRepository` objects
8436
"""
8537
purl = PackageURL.from_string(purl)
8638
name = purl.name
@@ -96,7 +48,6 @@ def get_pypi_data_from_purl(
9648
return []
9749
info = response.get("info") or {}
9850
homepage_url = info.get("home_page")
99-
license = info.get("license")
10051
project_urls = info.get("project_urls") or {}
10152
code_view_url = get_pypi_codeview_url(project_urls)
10253
bug_tracking_url = get_pypi_bugtracker_url(project_urls)
@@ -125,33 +76,82 @@ def get_pypi_data_from_purl(
12576
if dist_url not in valid_distribution_urls:
12677
continue
12778
digests = url.get("digests") or {}
79+
12880
yield PackageData(
12981
primary_language="Python",
130-
description=info.get("description"),
82+
description=get_description(info),
13183
homepage_url=homepage_url,
13284
api_data_url=api_url,
13385
bug_tracking_url=bug_tracking_url,
13486
code_view_url=code_view_url,
135-
declared_license=license,
87+
declared_license=get_declared_license(info),
13688
download_url=dist_url,
13789
size=url.get("size"),
13890
md5=digests.get("md5") or url.get("md5_digest"),
13991
sha256=digests.get("sha256"),
14092
release_date=url.get("upload_time"),
141-
keywords=info.get("keywords") or [],
142-
parties=[
143-
models.Party(
144-
type=models.party_person,
145-
name=info.get("author"),
146-
role="author",
147-
email=info.get("author_email"),
148-
),
149-
models.Party(
150-
type=models.party_person,
151-
name=info.get("maintainer"),
152-
role="maintainer",
153-
email=info.get("maintainer_email"),
154-
),
155-
],
93+
keywords=get_keywords(info),
94+
parties=get_parties(
95+
info,
96+
author_key="author",
97+
author_email_key="author_email",
98+
maintainer_key="maintainer",
99+
maintainer_email_key="maintainer_email",
100+
),
156101
**purl.to_dict(),
157-
).to_dict()
102+
)
103+
104+
105+
def get_pypi_bugtracker_url(project_urls):
106+
bug_tracking_url = project_urls.get("Tracker")
107+
if not (bug_tracking_url):
108+
bug_tracking_url = project_urls.get("Issue Tracker")
109+
if not (bug_tracking_url):
110+
bug_tracking_url = project_urls.get("Bug Tracker")
111+
return bug_tracking_url
112+
113+
114+
def get_pypi_codeview_url(project_urls):
115+
code_view_url = project_urls.get("Source")
116+
if not (code_view_url):
117+
code_view_url = project_urls.get("Code")
118+
if not (code_view_url):
119+
code_view_url = project_urls.get("Source Code")
120+
return code_view_url
121+
122+
123+
def get_wheel_download_urls(
124+
purl: PackageURL,
125+
repos: List[PypiSimpleRepository],
126+
environment: Environment,
127+
python_version: str,
128+
) -> List[str]:
129+
"""
130+
Return a list of download urls for the given purl.
131+
"""
132+
for repo in repos:
133+
for wheel in utils_pypi.get_supported_and_valid_wheels(
134+
repo=repo,
135+
name=purl.name,
136+
version=purl.version,
137+
environment=environment,
138+
python_version=python_version,
139+
):
140+
yield wheel.download_url
141+
142+
143+
def get_sdist_download_url(
144+
purl: PackageURL, repos: List[PypiSimpleRepository], python_version: str
145+
) -> str:
146+
"""
147+
Return a list of download urls for the given purl.
148+
"""
149+
for repo in repos:
150+
sdist = utils_pypi.get_valid_sdist(
151+
repo=repo,
152+
name=purl.name,
153+
version=purl.version,
154+
python_version=python_version,
155+
)
156+
if sdist:
157+
return sdist.download_url

src/python_inspector/resolve_cli.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
TRACE = False
3838

39-
__version__ = "0.8.4"
39+
__version__ = "0.8.5"
4040

4141
DEFAULT_PYTHON_VERSION = "38"
4242
PYPI_SIMPLE_URL = "https://pypi.org/simple"
@@ -424,7 +424,12 @@ def resolve_dependencies(
424424

425425
for package in purls:
426426
packages.extend(
427-
list(get_pypi_data_from_purl(package, repos=repos, environment=environment)),
427+
[
428+
pkg.to_dict()
429+
for pkg in list(
430+
get_pypi_data_from_purl(package, repos=repos, environment=environment)
431+
)
432+
],
428433
)
429434

430435
output = dict(

tests/data/azure-devops.req-310-expected.json

Lines changed: 818 additions & 327 deletions
Large diffs are not rendered by default.

tests/data/azure-devops.req-38-expected.json

Lines changed: 818 additions & 327 deletions
Large diffs are not rendered by default.

tests/data/default-url-expected.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"headers": {
33
"tool_name": "python-inspector",
44
"tool_homepageurl": "https://github.com/nexB/python-inspector",
5-
"tool_version": "0.8.4",
5+
"tool_version": "0.8.5",
66
"options": [
77
"--specifier zipp==3.8.0",
88
"--index-url https://pypi.org/simple",

0 commit comments

Comments
 (0)