diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py
index 86759a4ab98..0120d44cc16 100644
--- a/lib/galaxy/jobs/__init__.py
+++ b/lib/galaxy/jobs/__init__.py
@@ -1654,7 +1654,7 @@ class JobWrapper(HasResourceParameters):
# Certain tools require tasks to be completed after job execution
# ( this used to be performed in the "exec_after_process" hook, but hooks are deprecated ).
param_dict = self.get_param_dict(job)
- self.tool.exec_after_process(self.app, inp_data, out_data, param_dict, job=job)
+ self.tool.exec_after_process(self.app, inp_data, out_data, param_dict, job=job, final_job_state=final_job_state)
# Call 'exec_after_process' hook
self.tool.call_hook('exec_after_process', self.app, inp_data=inp_data,
out_data=out_data, param_dict=param_dict,
diff --git a/lib/galaxy/tool_util/deps/docker_util.py b/lib/galaxy/tool_util/deps/docker_util.py
index e5ef9cb7587..12432c9bbba 100644
--- a/lib/galaxy/tool_util/deps/docker_util.py
+++ b/lib/galaxy/tool_util/deps/docker_util.py
@@ -225,6 +225,12 @@ def _docker_prefix(
def parse_port_text(port_text):
+ """
+
+ >>> slurm_ports = parse_port_text("8888/tcp -> 0.0.0.0:32769")
+ >>> slurm_ports[8888]['host']
+ '0.0.0.0'
+ """
ports = None
if port_text is not None:
ports = {}
diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py
index a333e07af2f..bb41de94bfe 100755
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -43,6 +43,7 @@ from galaxy.tool_util.loader import (
raw_tool_xml_tree,
template_macro_params
)
+from galaxy.tool_util.output_checker import DETECTED_JOB_STATE
from galaxy.tool_util.parser import (
get_tool_source,
get_tool_source_from_representation,
@@ -1750,7 +1751,7 @@ class Tool(Dictifiable):
def exec_before_job(self, app, inp_data, out_data, param_dict={}):
pass
- def exec_after_process(self, app, inp_data, out_data, param_dict, job=None):
+ def exec_after_process(self, app, inp_data, out_data, param_dict, job=None, **kwds):
pass
def job_failed(self, job_wrapper, message, exception=False):
@@ -2421,7 +2422,7 @@ class SetMetadataTool(Tool):
history.id, job.user, incoming={'input1': hda}, overwrite=False
)
- def exec_after_process(self, app, inp_data, out_data, param_dict, job=None):
+ def exec_after_process(self, app, inp_data, out_data, param_dict, job=None, **kwds):
working_directory = app.object_store.get_filename(
job, base_dir='job_work', dir_only=True, obj_dir=True
)
@@ -2505,17 +2506,13 @@ class DataManagerTool(OutputParameterJSONTool):
if self.data_manager_id is None:
self.data_manager_id = self.id
- def exec_after_process(self, app, inp_data, out_data, param_dict, job=None, **kwds):
+ def exec_after_process(self, app, inp_data, out_data, param_dict, job=None, final_job_state=None, **kwds):
assert self.allow_user_access(job.user), "You must be an admin to access this tool."
+ if final_job_state != DETECTED_JOB_STATE.OK:
+ return
# run original exec_after_process
super(DataManagerTool, self).exec_after_process(app, inp_data, out_data, param_dict, job=job, **kwds)
# process results of tool
- if job and job.state == job.states.ERROR:
- return
- # Job state may now be 'running' instead of previous 'error', but datasets are still set to e.g. error
- for dataset in out_data.values():
- if dataset.state != dataset.states.OK:
- return
data_manager_id = job.data_manager_association.data_manager_id
data_manager = self.app.data_managers.get_manager(data_manager_id, None)
assert data_manager is not None, "Invalid data manager (%s) requested. It may have been removed before the job completed." % (data_manager_id)
diff --git a/lib/galaxy/tools/cache.py b/lib/galaxy/tools/cache.py
index 21fe1585654..768d1b1ab07 100644
--- a/lib/galaxy/tools/cache.py
+++ b/lib/galaxy/tools/cache.py
@@ -151,7 +151,9 @@ class ToolShedRepositoryCache(object):
def rebuild(self):
self.repositories = self.app.install_model.context.current.query(self.app.install_model.ToolShedRepository).options(
defer(self.app.install_model.ToolShedRepository.metadata),
- joinedload('tool_dependencies'),
+ joinedload('tool_dependencies').subqueryload('tool_shed_repository').options(
+ defer(self.app.install_model.ToolShedRepository.metadata)
+ ),
).all()
repos_by_tuple = defaultdict(list)
for repository in self.repositories + self.local_repositories:
diff --git a/lib/galaxy/webapps/galaxy/api/folder_contents.py b/lib/galaxy/webapps/galaxy/api/folder_contents.py
index 8b9d8050f00..799142215c8 100644
--- a/lib/galaxy/webapps/galaxy/api/folder_contents.py
+++ b/lib/galaxy/webapps/galaxy/api/folder_contents.py
@@ -129,6 +129,9 @@ class FolderContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryM
tags=ldda_tags))
if content_item.library_dataset_dataset_association.message:
return_item.update(dict(message=content_item.library_dataset_dataset_association.message))
+ elif content_item.library_dataset_dataset_association.info:
+ # There is no message but ldda info contains something so we display that instead.
+ return_item.update(dict(message=content_item.library_dataset_dataset_association.info))
# For every item include the default metadata
return_item.update(dict(id=encoded_id,
diff --git a/lib/galaxy_ext/container_monitor/monitor.py b/lib/galaxy_ext/container_monitor/monitor.py
index e03cda18b9e..b1e1447f1e0 100644
--- a/lib/galaxy_ext/container_monitor/monitor.py
+++ b/lib/galaxy_ext/container_monitor/monitor.py
@@ -41,12 +41,17 @@ def main():
try:
ports_raw = parse_ports(container_name, connection_configuration)
if ports_raw is not None:
- host_ip = socket.gethostbyname(socket.gethostname())
+ try:
+ host_ip = socket.gethostbyname(socket.gethostname())
+ except Exception:
+ # doesn't work on OS X
+ host_ip = None
with open("container_runtime.json", "w") as f:
- # Override the IPs
ports = docker_util.parse_port_text(ports_raw)
- for key in ports:
- ports[key]['host'] = host_ip
+ if host_ip is not None:
+ for key in ports:
+ if ports[key]['host'] == '0.0.0.0':
+ ports[key]['host'] = host_ip
json.dump(ports, f)
break
else:
diff --git a/test/functional/tools/data_manager.xml b/test/functional/tools/data_manager.xml
index 33261485299..36891279dc4 100644
--- a/test/functional/tools/data_manager.xml
+++ b/test/functional/tools/data_manager.xml
@@ -2,13 +2,15 @@
{"data_tables": {"testbeta": [{"value": "newvalue", "path": "newvalue.txt"}]}}
-
+
mkdir $out_file.files_path ;
- echo "A new value" > $out_file.files_path/newvalue.txt;
- cp $static_test_data $out_file
+ echo "A new value" > '$out_file.files_path/newvalue.txt';
+ cp '$static_test_data' '$out_file';
+ exit $exit_code
+
diff --git a/test/functional/tools/data_manager_add.xml b/test/functional/tools/data_manager_add.xml
index 3ab0dae4a8d..6dcfd500d08 100644
--- a/test/functional/tools/data_manager_add.xml
+++ b/test/functional/tools/data_manager_add.xml
@@ -1,14 +1,16 @@
-
+
{"data_tables": {"testbeta": { "add": [{"value": "newvalue", "path": "newvalue.txt"}]}}}
-
+
mkdir $out_file.files_path ;
- echo "A new value" > $out_file.files_path/newvalue.txt;
- cp $static_test_data $out_file
+ echo "A new value" > '$out_file.files_path/newvalue.txt';
+ cp '$static_test_data' '$out_file';
+ exit $exit_code
+
diff --git a/test/functional/tools/data_manager_add_remove.xml b/test/functional/tools/data_manager_add_remove.xml
index 5dd69106926..1ed984f0286 100644
--- a/test/functional/tools/data_manager_add_remove.xml
+++ b/test/functional/tools/data_manager_add_remove.xml
@@ -1,14 +1,16 @@
-
+
{"data_tables": {"testbeta": { "add": [{"value": "newvalue", "path": "newvalue.txt"}, {"value": "newvalue2", "path": "newvalue2.txt"}], "remove": [{"value": "newvalue", "path": "newvalue.txt"}]}}}
-
+
mkdir $out_file.files_path ;
- echo "A new value" > $out_file.files_path/newvalue.txt;
- cp $static_test_data $out_file
+ echo "A new value" > '$out_file.files_path/newvalue.txt';
+ cp '$static_test_data' '$out_file';
+ exit $exit_code
+