mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #7167 from mvdbeek/verify_tool_improvements
Remote tool testing enhancements
This commit is contained in:
@@ -12,6 +12,7 @@ from collections import OrderedDict
|
||||
from json import dumps
|
||||
from logging import getLogger
|
||||
|
||||
from packaging.version import parse as parse_version, Version
|
||||
try:
|
||||
from nose.tools import nottest
|
||||
except ImportError:
|
||||
@@ -98,9 +99,20 @@ class GalaxyInteractorApi(object):
|
||||
if kwds.get('user_api_key_is_admin_key', False):
|
||||
self.master_api_key = self.api_key
|
||||
self.keep_outputs_dir = kwds["keep_outputs_dir"]
|
||||
self._target_galaxy_version = None
|
||||
|
||||
self.uploads = {}
|
||||
|
||||
@property
|
||||
def target_galaxy_version(self):
|
||||
if self._target_galaxy_version is None:
|
||||
self._target_galaxy_version = parse_version(self._get('version').json()['version_major'])
|
||||
return self._target_galaxy_version
|
||||
|
||||
@property
|
||||
def supports_test_data_download(self):
|
||||
return self.target_galaxy_version >= Version("19.01")
|
||||
|
||||
def __get_user_key(self, user_key, admin_key, test_user=None):
|
||||
if not test_user:
|
||||
test_user = "test@bx.psu.edu"
|
||||
@@ -259,16 +271,29 @@ class GalaxyInteractorApi(object):
|
||||
|
||||
@nottest
|
||||
def test_data_download(self, tool_id, filename, mode='file'):
|
||||
response = self._get("tools/%s/test_data_download?filename=%s" % (tool_id, filename), admin=True)
|
||||
assert response.status_code == 200
|
||||
if mode == 'file':
|
||||
return response.content
|
||||
elif mode == 'directory':
|
||||
prefix = os.path.basename(filename)
|
||||
path = tempfile.mkdtemp(prefix=prefix)
|
||||
with tarfile.open(fileobj=BytesIO(response.content)) as tar_contents:
|
||||
tar_contents.extractall(path=path)
|
||||
return path
|
||||
if self.supports_test_data_download:
|
||||
response = self._get("tools/%s/test_data_download?filename=%s" % (tool_id, filename), admin=True)
|
||||
assert response.status_code == 200
|
||||
if mode == 'file':
|
||||
return response.content
|
||||
elif mode == 'directory':
|
||||
prefix = os.path.basename(filename)
|
||||
path = tempfile.mkdtemp(prefix=prefix)
|
||||
with tarfile.open(fileobj=BytesIO(response.content)) as tar_contents:
|
||||
tar_contents.extractall(path=path)
|
||||
return path
|
||||
else:
|
||||
# We can only use local data
|
||||
response = self._get("tools/%s/test_data_path?filename=%s" % (tool_id, filename), admin=True)
|
||||
assert response.status_code == 200
|
||||
file_name = response.json()
|
||||
if mode == 'file':
|
||||
return open(file_name, mode='rb')
|
||||
elif mode == 'directory':
|
||||
# Make a copy, since we are going to clean up the returned path
|
||||
path = tempfile.mkdtemp()
|
||||
shutil.copytree(file_name, path)
|
||||
return path
|
||||
|
||||
def __output_id(self, output_data):
|
||||
# Allow data structure coming out of tools API - {id: <id>, output_name: <name>, etc...}
|
||||
@@ -677,7 +702,7 @@ def _verify_extra_files_content(extra_files, hda_id, dataset_fetcher, test_data_
|
||||
shutil.rmtree(path)
|
||||
|
||||
|
||||
def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_job_data=None, test_index=0, tool_version=None, quiet=False):
|
||||
def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_job_data=None, test_index=0, tool_version=None, quiet=False, test_history=None):
|
||||
if resource_parameters is None:
|
||||
resource_parameters = {}
|
||||
tool_test_dicts = galaxy_interactor.get_tool_tests(tool_id, tool_version=tool_version)
|
||||
@@ -686,7 +711,8 @@ def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_j
|
||||
|
||||
_handle_def_errors(testdef)
|
||||
|
||||
test_history = galaxy_interactor.new_history()
|
||||
if test_history is None:
|
||||
test_history = galaxy_interactor.new_history()
|
||||
|
||||
stage_data_in_history(galaxy_interactor, tool_id, testdef.test_data(), test_history)
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# Test galaxy interactor
|
||||
|
||||
from packaging.version import Version
|
||||
|
||||
from base import api # noqa: I100,I202
|
||||
|
||||
|
||||
class GalaxyInteractorBackwardCompatTestCase(api.ApiTestCase):
|
||||
|
||||
def test_local_test_data_download(self):
|
||||
self.galaxy_interactor._target_galaxy_version = Version("18.09")
|
||||
assert self.galaxy_interactor.supports_test_data_download is False
|
||||
assert self.galaxy_interactor.test_data_download(tool_id='cat1', filename='1.bed').readline().startswith('chr1\t147962192\t147962580')
|
||||
Reference in New Issue
Block a user