|
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