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 +