From 00b147a6649b8fd1112fa76c573fa78db8e58621 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Mon, 14 Nov 2016 12:45:04 -0500 Subject: [PATCH] Bring in updates from galaxy-lib. --- lib/galaxy/exceptions/error_codes.py | 1 + lib/galaxy/jobs/metrics/__init__.py | 1 + lib/galaxy/jobs/metrics/collectl/cli.py | 1 + .../jobs/metrics/collectl/subsystems.py | 1 + lib/galaxy/jobs/metrics/instrumenters/core.py | 1 + .../jobs/metrics/instrumenters/cpuinfo.py | 1 + lib/galaxy/jobs/metrics/instrumenters/env.py | 1 + .../jobs/metrics/instrumenters/meminfo.py | 1 + lib/galaxy/objectstore/rods.py | 1 + lib/galaxy/tools/cwl/runtime_actions.py | 1 + lib/galaxy/tools/cwl/schema.py | 1 + .../tools/deps/container_resolvers/mulled.py | 2 +- lib/galaxy/tools/deps/containers.py | 2 +- lib/galaxy/tools/deps/mulled/_cli.py | 1 + lib/galaxy/tools/deps/mulled/mulled_build.py | 22 ++++++++++--------- .../tools/deps/mulled/mulled_build_channel.py | 4 +++- lib/galaxy/tools/deps/resolvers/conda.py | 2 +- lib/galaxy/tools/deps/resolvers/modules.py | 1 + lib/galaxy/tools/parser/output_actions.py | 1 + .../tools/parser/output_collection_def.py | 1 + .../tools/toolbox/lineages/tool_shed.py | 1 + lib/galaxy/tools/toolbox/parser.py | 1 + lib/galaxy/util/__init__.py | 5 +++++ lib/galaxy/util/hash_util.py | 1 + lib/galaxy/util/object_wrapper.py | 2 ++ 25 files changed, 43 insertions(+), 14 deletions(-) diff --git a/lib/galaxy/exceptions/error_codes.py b/lib/galaxy/exceptions/error_codes.py index e41f0828313..3b6e78a4002 100644 --- a/lib/galaxy/exceptions/error_codes.py +++ b/lib/galaxy/exceptions/error_codes.py @@ -40,6 +40,7 @@ def _from_dict(entry): message = entry.get("message") return (name, ErrorCode(code, message)) + error_codes_json = resource_string(__name__, 'error_codes.json').decode("UTF-8") for entry in loads(error_codes_json): name, error_code_obj = _from_dict(entry) diff --git a/lib/galaxy/jobs/metrics/__init__.py b/lib/galaxy/jobs/metrics/__init__.py index 87c5fafa54f..a077b25d33a 100644 --- a/lib/galaxy/jobs/metrics/__init__.py +++ b/lib/galaxy/jobs/metrics/__init__.py @@ -75,6 +75,7 @@ class NullJobInstrumenter(object): def collect_properties(self, job_id, job_directory): return {} + NULL_JOB_INSTRUMENTER = NullJobInstrumenter() diff --git a/lib/galaxy/jobs/metrics/collectl/cli.py b/lib/galaxy/jobs/metrics/collectl/cli.py index 14dc6d27260..90271d6bee7 100644 --- a/lib/galaxy/jobs/metrics/collectl/cli.py +++ b/lib/galaxy/jobs/metrics/collectl/cli.py @@ -137,4 +137,5 @@ class CollectlCli( object ): if return_code: raise Exception( "Problem running collectl command." ) + __all__ = ( 'CollectlCli', ) diff --git a/lib/galaxy/jobs/metrics/collectl/subsystems.py b/lib/galaxy/jobs/metrics/collectl/subsystems.py index 61bb2751069..942c5b36be9 100644 --- a/lib/galaxy/jobs/metrics/collectl/subsystems.py +++ b/lib/galaxy/jobs/metrics/collectl/subsystems.py @@ -77,4 +77,5 @@ def get_subsystem( name ): """ return SUBSYSTEM_DICT[ name ] + __all__ = ( 'get_subsystem', ) diff --git a/lib/galaxy/jobs/metrics/instrumenters/core.py b/lib/galaxy/jobs/metrics/instrumenters/core.py index b808cae80f3..ce5534fb901 100644 --- a/lib/galaxy/jobs/metrics/instrumenters/core.py +++ b/lib/galaxy/jobs/metrics/instrumenters/core.py @@ -84,4 +84,5 @@ class CorePlugin( InstrumentPlugin ): pass return value + __all__ = ( 'CorePlugin', ) diff --git a/lib/galaxy/jobs/metrics/instrumenters/cpuinfo.py b/lib/galaxy/jobs/metrics/instrumenters/cpuinfo.py index e8f979bda75..1ce31cb2ea6 100644 --- a/lib/galaxy/jobs/metrics/instrumenters/cpuinfo.py +++ b/lib/galaxy/jobs/metrics/instrumenters/cpuinfo.py @@ -60,4 +60,5 @@ class CpuInfoPlugin( InstrumentPlugin ): def __instrument_cpuinfo_path( self, job_directory ): return self._instrument_file_path( job_directory, "cpuinfo" ) + __all__ = ( 'CpuInfoPlugin', ) diff --git a/lib/galaxy/jobs/metrics/instrumenters/env.py b/lib/galaxy/jobs/metrics/instrumenters/env.py index dc5846d386b..762158cc081 100644 --- a/lib/galaxy/jobs/metrics/instrumenters/env.py +++ b/lib/galaxy/jobs/metrics/instrumenters/env.py @@ -69,4 +69,5 @@ class EnvPlugin( InstrumentPlugin ): def __env_file( self, job_directory ): return self._instrument_file_path( job_directory, "vars" ) + __all__ = ( 'EnvPlugin', ) diff --git a/lib/galaxy/jobs/metrics/instrumenters/meminfo.py b/lib/galaxy/jobs/metrics/instrumenters/meminfo.py index 49b528f3472..1eac6a69dee 100644 --- a/lib/galaxy/jobs/metrics/instrumenters/meminfo.py +++ b/lib/galaxy/jobs/metrics/instrumenters/meminfo.py @@ -62,4 +62,5 @@ class MemInfoPlugin( InstrumentPlugin ): def __instrument_meminfo_path( self, job_directory ): return self._instrument_file_path( job_directory, "meminfo" ) + __all__ = ( 'MemInfoPlugin', ) diff --git a/lib/galaxy/objectstore/rods.py b/lib/galaxy/objectstore/rods.py index dbb14c5e3bb..a6e70e7ed20 100644 --- a/lib/galaxy/objectstore/rods.py +++ b/lib/galaxy/objectstore/rods.py @@ -325,6 +325,7 @@ def _rods_strerror( errno ): irods.__rods_strerror_map[ v ] = name return irods.__rods_strerror_map.get( errno, 'GALAXY_NO_ERRNO_MAPPING_FOUND' ) + if irods is not None: irods.strerror = _rods_strerror diff --git a/lib/galaxy/tools/cwl/runtime_actions.py b/lib/galaxy/tools/cwl/runtime_actions.py index 84fe2c6f339..07a4b2c5731 100644 --- a/lib/galaxy/tools/cwl/runtime_actions.py +++ b/lib/galaxy/tools/cwl/runtime_actions.py @@ -48,6 +48,7 @@ def handle_outputs(job_directory=None): with open(target_path, "w") as f: f.write(json.dumps(output)) + __all__ = ( 'handle_outputs', ) diff --git a/lib/galaxy/tools/cwl/schema.py b/lib/galaxy/tools/cwl/schema.py index 61065fa5d3f..fb24b784724 100644 --- a/lib/galaxy/tools/cwl/schema.py +++ b/lib/galaxy/tools/cwl/schema.py @@ -69,4 +69,5 @@ class SchemaLoader(object): ) return tool + schema_loader = SchemaLoader() diff --git a/lib/galaxy/tools/deps/container_resolvers/mulled.py b/lib/galaxy/tools/deps/container_resolvers/mulled.py index 3ada6fa08e2..dcf15a020d8 100644 --- a/lib/galaxy/tools/deps/container_resolvers/mulled.py +++ b/lib/galaxy/tools/deps/container_resolvers/mulled.py @@ -120,7 +120,7 @@ class MulledContainerResolver(ContainerResolver): resolver_type = "mulled" - def __init__(self, app_info=None, namespace="mulled"): + def __init__(self, app_info=None, namespace="biocontainers"): super(MulledContainerResolver, self).__init__(app_info) self.namespace = namespace diff --git a/lib/galaxy/tools/deps/containers.py b/lib/galaxy/tools/deps/containers.py index fff1989986b..d30349645cd 100644 --- a/lib/galaxy/tools/deps/containers.py +++ b/lib/galaxy/tools/deps/containers.py @@ -210,7 +210,7 @@ class ContainerRegistry(object): if self.enable_beta_mulled_containers: default_resolvers.extend([ CachedMulledContainerResolver(self.app_info), - MulledContainerResolver(self.app_info, namespace="mulled"), + MulledContainerResolver(self.app_info, namespace="biocontainers"), BuildMulledContainerResolver(self.app_info), ]) return default_resolvers diff --git a/lib/galaxy/tools/deps/mulled/_cli.py b/lib/galaxy/tools/deps/mulled/_cli.py index 8cf4e6fc1e3..067063d7bba 100644 --- a/lib/galaxy/tools/deps/mulled/_cli.py +++ b/lib/galaxy/tools/deps/mulled/_cli.py @@ -14,6 +14,7 @@ def arg_parser(argv, globals): ) return parser + __all__ = ( "arg_parser", ) diff --git a/lib/galaxy/tools/deps/mulled/mulled_build.py b/lib/galaxy/tools/deps/mulled/mulled_build.py index cf55e4e46d1..3a4e1699505 100644 --- a/lib/galaxy/tools/deps/mulled/mulled_build.py +++ b/lib/galaxy/tools/deps/mulled/mulled_build.py @@ -14,6 +14,7 @@ import json import os import string import subprocess +import sys from sys import platform as _platform try: @@ -49,7 +50,7 @@ def get_tests(args, pkg_path): """Extract test cases given a recipe's meta.yaml file.""" recipes_dir = args.recipes_dir - tests = "" + tests = [] input_dir = os.path.dirname(os.path.join(recipes_dir, pkg_path)) recipe_meta = MetaData(input_dir) @@ -59,14 +60,14 @@ def get_tests(args, pkg_path): if tests_imports or tests_commands: if tests_commands: - tests = ' && '.join(tests_commands) - elif tests_imports and 'python' in requirements: - tests = ' && '.join('python -c "import %s"' % imp for imp in tests_imports) + tests.append(' && '.join(tests_commands)) + if tests_imports and 'python' in requirements: + tests.append(' && '.join('python -c "import %s"' % imp for imp in tests_imports)) elif tests_imports and ('perl' in requirements or 'perl-threaded' in requirements): - tests = ' && '.join('''perl -e "use %s;"''' % imp for imp in tests_imports) - tests = tests.replace('$R ', 'Rscript ') - else: - pass + tests.append(' && '.join('''perl -e "use %s;"''' % imp for imp in tests_imports)) + + tests = ' && '.join(tests) + tests = tests.replace('$R ', 'Rscript ') return tests @@ -146,7 +147,8 @@ def mull_targets( print(" ".join(involucro_context.build_command(involucro_args))) if not dry_run: ensure_installed(involucro_context, True) - involucro_context.exec_command(involucro_args) + return involucro_context.exec_command(involucro_args) + return 0 def context_from_args(args): @@ -276,7 +278,7 @@ def main(argv=None): parser.add_argument('--test', help='Provide a test command for the container.') args = parser.parse_args() targets = target_str_to_targets(args.targets) - mull_targets(targets, **args_to_mull_targets_kwds(args)) + sys.exit(mull_targets(targets, **args_to_mull_targets_kwds(args))) __all__ = ("main", ) diff --git a/lib/galaxy/tools/deps/mulled/mulled_build_channel.py b/lib/galaxy/tools/deps/mulled/mulled_build_channel.py index 272940eed7a..6463d3ea58d 100644 --- a/lib/galaxy/tools/deps/mulled/mulled_build_channel.py +++ b/lib/galaxy/tools/deps/mulled/mulled_build_channel.py @@ -19,6 +19,7 @@ See recent changes that would be built with: from __future__ import print_function import os +import sys import time from ._cli import arg_parser @@ -40,7 +41,8 @@ def _fetch_repo_data(args): if repo_data is None: repo_data = "%s-repodata.json" % channel if not os.path.exists(repo_data): - check_output("wget --quiet https://conda.anaconda.org/%s/linux-64/repodata.json.bz2 -O '%s.bz2' && bzip2 -d '%s.bz2'" % (channel, repo_data, repo_data)) + platform_tag = 'osx-64' if sys.platform == 'darwin' else 'linux-64' + check_output("wget --quiet https://conda.anaconda.org/%s/%s/repodata.json.bz2 -O '%s.bz2' && bzip2 -d '%s.bz2'" % (channel, platform_tag, repo_data, repo_data)) return repo_data diff --git a/lib/galaxy/tools/deps/resolvers/conda.py b/lib/galaxy/tools/deps/resolvers/conda.py index fd23349cd45..2a1c13f5116 100644 --- a/lib/galaxy/tools/deps/resolvers/conda.py +++ b/lib/galaxy/tools/deps/resolvers/conda.py @@ -236,4 +236,4 @@ def _string_as_bool( value ): return str( value ).lower() == "true" -__all__ = ('CondaDependencyResolver', ) +__all__ = ('CondaDependencyResolver', 'DEFAULT_ENSURE_CHANNELS') diff --git a/lib/galaxy/tools/deps/resolvers/modules.py b/lib/galaxy/tools/deps/resolvers/modules.py index be64e6b7489..227abb72a9c 100644 --- a/lib/galaxy/tools/deps/resolvers/modules.py +++ b/lib/galaxy/tools/deps/resolvers/modules.py @@ -179,4 +179,5 @@ class ModuleDependency(Dependency): def _string_as_bool( value ): return str( value ).lower() == "true" + __all__ = ('ModuleDependencyResolver', ) diff --git a/lib/galaxy/tools/parser/output_actions.py b/lib/galaxy/tools/parser/output_actions.py index 750aa2d0efe..2234cd46725 100644 --- a/lib/galaxy/tools/parser/output_actions.py +++ b/lib/galaxy/tools/parser/output_actions.py @@ -648,6 +648,7 @@ def compare_re_search( value1, value2 ): # checks pattern=value2 in value1 return bool( re.search( value2, value1 ) ) + compare_types = { 'eq': compare_eq, 'neq': compare_neq, diff --git a/lib/galaxy/tools/parser/output_collection_def.py b/lib/galaxy/tools/parser/output_collection_def.py index 1790c89a41e..cd175a2f6cc 100644 --- a/lib/galaxy/tools/parser/output_collection_def.py +++ b/lib/galaxy/tools/parser/output_collection_def.py @@ -69,6 +69,7 @@ class DatasetCollectionDescription(object): self.sort_key = sort_by self.sort_comp = sort_comp + DEFAULT_DATASET_COLLECTOR_DESCRIPTION = DatasetCollectionDescription( default_dbkey=LEGACY_DEFAULT_DBKEY, ) diff --git a/lib/galaxy/tools/toolbox/lineages/tool_shed.py b/lib/galaxy/tools/toolbox/lineages/tool_shed.py index a2412d12ad3..baeac6fab3e 100644 --- a/lib/galaxy/tools/toolbox/lineages/tool_shed.py +++ b/lib/galaxy/tools/toolbox/lineages/tool_shed.py @@ -93,4 +93,5 @@ class ToolShedLineage(ToolLineage): def get_installed_tool_version( app, tool_id ): return app.tool_version_cache.tool_version_by_tool_id.get(tool_id, None) + __all__ = ( "ToolShedLineage", ) diff --git a/lib/galaxy/tools/toolbox/parser.py b/lib/galaxy/tools/toolbox/parser.py index 8023988d9ba..b81e6421cb6 100644 --- a/lib/galaxy/tools/toolbox/parser.py +++ b/lib/galaxy/tools/toolbox/parser.py @@ -151,6 +151,7 @@ def get_toolbox_parser(config_filename): else: return XmlToolConfSource(config_filename) + __all__ = ( "get_toolbox_parser", "ensure_tool_conf_item", diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index d6dc1863369..90af2b75109 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -447,6 +447,7 @@ def pretty_print_json(json_data, is_json_string=False): json_data = json.loads(json_data) return json.dumps(json_data, sort_keys=True, indent=4) + # characters that are valid valid_chars = set(string.ascii_letters + string.digits + " -=_.()/+*^,:?!") @@ -524,6 +525,7 @@ def sanitize_param( value, valid_characters=valid_chars, character_map=mapped_ch else: raise Exception('Unknown parameter type (%s)' % ( type( value ) )) + valid_filename_chars = set( string.ascii_letters + string.digits + '_.' ) invalid_filenames = [ '', '.', '..' ] @@ -800,6 +802,7 @@ def xml_text(root, name=None): # No luck, return empty string return '' + # asbool implementation pulled from PasteDeploy truthy = frozenset(['true', 'yes', 'on', 'y', 't', '1']) falsy = frozenset(['false', 'no', 'off', 'n', 'f', '0']) @@ -1367,6 +1370,7 @@ def safe_str_cmp(a, b): rv |= ord(x) ^ ord(y) return rv == 0 + galaxy_root_path = os.path.join(__path__[0], "..", "..", "..") @@ -1523,6 +1527,7 @@ class ExecutionTimer(object): elapsed = (time.time() - self.begin) * 1000.0 return "(%0.3f ms)" % elapsed + if __name__ == '__main__': import doctest doctest.testmod(sys.modules[__name__], verbose=False) diff --git a/lib/galaxy/util/hash_util.py b/lib/galaxy/util/hash_util.py index 6a84048ba8e..63efe64d100 100644 --- a/lib/galaxy/util/hash_util.py +++ b/lib/galaxy/util/hash_util.py @@ -46,4 +46,5 @@ def is_hashable( value ): return False return True + __all__ = ('md5', 'hashlib', 'sha1', 'sha', 'new_secure_hash', 'hmac_new', 'is_hashable') diff --git a/lib/galaxy/util/object_wrapper.py b/lib/galaxy/util/object_wrapper.py index 34093082a19..3bcbc299299 100644 --- a/lib/galaxy/util/object_wrapper.py +++ b/lib/galaxy/util/object_wrapper.py @@ -487,5 +487,7 @@ def pickle_SafeStringWrapper( safe_object ): if isinstance( safe_object, CallableSafeStringWrapper ): cls = CallableSafeStringWrapper return ( cls, args ) + + copy_reg.pickle( SafeStringWrapper, pickle_SafeStringWrapper, wrap_with_safe_string ) copy_reg.pickle( CallableSafeStringWrapper, pickle_SafeStringWrapper, wrap_with_safe_string )