Skip to content

Commit ce50e60

Browse files
committed
Add support for conan
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 4127bc9 commit ce50e60

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/fetchcode/package_managers.py

+18-12
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from packageurl import PackageURL
2828
from packageurl.contrib.route import NoRouteAvailable
2929
from packageurl.contrib.route import Router
30+
import yaml
3031

3132
logger = logging.getLogger(__name__)
3233

@@ -61,7 +62,7 @@ def get_response(url, content_type="json", headers=None):
6162
Fetch ``url`` and return its content as ``content_type`` which is one of
6263
binary, text or json.
6364
"""
64-
assert content_type in ("binary", "text", "json")
65+
assert content_type in ("binary", "text", "json", "yaml")
6566

6667
try:
6768
resp = requests.get(url=url, headers=headers)
@@ -78,6 +79,10 @@ def get_response(url, content_type="json", headers=None):
7879
return resp.text
7980
elif content_type == "json":
8081
return resp.json()
82+
elif content_type == "yaml":
83+
content = resp.content.decode("utf-8")
84+
return yaml.safe_load(content)
85+
8186

8287

8388
def remove_debian_default_epoch(version):
@@ -294,17 +299,18 @@ def get_hex_versions_from_purl(purl):
294299
)
295300

296301

297-
# @router.route("pkg:conan/.*")
298-
# def get_conan_versions_from_purl(purl):
299-
# """
300-
# Fetch versions of ``conan`` packages from the Conan API
301-
# """
302-
# response = get_response(
303-
# url=f"https://conan.io/center/api/ui/details?name={pkg}&user=_&channel=_",
304-
# content_type="json",
305-
# )
306-
# for release in response["versions"]:
307-
# yield PackageVersion(value=release["version"])
302+
@router.route("pkg:conan/.*")
303+
def get_conan_versions_from_purl(purl):
304+
"""
305+
Fetch versions of ``conan`` packages from the Conan API
306+
"""
307+
purl = PackageURL.from_string(purl)
308+
response = get_response(
309+
url=f"https://raw.githubusercontent.com/conan-io/conan-center-index/master/recipes/{purl.name}/config.yml",
310+
content_type="yaml",
311+
)
312+
for version in response["versions"].keys():
313+
yield PackageVersion(value=version)
308314

309315
# @router.route("pkg:golang/.*")
310316
# def get_golang_versions_from_purl(purl):

0 commit comments

Comments
 (0)