1313
1414from packageurl import PackageURL
1515
16- from _packagedcode import models
1716from _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
1821from python_inspector import utils_pypi
1922from python_inspector .resolution import get_python_version_from_env_tag
2023from python_inspector .utils_pypi import Environment
2124from 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-
7927def 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
0 commit comments