Loading lib/galaxy/tool_util/cwl/parser.py +2 −17 Original line number Diff line number Diff line Loading @@ -459,23 +459,8 @@ class CommandLineToolProxy(ToolProxy): requirements.append((package["package"], first_version)) return requirements def resource_requirements(self) -> List[Dict[str, Union[int, float, str]]]: cwl_to_galaxy = { "coresMin": "cores_min", "coresMax": "cores_max", "ramMin": "ram_min", "ramMax": "ram_max", "tmpdirMin": "tmpdir_min", "tmpdirMax": "tmpdir_max", } cwl_key_set = set(cwl_to_galaxy.keys()) rr = [] for r in self._tool.tool.get("requirements", []): if r["class"] == "ResourceRequirement": for key in cwl_key_set.intersection(set(r.keys())): galaxy_key = cwl_to_galaxy[key] rr.append({galaxy_key: r[key]}) return rr def resource_requirements(self): return [r for r in self.requirements if r["class"] == "ResourceRequirement"] @property def requirements(self): Loading lib/galaxy/tool_util/deps/requirements.py +30 −4 Original line number Diff line number Diff line import copy from typing import ( Callable, cast, Dict, List, Optional, Union, ) Loading Loading @@ -262,20 +264,44 @@ class ResourceRequirement: return float(self.value_or_expression) def resource_requirements_from_list(requirements) -> List[ResourceRequirement]: cwl_to_galaxy = { "coresMin": "cores_min", "coresMax": "cores_max", "ramMin": "ram_min", "ramMax": "ram_max", "tmpdirMin": "tmpdir_min", "tmpdirMax": "tmpdir_max", } rr = [] for r in requirements: if r.get("class") == "ResourceRequirement": valid_key_set = set(cwl_to_galaxy.keys()) elif r.get("type") == "resource": valid_key_set = set(cwl_to_galaxy.values()) else: continue for key in valid_key_set.intersection(set(r.keys())): value = r[key] key = cast(ResourceType, cwl_to_galaxy.get(key, key)) rr.append(ResourceRequirement(value_or_expression=value, resource_type=key)) return rr def parse_requirements_from_dict(root_dict): requirements = root_dict.get("requirements", []) resource_requirements = root_dict.get("resource_requirements", []) resource_requirements = resource_requirements_from_list(requirements) containers = root_dict.get("containers", []) return ( ToolRequirements.from_list(requirements), [ContainerDescription.from_dict(c) for c in containers], [ResourceRequirement.from_dict(r) for r in resource_requirements], resource_requirements, ) def parse_requirements_from_xml(xml_root, parse_resources=False): """ Parses requirement, containers and optionally resource_requirements from Xml tree. Parses requirements, containers and optionally resource requirements from Xml tree. >>> from galaxy.util import parse_xml_string >>> def load_requirements(contents, parse_resources=False): Loading Loading @@ -317,7 +343,7 @@ def parse_requirements_from_xml(xml_root, parse_resources=False): containers = [container_from_element(c) for c in container_elems] if parse_resources: resource_elems = requirements_elem.findall("resource_requirement") if requirements_elem else [] resource_elems = requirements_elem.findall("resource") if requirements_elem else [] resources = [resource_from_element(r) for r in resource_elems] return requirements, containers, resources Loading test/unit/tool_util/test_parsing.py +3 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ TOOL_XML_1 = """ <requirements> <container type="docker">mycool/bwa</container> <requirement type="package" version="1.0">bwa</requirement> <resource_requirement type="cores_min">1</resource_requirement> <resource type="cores_min">1</resource> </requirements> <outputs> <data name="out1" format="bam" from_work_dir="out1.bam" /> Loading Loading @@ -119,12 +119,12 @@ command: "bowtie_wrapper.pl --map-the-stuff" interpreter: "perl" runtime_version: command: "bowtie --version" resource_requirements: - cores_min: 1 requirements: - type: package name: bwa version: 1.0.1 - type: resource cores_min: 1 containers: - type: docker identifier: "awesome/bowtie" Loading Loading
lib/galaxy/tool_util/cwl/parser.py +2 −17 Original line number Diff line number Diff line Loading @@ -459,23 +459,8 @@ class CommandLineToolProxy(ToolProxy): requirements.append((package["package"], first_version)) return requirements def resource_requirements(self) -> List[Dict[str, Union[int, float, str]]]: cwl_to_galaxy = { "coresMin": "cores_min", "coresMax": "cores_max", "ramMin": "ram_min", "ramMax": "ram_max", "tmpdirMin": "tmpdir_min", "tmpdirMax": "tmpdir_max", } cwl_key_set = set(cwl_to_galaxy.keys()) rr = [] for r in self._tool.tool.get("requirements", []): if r["class"] == "ResourceRequirement": for key in cwl_key_set.intersection(set(r.keys())): galaxy_key = cwl_to_galaxy[key] rr.append({galaxy_key: r[key]}) return rr def resource_requirements(self): return [r for r in self.requirements if r["class"] == "ResourceRequirement"] @property def requirements(self): Loading
lib/galaxy/tool_util/deps/requirements.py +30 −4 Original line number Diff line number Diff line import copy from typing import ( Callable, cast, Dict, List, Optional, Union, ) Loading Loading @@ -262,20 +264,44 @@ class ResourceRequirement: return float(self.value_or_expression) def resource_requirements_from_list(requirements) -> List[ResourceRequirement]: cwl_to_galaxy = { "coresMin": "cores_min", "coresMax": "cores_max", "ramMin": "ram_min", "ramMax": "ram_max", "tmpdirMin": "tmpdir_min", "tmpdirMax": "tmpdir_max", } rr = [] for r in requirements: if r.get("class") == "ResourceRequirement": valid_key_set = set(cwl_to_galaxy.keys()) elif r.get("type") == "resource": valid_key_set = set(cwl_to_galaxy.values()) else: continue for key in valid_key_set.intersection(set(r.keys())): value = r[key] key = cast(ResourceType, cwl_to_galaxy.get(key, key)) rr.append(ResourceRequirement(value_or_expression=value, resource_type=key)) return rr def parse_requirements_from_dict(root_dict): requirements = root_dict.get("requirements", []) resource_requirements = root_dict.get("resource_requirements", []) resource_requirements = resource_requirements_from_list(requirements) containers = root_dict.get("containers", []) return ( ToolRequirements.from_list(requirements), [ContainerDescription.from_dict(c) for c in containers], [ResourceRequirement.from_dict(r) for r in resource_requirements], resource_requirements, ) def parse_requirements_from_xml(xml_root, parse_resources=False): """ Parses requirement, containers and optionally resource_requirements from Xml tree. Parses requirements, containers and optionally resource requirements from Xml tree. >>> from galaxy.util import parse_xml_string >>> def load_requirements(contents, parse_resources=False): Loading Loading @@ -317,7 +343,7 @@ def parse_requirements_from_xml(xml_root, parse_resources=False): containers = [container_from_element(c) for c in container_elems] if parse_resources: resource_elems = requirements_elem.findall("resource_requirement") if requirements_elem else [] resource_elems = requirements_elem.findall("resource") if requirements_elem else [] resources = [resource_from_element(r) for r in resource_elems] return requirements, containers, resources Loading
test/unit/tool_util/test_parsing.py +3 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ TOOL_XML_1 = """ <requirements> <container type="docker">mycool/bwa</container> <requirement type="package" version="1.0">bwa</requirement> <resource_requirement type="cores_min">1</resource_requirement> <resource type="cores_min">1</resource> </requirements> <outputs> <data name="out1" format="bam" from_work_dir="out1.bam" /> Loading Loading @@ -119,12 +119,12 @@ command: "bowtie_wrapper.pl --map-the-stuff" interpreter: "perl" runtime_version: command: "bowtie --version" resource_requirements: - cores_min: 1 requirements: - type: package name: bwa version: 1.0.1 - type: resource cores_min: 1 containers: - type: docker identifier: "awesome/bowtie" Loading