mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
160 lines
5.4 KiB
Python
160 lines
5.4 KiB
Python
import base64
|
|
from os import environ
|
|
|
|
import pytest
|
|
import yaml
|
|
|
|
from galaxy.workflow.trs_proxy import (
|
|
GA4GH_GALAXY_DESCRIPTOR,
|
|
parse_search_kwds,
|
|
TrsProxy,
|
|
)
|
|
|
|
# search test is very brittle (depends on production values) and is very slow.
|
|
# still good to know search is working though - even if manually
|
|
search_test = pytest.mark.skipif(
|
|
not environ.get("GALAXY_TEST_INCLUDE_DOCKSTORE_SEARCH"), reason="GALAXY_TEST_INCLUDE_DOCKSTORE_SEARCH not set"
|
|
)
|
|
|
|
|
|
def test_proxy():
|
|
proxy = TrsProxy()
|
|
server = proxy.get_server("dockstore")
|
|
|
|
assert "dockstore" == proxy.get_servers()[0]["id"]
|
|
|
|
assert proxy.get_servers()[0]["api_url"] == server._trs_url
|
|
|
|
tool_id = "#workflow/github.com/jmchilton/galaxy-workflow-dockstore-example-1/mycoolworkflow"
|
|
tool = server.get_tool(tool_id)
|
|
assert "description" in tool
|
|
|
|
b64_tool_id = base64.b64encode(tool_id.encode("UTF-8"))
|
|
tool = server.get_tool(b64_tool_id, tool_id_b64_encoded=True)
|
|
assert "description" in tool
|
|
|
|
versions = server.get_versions(tool_id)
|
|
assert isinstance(versions, list)
|
|
assert len(versions) >= 1
|
|
|
|
version_id = versions[0]["name"]
|
|
version = server.get_version(tool_id, version_id)
|
|
assert "descriptor_type" in version
|
|
assert GA4GH_GALAXY_DESCRIPTOR in version["descriptor_type"]
|
|
|
|
descriptor = server.get_version_descriptor(tool_id, version_id)
|
|
content = yaml.safe_load(descriptor)
|
|
assert "inputs" in content
|
|
|
|
|
|
def test_match_url():
|
|
proxy = TrsProxy()
|
|
valid_dockstore = proxy.match_url(
|
|
"https://dockstore.org/api/ga4gh/trs/v2/tools/"
|
|
"quay.io%2Fcollaboratory%2Fdockstore-tool-bedtools-genomecov/versions/0.3"
|
|
)
|
|
assert valid_dockstore
|
|
assert valid_dockstore["trs_base_url"] == "https://dockstore.org/api"
|
|
# Should unquote
|
|
assert valid_dockstore["tool_id"] == "quay.io/collaboratory/dockstore-tool-bedtools-genomecov"
|
|
assert valid_dockstore["version_id"] == "0.3"
|
|
|
|
valid_dockstore_unescaped = proxy.match_url(
|
|
"https://dockstore.org/api/ga4gh/trs/v2/tools/"
|
|
"#workflow/github.com/jmchilton/galaxy-workflow-dockstore-example-1/mycoolworkflow/versions/master"
|
|
)
|
|
assert valid_dockstore_unescaped
|
|
assert valid_dockstore_unescaped["trs_base_url"] == "https://dockstore.org/api"
|
|
assert (
|
|
valid_dockstore_unescaped["tool_id"]
|
|
== "#workflow/github.com/jmchilton/galaxy-workflow-dockstore-example-1/mycoolworkflow"
|
|
)
|
|
assert valid_dockstore_unescaped["version_id"] == "master"
|
|
|
|
valid_workflow_hub = proxy.match_url("https://workflowhub.eu/ga4gh/trs/v2/tools/344/versions/1")
|
|
assert valid_workflow_hub
|
|
assert valid_workflow_hub["trs_base_url"] == "https://workflowhub.eu"
|
|
assert valid_workflow_hub["tool_id"] == "344"
|
|
assert valid_workflow_hub["version_id"] == "1"
|
|
|
|
valid_arbitrary_trs = proxy.match_url(
|
|
"https://my-trs-server.golf/stuff/ga4gh/trs/v2/tools/hello-world/versions/version-1"
|
|
)
|
|
assert valid_arbitrary_trs
|
|
assert valid_arbitrary_trs["trs_base_url"] == "https://my-trs-server.golf/stuff"
|
|
assert valid_arbitrary_trs["tool_id"] == "hello-world"
|
|
assert valid_arbitrary_trs["version_id"] == "version-1"
|
|
|
|
ignore_extra = proxy.match_url(
|
|
"https://workflowhub.eu/ga4gh/trs/v2/tools/344/versions/1/CWL/descriptor/ro-crate-metadata.json"
|
|
)
|
|
assert ignore_extra
|
|
assert ignore_extra["trs_base_url"] == "https://workflowhub.eu"
|
|
assert ignore_extra["tool_id"] == "344"
|
|
assert ignore_extra["version_id"] == "1"
|
|
|
|
invalid = proxy.match_url("https://workflowhub.eu/workflows/1")
|
|
assert invalid is None
|
|
|
|
missing_version = proxy.match_url("https://workflowhub.eu/ga4gh/trs/v2/tools/344")
|
|
assert missing_version is None
|
|
|
|
blank = proxy.match_url("")
|
|
assert blank is None
|
|
|
|
not_url = proxy.match_url("1234")
|
|
assert not_url is None
|
|
|
|
|
|
def test_server_from_url():
|
|
proxy = TrsProxy()
|
|
server = proxy.server_from_url("https://workflowhub.eu")
|
|
|
|
assert "https://workflowhub.eu" == server._trs_url
|
|
|
|
tool_id = "138"
|
|
tool = server.get_tool(tool_id)
|
|
assert "description" in tool
|
|
|
|
b64_tool_id = base64.b64encode(tool_id.encode("UTF-8"))
|
|
tool = server.get_tool(b64_tool_id, tool_id_b64_encoded=True)
|
|
assert "description" in tool
|
|
|
|
versions = server.get_versions(tool_id)
|
|
assert isinstance(versions, list)
|
|
assert len(versions) >= 1
|
|
|
|
version_id = versions[0]["id"] # Dockstore and WorkflowHub differ here! Spec is not clear
|
|
version = server.get_version(tool_id, version_id)
|
|
assert "descriptor_type" in version
|
|
assert GA4GH_GALAXY_DESCRIPTOR in version["descriptor_type"]
|
|
|
|
descriptor = server.get_version_descriptor(tool_id, version_id)
|
|
content = yaml.safe_load(descriptor)
|
|
assert "steps" in content
|
|
|
|
|
|
@search_test
|
|
def test_search():
|
|
proxy = TrsProxy()
|
|
server = proxy.get_server("dockstore")
|
|
|
|
search_kwd = parse_search_kwds("documentation")
|
|
response = server.get_tools(**search_kwd)
|
|
assert len(response) == 1
|
|
|
|
search_kwd = parse_search_kwds("n:example")
|
|
response = server.get_tools(**search_kwd)
|
|
assert len(response) == 2
|
|
|
|
search_kwd = parse_search_kwds("organization:jmchilton")
|
|
response = server.get_tools(**search_kwd)
|
|
assert len(response) == 2
|
|
|
|
search_kwd = parse_search_kwds("organization:jmchiltonx")
|
|
response = server.get_tools(**search_kwd)
|
|
assert len(response) == 0
|
|
|
|
response = server.get_tools(descriptorType="GALAXY")
|
|
assert len(response) == 2
|