From 60cda23970acf033618d6a91b94a01fa32d3df8b Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Mon, 29 Aug 2022 16:35:15 +0200 Subject: [PATCH] Mock quay.io API calls, pass `install=False` to not pull docker images --- lib/galaxy/tool_util/deps/mulled/util.py | 33 +++++++++++-------- .../tool_util/test_container_resolution.py | 7 ++-- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/galaxy/tool_util/deps/mulled/util.py b/lib/galaxy/tool_util/deps/mulled/util.py index dfe52e2d277..043dc4ee245 100644 --- a/lib/galaxy/tool_util/deps/mulled/util.py +++ b/lib/galaxy/tool_util/deps/mulled/util.py @@ -59,6 +59,24 @@ def quay_repository(namespace, pkg_name, session=None): return data +def _get_namespace(namespace): + next_page = None + repo_names = [] + repos_headers = {"Accept-encoding": "gzip", "Accept": "application/json"} + while True: + repos_parameters = {"public": "true", "namespace": namespace, "next_page": next_page} + repos_response = requests.get( + QUAY_REPOSITORY_API_ENDPOINT, headers=repos_headers, params=repos_parameters, timeout=MULLED_SOCKET_TIMEOUT + ) + repos_response_json = repos_response.json() + repos = repos_response_json["repositories"] + repo_names += [r["name"] for r in repos] + next_page = repos_response_json.get("next_page") + if not next_page: + break + return repo_names + + def _namespace_has_repo_name(namespace, repo_name, resolution_cache): """ Get all quay containers in the biocontainers repo @@ -74,20 +92,7 @@ def _namespace_has_repo_name(namespace, repo_name, resolution_cache): except KeyError: # mulled_resolution_cache may be beaker CacheManager instance, which raises KeyError if key is not present on `.get` pass - next_page = None - repo_names = [] - repos_headers = {"Accept-encoding": "gzip", "Accept": "application/json"} - while True: - repos_parameters = {"public": "true", "namespace": namespace, "next_page": next_page} - repos_response = requests.get( - QUAY_REPOSITORY_API_ENDPOINT, headers=repos_headers, params=repos_parameters, timeout=MULLED_SOCKET_TIMEOUT - ) - repos_response_json = repos_response.json() - repos = repos_response_json["repositories"] - repo_names += [r["name"] for r in repos] - next_page = repos_response_json.get("next_page") - if not next_page: - break + repo_names = _get_namespace(namespace) if resolution_cache is not None: resolution_cache[cache_key] = repo_names return repo_name in repo_names diff --git a/test/unit/tool_util/test_container_resolution.py b/test/unit/tool_util/test_container_resolution.py index c9616c4b951..0c0c1da7189 100644 --- a/test/unit/tool_util/test_container_resolution.py +++ b/test/unit/tool_util/test_container_resolution.py @@ -29,10 +29,13 @@ def container_registry(): return ContainerRegistry(app_info) -def test_container_registry(container_registry): +def test_container_registry(container_registry, mocker): + mocker.patch('galaxy.tool_util.deps.mulled.util._get_namespace', return_value=["samtools"]) tool_info = ToolInfo(requirements=[ToolRequirement(name="samtools", version="1.10", type="package")]) container_description = container_registry.find_best_container_description( - [DOCKER_CONTAINER_TYPE], tool_info + [DOCKER_CONTAINER_TYPE], + tool_info, + install=False, ) assert container_description.type == "docker" assert "samtools:1.10" in container_description.identifier