>>> from fetchcode import package
>>> list(package.info('pkg:rubygems/file'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fetchcode/src/fetchcode/package.py", line 315, in get_rubygems_data_from_purl
response = get_response(api_url)
File "fetchcode/src/fetchcode/package.py", line 47, in get_response
return resp.json()
File "fetchcode/tmp/lib/python3.6/site-packages/requests/models.py", line 910, in json
return complexjson.loads(self.text, **kwargs)
File ".pyenv/versions/3.6.10/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File ".pyenv/versions/3.6.10/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File ".pyenv/versions/3.6.10/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
This failure is cryptic and it does not tell anything that can help me fix it...
In contrast if I update the code this way:
@router.route("pkg:rubygems/.*")
def get_rubygems_data_from_purl(purl):
"""
Generate `Package` object from the `purl` string of rubygems type.
"""
purl = PackageURL.from_string(purl)
name = purl.name
api_url = f"https://rubygems.org/api/v1/gems/{name}.json"
try:
response = get_response(api_url)
except Exception as e:
raise Exception(f'Failed to fetch: {api_url}') from e
declared_license = response.get("licenses") or None
homepage_url = response.get("homepage_uri")
code_view_url = response.get("source_code_uri")
bug_tracking_url = response.get("bug_tracker_uri")
download_url = response.get("gem_uri")
yield Package(
homepage_url=homepage_url,
api_url=api_url,
bug_tracking_url=bug_tracking_url,
code_view_url=code_view_url,
declared_license=declared_license,
download_url=download_url,
**purl.to_dict(),
)
>>> from fetchcode import package
>>> list(package.info('pkg:rubygems/file'))
Traceback (most recent call last):
File "fetchcode/src/fetchcode/package.py", line 316, in get_rubygems_data_from_purl
response = get_response(api_url)
File "fetchcode/src/fetchcode/package.py", line 47, in get_response
return resp.json()
File "fetchcode/tmp/lib/python3.6/site-packages/requests/models.py", line 910, in json
return complexjson.loads(self.text, **kwargs)
File ".pyenv/versions/3.6.10/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File ".pyenv/versions/3.6.10/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File ".pyenv/versions/3.6.10/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "fetchcode/src/fetchcode/package.py", line 318, in get_rubygems_data_from_purl
raise Exception(f'Failed to fetch: {api_url}') from e
Exception: Failed to fetch: https://rubygems.org/api/v1/gems/file.json