Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/bioc_tool_builder.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/planemo/bioc_tool_builder.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -"""Tool builder for R-bioc tools.""" - -import os - -import yaml - -from planemo.conda_recipes import write_bioconda_recipe -from planemo.tool_builder import ( - _find_command, - _handle_help, - _handle_tests, - _render, - _replace_file_in_command, - append_macro_file, - Input, - TestCase, - ToolDescription, - UrlCitation, -) - - -def build(**kwds): - """Build up a :func:`ToolDescription` from supplid arguments.""" - test_case = TestCase() - command = _find_command(kwds) - # process raw cite urls - cite_urls = kwds.get("cite_url", []) - del kwds["cite_url"] - citations = map(UrlCitation, cite_urls) - kwds["bibtex_citations"] = citations - - # process raw inputs - # inputs are in a list - inputs = kwds.get("input", []) - del kwds["input"] - - # TODO: DEPRICATE HANDLING OF EXAMPLE INPUT - example_inputs = kwds["example_input"] - del kwds["example_input"] - - rscript_data = kwds["rscript_data"] - - # Rscript inputs - if bool(rscript_data): - input_dict = rscript_data.get('inputs') # dictionary of input parameters - inputs = input_dict.values()[0] - - def edit_params(iodata): - return iodata.split("/")[-1] - inputs = map(edit_params, inputs) - param_set = inputs - inputs = list(map(Input, inputs or [])) - - # TODO: DEPRICATE HANDLING OF EXAMPLE INPUT - if not bool(rscript_data) and example_inputs: - '''If no Rscript data is found but example_inputs are given - this should not happen''' - for i, input_file in enumerate(example_inputs or []): - name = "input%d" % (i + 1) - inputs.append(Input(input_file, name=name)) - test_case.params.append((name, input_file)) - command = _replace_file_in_command(command, input_file, name) - - # handle raw outputs (from_work_dir ones) as well as named_outputs - outputs = kwds.get("output", []) - del kwds["output"] - - if bool(rscript_data): - output_dict = rscript_data.get('outputs') - outputs = output_dict.values()[0] - # Add all parameters to a list called param_set - outputs = map(edit_params, outputs) - param_set.extend(outputs) - - outputs = list(map(Output, outputs or [])) - - named_outputs = kwds.get("named_output", []) - del kwds["named_output"] - for named_output in (named_outputs or []): - outputs.append(Output(name=named_output)) - - # DEPRICATED HANDLING OF EXAMPLE OUTPUT - # TODO: handle example outputs - # if kwds.get("example_ouput"): - # example_outputs = kwds["example_output"] - # del kwds["example_output"] - - kwds['inputs'] = inputs - kwds["outputs"] = outputs - - # handle requirements and containers - if bool(rscript_data): - if not type([rscript_data.get('library')]) is list: - kwds['requirements'] = [rscript_data.get('library')] - else: - kwds['requirements'] = rscript_data.get('library') - _handle_requirements(kwds) - # Add help from requirements - if not bool(rscript_data): - req = kwds['requirements'][0] - command_help = req.package_help + "\n \n" + req.package_url - kwds['help_text'] = command_help - - # Handle help - _handle_help(kwds) - - # Edit command before sending it into the kwds dictionary - command = _parse_command_rbioc(command, param_set) - kwds["command"] = command - - # finally wrap up tests - tests, test_files = _handle_tests(kwds, test_case) - kwds["tests"] = tests - - # Render tool content from template. - contents = _render(kwds) - - tool_files = [] - append_macro_file(tool_files, kwds) - - return ToolDescription( - contents, - tool_files=tool_files, - test_files=test_files - ) - - -def _parse_command_rbioc(command, param_set): - """ - Parse command in Rbioc. - - Find a r-bioc command and replace the inputs and - outputs with appropriate galaxy template. - """ - cmd = command.split(" ") - count = 0 - for i in range(len(cmd)): - if "--" in cmd[i]: - cmd[i + 1] = "$" + param_set[count].split(".")[0] - count = count + 1 - return " ".join(cmd) - - -def _handle_requirements(kwds): - """Handle Requirements in R-Bioc tools. - - Convert requirements specified from the command-line - into abstract format for consumption by the template. - """ - requirements = kwds["requirements"] - # Handle Bioc/R requirements - if kwds.get('rversion') and kwds.get("requirements"): - rversion = kwds['rversion'] - rversion = rversion.replace(" ", "@") - requirements.append(rversion) - requirements.reverse() # FIXME: Flips list so that R is the first in the requirements list - bioconda_path = kwds["bioconda_path"] - del kwds["requirements"] - requirements = requirements or [] - - requirements = [Requirement(req, bioconda_path=bioconda_path) for req in requirements] - kwds["requirements"] = requirements - - -class Output(object): - """Output class for R bioc tools.""" - - def __init__(self, from_path=None, name=None, use_from_path=False): - """Initialize Output class.""" - if from_path: - parts = from_path.split(".") - name = name or parts[0] - if len(parts) > 1: - datatype = ".".join(parts[1:]) - else: - datatype = "data" - else: - name = name - datatype = "data" - - self.name = name - self.datatype = datatype - if use_from_path: - self.from_path = from_path - else: - self.from_path = None - - def __str__(self): - """Method override str function in Output class.""" - if self.from_path: - return self._from_path_str() - else: - return self._named_str() - - def _from_path_str(self): - template = '<data name="{0}" format="{1}" from_work_dir="{2}" />' - return template.format(self.name, self.datatype, self.from_path) - - def _named_str(self): - template = '<data name="{0}" format="{1}" />' - return template.format(self.name, self.datatype) - - -class Requirement(object): - """Requirements class for R-Bioc tools.""" - - def __init__(self, requirement, bioconda_path=None, update=False): - """Initialize Requirements class for Bioc tool builder.""" - parts = requirement.split("@", 1) - # Get version from requirements, if version not given - if len(parts) > 1: - name = parts[0] - version = "@".join(parts[1:]) - else: - name = parts[0] - version = None - if name == "R": - self.name = name - self.version = version - else: - # Write biconda recipe with given requirement - if bioconda_path is None: - bioconda_path = os.path.expanduser("~") - write_bioconda_recipe(name, True, update, bioconda_path) - - recipe_path = os.path.join(bioconda_path, - "bioconda-recipes", - "recipes", - "bioconductor-" + name.lower(), - "meta.yaml") - if not os.path.exists(recipe_path): - recipe_path = os.path.join(bioconda_path, - "bioconda-recipes", - "recipes", - "r-" + name.lower(), - "meta.yaml") - with open(recipe_path, 'r') as f: - doc = yaml.safe_load(f) - if not version: - version = doc["package"]["version"] - package_url = doc["about"]["home"] - package_help = doc["about"]["summary"] - self.name = name - self.version = version - self.package_url = package_url - self.package_help = package_help - - def __str__(self): - """Format requirements string with correct version and name.""" - base = '<requirement type="package"{0}>{1}</requirement>' - if self.version is not None: - attrs = ' version="{0}"'.format(self.version) - else: - attrs = '' - return base.format(attrs, self.name)
