diff --git a/.gitignore b/.gitignore index 94c7db254a8..af1e077b749 100644 --- a/.gitignore +++ b/.gitignore @@ -144,4 +144,3 @@ doc/source/dev/schema.rst *.rej *~ .idea -*.bak diff --git a/config/workflow_resource_mapper_conf.yml.sample b/config/workflow_resource_mapper_conf.yml.sample deleted file mode 100644 index 648dd09ddee..00000000000 --- a/config/workflow_resource_mapper_conf.yml.sample +++ /dev/null @@ -1,14 +0,0 @@ -by_group: - default: default - groups: - default: [project, priority] - prio_basic: [{name: priority, options: ["low", "med"]}] - prio_advanced: [{name: priority, options: ["low", "med", "high"]}] - prio_super: - - time - - memory - - processors - - name: priority - options: - - ultra - - plus_ultra diff --git a/config/workflow_resource_params_conf.xml.sample b/config/workflow_resource_params_conf.xml.sample deleted file mode 100644 index c04d2909aa5..00000000000 --- a/config/workflow_resource_params_conf.xml.sample +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - diff --git a/lib/galaxy/jobs/mapper.py b/lib/galaxy/jobs/mapper.py index bb26d802779..c9f8f0da874 100644 --- a/lib/galaxy/jobs/mapper.py +++ b/lib/galaxy/jobs/mapper.py @@ -137,11 +137,6 @@ class JobRunnerMapper(object): workflow_invocation_uuid = param_values.get("__workflow_invocation_uuid__", None) actual_args["workflow_invocation_uuid"] = workflow_invocation_uuid - if "workflow_resource_params" in function_arg_names: - param_values = job.raw_param_dict() - workflow_resource_params = param_values.get("__workflow_resource_params__", None) - actual_args["workflow_resource_params"] = workflow_resource_params - return expand_function(**actual_args) def __job_params(self, job): diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index 4934de90d79..e9142c52980 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -817,22 +817,6 @@ def xml_text(root, name=None): return '' -def parse_resource_parameters(resource_param_file): - """Code shared between jobs and workflows for reading resource parameter configuration files. - - TODO: Allow YAML in addition to XML. - """ - resource_parameters = {} - if os.path.exists(resource_param_file): - resource_definitions = parse_xml(resource_param_file) - resource_definitions_root = resource_definitions.getroot() - for parameter_elem in resource_definitions_root.findall("param"): - name = parameter_elem.get("name") - resource_parameters[name] = parameter_elem - - return resource_parameters - - # asbool implementation pulled from PasteDeploy truthy = frozenset(['true', 'yes', 'on', 'y', 't', '1']) falsy = frozenset(['false', 'no', 'off', 'n', 'f', '0']) diff --git a/lib/galaxy/workflow/resources/__init__.py b/lib/galaxy/workflow/resources/__init__.py deleted file mode 100644 index a9bf1d07320..00000000000 --- a/lib/galaxy/workflow/resources/__init__.py +++ /dev/null @@ -1,176 +0,0 @@ -"""This package is something a placeholder for workflow resource parameters. - -This file defines the baked in resource mapper types, and this package contains an -example of a more open, pluggable approach with greater control. -""" -import functools -import logging -import os -import sys -from copy import deepcopy - -import yaml - -import galaxy.util - -log = logging.getLogger(__name__) - - -def get_resource_mapper_function(app): - config = app.config - mapper = getattr(config, "workflow_resource_params_mapper", None) - - if mapper is None: - return _null_mapper_function - elif ":" in mapper: - raw_function = _import_resource_mapping_function(mapper) - # Bind resource parameters here just to not re-parse over and over. - workflow_resource_params = _read_defined_parameter_definitions(config) - return functools.partial(raw_function, workflow_resource_params=workflow_resource_params) - else: - workflow_resource_params = _read_defined_parameter_definitions(config) - with open(mapper, "r") as f: - mapper_definition = yaml.load(f) - - if "by_group" in mapper_definition: - by_group = mapper_definition["by_group"] - return functools.partial(_resource_parameters_by_group, by_group=by_group, workflow_resource_params=workflow_resource_params) - else: - raise Exception("Currently workflow parameter mapper definitions require a by_group definition.") - - -def _read_defined_parameter_definitions(config): - params_file = getattr(config, "workflow_resource_params_file", None) - if not params_file or not os.path.exists(params_file): - # Just re-use job resource parameters. - params_file = getattr(config, "job_resource_params_file", None) - if not params_file or not os.path.exists(params_file): - params_file = None - log.debug("Loading workflow resource parameter definitions from %s" % params_file) - if params_file: - return galaxy.util.parse_resource_parameters(params_file) - else: - return {} - - -def _resource_parameters_by_group(trans, **kwds): - user = trans.user - by_group = kwds["by_group"] - workflow_resource_params = kwds["workflow_resource_params"] - - params = [] - if validate_by_group_workflow_parameters_mapper(by_group, workflow_resource_params): - user_permissions = {} - user_groups = [] - for g in user.groups: - user_groups.append(g.group.name) - default_group = by_group.get('default', None) - for group_name, group_def in by_group.get("groups", {}).items(): - if group_name == default_group or group_name in user_groups: - for tag in group_def: - if type(tag) is dict: - if tag.get('name') not in user_permissions: - user_permissions[tag.get('name')] = {} - for option in tag.get('options'): - user_permissions[tag.get('name')][option] = {} - else: - if tag not in user_permissions: - user_permissions[tag] = {} - - # user_permissions is now set. - params = get_workflow_parameter_list(workflow_resource_params, user_permissions) - return params - - -# returns an array of parameters that a users set of permissions can access. -def get_workflow_parameter_list(params, user_permissions): - param_list = [] - for param_name, param_elem in params.items(): - attr = deepcopy(param_elem.attrib) - if attr['name'] in user_permissions: - # Allow 'select' type parameters to be used - if attr['type'] == 'select': - option_data = [] - reject_list = [] - for option_elem in param_elem.findall("option"): - if option_elem.attrib['value'] in user_permissions[attr['name']]: - option_data.append({ - 'label': option_elem.attrib['label'], - 'value': option_elem.attrib['value'] - }) - else: - reject_list.append(option_elem.attrib['label']) - attr['data'] = option_data - attr_help = "" - if 'help' in attr: - attr_help = attr['help'] - if reject_list: - attr_help += "

The following options are available but disabled.
" + \ - str(reject_list) + \ - "
If you believe this is a mistake, please contact your Galaxy admin." - attr['help'] = attr_help - - param_list.append(attr) - return param_list - - -def validate_by_group_workflow_parameters_mapper(by_group, workflow_resource_params): - valid = True - try: - if 'default' not in by_group: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, 'default' attribute not found!") - default_group = by_group['default'] - if 'groups' not in by_group: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, 'groups' attribute not found!") - if default_group not in by_group['groups']: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, default group with title '" + - default_group + "' not found in 'groups'!") - for group in by_group['groups']: - for attrib in by_group['groups'][group]: - if type(attrib) is dict: - if 'name' not in attrib: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, " - "'name' attribute not found in attribute of group '" + group + "'!") - if attrib['name'] not in workflow_resource_params: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, group with name '" + - attrib['name'] + "' not found in 'workflow_resource_params'!") - if 'options' not in attrib: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, " - "'options' attribute not found in attribute of group '" + group + "'!") - - valid_options = [] - for param_option in workflow_resource_params[attrib['name']]: - valid_options.append(param_option.attrib['value']) - for option in attrib['options']: - if option not in valid_options: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, '" + option + - "' in 'options' of '" + attrib['name'] + "' not found in attribute of group '" + group + "'!") - else: - if attrib not in workflow_resource_params: - raise Exception("'workflow_resource_params_mapper' YAML file is malformed, attribute with name " - "'" + attrib + "' not found in 'workflow_resource_params'!") - - except Exception as e: - log.exception(e) - valid = False - pass - - return valid - - -def _import_resource_mapping_function(qualified_function_path): - full_module_name, function_name = qualified_function_path.split(":", 1) - try: - __import__(full_module_name) - except ImportError: - raise Exception("Failed to find workflow resource mapper module %s" % full_module_name) - - module = sys.modules[full_module_name] - if hasattr(module, function_name): - return getattr(module, function_name) - else: - raise Exception("Failed to find workflow resource mapper function %s.%s" % (full_module_name, function_name)) - - -def _null_mapper_function(*args, **kwds): - return None diff --git a/lib/galaxy/workflow/resources/example.py.sample b/lib/galaxy/workflow/resources/example.py.sample deleted file mode 100644 index 51454600ec0..00000000000 --- a/lib/galaxy/workflow/resources/example.py.sample +++ /dev/null @@ -1,22 +0,0 @@ -import logging -log = logging.getLogger( __name__ ) - - -def admin_mapping(trans, stored_workflow, **kwds): - """ - This example workflow resource parameter mapping simply provides admins the ability to - specify priorities for workflows. To enable this setup ``workflow_resource_params_file`` - in the Galaxy configuration with a priority definition input called "priority" (such - as in the example), copy this file without the .sample extension, and set - ``workflow_resource_params_mapper`` to ``galaxy.workflow.resources.example:admin_mapping``. - """ - workflow_resource_params = kwds["workflow_resource_params"] - if trans.user_is_admin(): - priority_attrib = workflow_resource_params.get("priority").attrib - priority_attrib['data'] = [] - for child in workflow_resource_params.get('priority').getchildren(): - priority_attrib['data'].append(child.attrib) - time_attrib = workflow_resource_params.get("time").attrib - return [priority_attrib, time_attrib] - - return None