Skip to content

Commit 6b3f6e3

Browse files
committed
a. Added more data for getting rubygems data from purl, users can now get package data for different versions too.
b. Fixed 1 typo. Signed-off-by: Jay <jaykumar20march@gmail.com>
1 parent 849b990 commit 6b3f6e3

File tree

1 file changed

+33
-6
lines changed

1 file changed

+33
-6
lines changed

src/fetchcode/package.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
1515
# specific language governing permissions and limitations under the License.
1616

17-
from attr import attrs, attrib
18-
19-
from packageurl.contrib.route import NoRouteAvailable
17+
import requests
2018
from packageurl import PackageURL
19+
from packageurl.contrib.route import NoRouteAvailable
2120
from packageurl.contrib.route import Router
22-
import requests
2321

2422
from fetchcode.packagedcode_models import Package
2523

@@ -169,7 +167,7 @@ def get_npm_data_from_purl(purl):
169167
@router.route("pkg:pypi/.*")
170168
def get_pypi_data_from_purl(purl):
171169
"""
172-
Generate `Package` object from the `purl` string of npm type
170+
Generate `Package` object from the `purl` string of pypi type
173171
"""
174172
purl = PackageURL.from_string(purl)
175173
name = purl.name
@@ -312,18 +310,47 @@ def get_rubygems_data_from_purl(purl):
312310
purl = PackageURL.from_string(purl)
313311
name = purl.name
314312
api_url = f"https://rubygems.org/api/v1/gems/{name}.json"
313+
releases_url = f"https://rubygems.org/api/v1/versions/{name}.json"
315314
response = get_response(api_url)
315+
releases = get_response(releases_url)
316316
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+
)
317321
homepage_url = response.get("homepage_uri")
318322
code_view_url = response.get("source_code_uri")
319323
bug_tracking_url = response.get("bug_tracker_uri")
320324
download_url = response.get("gem_uri")
325+
release_date = response.get("version_created_at")
321326
yield Package(
322327
homepage_url=homepage_url,
323328
api_url=api_url,
324329
bug_tracking_url=bug_tracking_url,
325330
code_view_url=code_view_url,
326331
declared_license=declared_license,
327332
download_url=download_url,
328-
**purl.to_dict(),
333+
release_date=release_date,
334+
**version_purl.to_dict()
329335
)
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

Comments
 (0)