|
14 | 14 | # CONDITIONS OF ANY KIND, either express or implied. See the License for the |
15 | 15 | # specific language governing permissions and limitations under the License. |
16 | 16 |
|
17 | | -from attr import attrs, attrib |
18 | | - |
19 | | -from packageurl.contrib.route import NoRouteAvailable |
| 17 | +import requests |
20 | 18 | from packageurl import PackageURL |
| 19 | +from packageurl.contrib.route import NoRouteAvailable |
21 | 20 | from packageurl.contrib.route import Router |
22 | | -import requests |
23 | 21 |
|
24 | 22 | from fetchcode.packagedcode_models import Package |
25 | 23 |
|
@@ -169,7 +167,7 @@ def get_npm_data_from_purl(purl): |
169 | 167 | @router.route("pkg:pypi/.*") |
170 | 168 | def get_pypi_data_from_purl(purl): |
171 | 169 | """ |
172 | | - Generate `Package` object from the `purl` string of npm type |
| 170 | + Generate `Package` object from the `purl` string of pypi type |
173 | 171 | """ |
174 | 172 | purl = PackageURL.from_string(purl) |
175 | 173 | name = purl.name |
@@ -312,18 +310,47 @@ def get_rubygems_data_from_purl(purl): |
312 | 310 | purl = PackageURL.from_string(purl) |
313 | 311 | name = purl.name |
314 | 312 | api_url = f"https://rubygems.org/api/v1/gems/{name}.json" |
| 313 | + releases_url = f"https://rubygems.org/api/v1/versions/{name}.json" |
315 | 314 | response = get_response(api_url) |
| 315 | + releases = get_response(releases_url) |
316 | 316 | declared_license = response.get("licenses") or None |
| 317 | + version = response.get("version") |
| 318 | + version_purl = PackageURL( |
| 319 | + type=purl.type, name=name, version=version |
| 320 | + ) |
317 | 321 | homepage_url = response.get("homepage_uri") |
318 | 322 | code_view_url = response.get("source_code_uri") |
319 | 323 | bug_tracking_url = response.get("bug_tracker_uri") |
320 | 324 | download_url = response.get("gem_uri") |
| 325 | + release_date = response.get("version_created_at") |
321 | 326 | yield Package( |
322 | 327 | homepage_url=homepage_url, |
323 | 328 | api_url=api_url, |
324 | 329 | bug_tracking_url=bug_tracking_url, |
325 | 330 | code_view_url=code_view_url, |
326 | 331 | declared_license=declared_license, |
327 | 332 | download_url=download_url, |
328 | | - **purl.to_dict(), |
| 333 | + release_date=release_date, |
| 334 | + **version_purl.to_dict() |
329 | 335 | ) |
| 336 | + for release in releases: |
| 337 | + version = release.get("number") |
| 338 | + release_date = release.get("created_at") |
| 339 | + platform = release.get("platform") or "" |
| 340 | + if platform: |
| 341 | + download_url = f"https://rubygems.org/gems/{name}-{version}-{platform}.gem" |
| 342 | + else: |
| 343 | + download_url = f"https://rubygems.org/gems/{name}-{version}.gem" |
| 344 | + version_purl = PackageURL( |
| 345 | + type=purl.type, name=name, version=version |
| 346 | + ) |
| 347 | + yield Package( |
| 348 | + homepage_url=homepage_url, |
| 349 | + api_url=api_url, |
| 350 | + bug_tracking_url=bug_tracking_url, |
| 351 | + code_view_url=code_view_url, |
| 352 | + declared_license=declared_license, |
| 353 | + download_url=download_url, |
| 354 | + release_date=release_date, |
| 355 | + **version_purl.to_dict() |
| 356 | + ) |
0 commit comments