Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.visualization.plugins.datasource_testing
import logging
from typing import (
Optional,
)
log = logging.getLogger(__name__)
def _check_uri_support(target_object, supported_protocols: list[str]) -> bool:
"""Test if the target object is deferred and has a supported protocol."""
if getattr(target_object, "state", None) != "deferred":
return True # not deferred, so no uri to check
if not supported_protocols:
return False # no protocols defined, means no support for deferred objects
if "*" in supported_protocols:
return True # wildcard support for all protocols
if deferred_source_uri := _deferred_source_uri(target_object):
protocol = deferred_source_uri.split("://")[0]
return protocol in supported_protocols
return False
def _deferred_source_uri(target_object) -> Optional[str]:
"""Get the source uri from a deferred object."""
sources = getattr(target_object, "sources", None)
if sources and sources[0]:
return sources[0].source_uri
return None
[docs]
def is_object_applicable(trans, target_object, data_source_tests):
"""
Run a visualization's data_source tests to find out if
it can be applied to the target_object.
"""
for test in data_source_tests:
test_attr = test["attr"]
test_type = test["type"]
test_result = test["result"]
supported_protocols = test.get("allow_uri_if_protocol", [])
if test_attr == "ext" and test_type == "eq":
if target_object.state in ["deferred", "ok"]:
test_result = trans.app.datatypes_registry.get_datatype_by_extension(test_result)
if isinstance(target_object.datatype, type(test_result)) and _check_uri_support(
target_object, supported_protocols
):
return True
return False