13
13
14
14
from packageurl import PackageURL
15
15
16
- from _packagedcode import models
17
16
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
18
21
from python_inspector import utils_pypi
19
22
from python_inspector .resolution import get_python_version_from_env_tag
20
23
from python_inspector .utils_pypi import Environment
21
24
from python_inspector .utils_pypi import PypiSimpleRepository
22
25
23
26
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
-
79
27
def get_pypi_data_from_purl (
80
28
purl : str , environment : Environment , repos : List [PypiSimpleRepository ]
81
29
) -> PackageData :
82
30
"""
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
84
36
"""
85
37
purl = PackageURL .from_string (purl )
86
38
name = purl .name
@@ -96,7 +48,6 @@ def get_pypi_data_from_purl(
96
48
return []
97
49
info = response .get ("info" ) or {}
98
50
homepage_url = info .get ("home_page" )
99
- license = info .get ("license" )
100
51
project_urls = info .get ("project_urls" ) or {}
101
52
code_view_url = get_pypi_codeview_url (project_urls )
102
53
bug_tracking_url = get_pypi_bugtracker_url (project_urls )
@@ -125,33 +76,82 @@ def get_pypi_data_from_purl(
125
76
if dist_url not in valid_distribution_urls :
126
77
continue
127
78
digests = url .get ("digests" ) or {}
79
+
128
80
yield PackageData (
129
81
primary_language = "Python" ,
130
- description = info . get ( "description" ),
82
+ description = get_description ( info ),
131
83
homepage_url = homepage_url ,
132
84
api_data_url = api_url ,
133
85
bug_tracking_url = bug_tracking_url ,
134
86
code_view_url = code_view_url ,
135
- declared_license = license ,
87
+ declared_license = get_declared_license ( info ) ,
136
88
download_url = dist_url ,
137
89
size = url .get ("size" ),
138
90
md5 = digests .get ("md5" ) or url .get ("md5_digest" ),
139
91
sha256 = digests .get ("sha256" ),
140
92
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
+ ),
156
101
** 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