diff env/lib/python3.7/site-packages/planemo/rscript_parse.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/rscript_parse.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-"""Module parses R scripts and sends a yaml file to cmd_bioc_tool_init."""
-import os
-
-
-def read_rscript(path):
-    """Read the rscript."""
-    try:
-        with open(os.path.expanduser(path), 'r') as f:
-            rscript = f.readlines()
-    except Exception as e:
-        print(e)
-    return rscript
-
-
-def parse_rscript(script, example_command):
-    """Parse script."""
-    rscript = read_rscript(script)
-    data = {}
-
-    # Find libraries
-    lib = Library(rscript)
-    library_list = lib.find_library()
-    data['library'] = library_list
-
-    # Find inputs
-    inputs = Input(rscript, example_command)
-    input_list = inputs.find_inputs()
-    data['inputs'] = input_list
-
-    # Find outputs
-    outputs = Output(rscript, example_command)
-    output_list = outputs.find_outputs()
-    data['outputs'] = output_list
-    return data
-
-
-def parse_example_command(example_command):
-    """Parse example_command to get inputs.
-
-    Each input stored as element in a dictionary list.
-    """
-    cmd = example_command.replace("\n", " ")
-    opts = [i.strip() for i in cmd.split("--")]
-    opt_dict = {}
-    for opt in opts:
-        opt = opt.split(" ")
-        if not opt[0] in opt_dict.keys():
-            opt_dict[opt[0]] = [opt[1]]
-        else:
-            opt_dict[opt[0]].append(opt[1])
-    return opt_dict
-
-
-class Library(object):
-    """Library class for parsing R scripts."""
-
-    def __init__(self, script):
-        """Initialize class Library."""
-        self.script = script
-        self.searchtext = "library"
-
-    def _prune_library(self, line):
-        """Prune line to get the names in library."""
-        import re
-        split_words = re.compile(r'\w+').findall(line)
-        lib = [w for w in split_words if w != "library"]
-        return lib[0]
-
-    def find_library(self):
-        """Parse library, to find and check requirements."""
-        lib = []
-        for i, line in enumerate(self.script):
-            line = line.strip()
-            if (self.searchtext in line) and (not line.startswith("#")):
-                lib_value = self._prune_library(line)
-                # if lib_value != "getopt":  # getopt already exists
-                lib.append(lib_value)
-        return lib
-
-
-class Input(object):
-    """Input class for parsing inputs."""
-
-    def __init__(self, script, example_command):
-        """Initialize Input with searchtext = input."""
-        self.script = script
-        self.example_command = example_command
-        self.searchtext = "input"
-
-    def find_inputs(self):
-        """Find inputs in example command.
-
-        This parses the R script and has NOTHING TO DO WITH kwds
-        """
-        opt_dict = parse_example_command(self.example_command)
-        inputs = {}
-        for key, value in opt_dict.iteritems():
-            if self.searchtext in key:  # key here is "input"
-                for i, line in enumerate(self.script):
-                    line = line.strip()
-                    if (key in line) and (not line.startswith("#")):
-                        # print >> sys.stderr, 'Line: %s\nkey: %s\nvalue: %s' % (line,key,value)
-                        inputs[key] = value
-                    else:
-                        continue
-        # print >> sys.stderr, 'INPUTS: %s' % inputs
-        if not bool(inputs):  # if inputs are empty
-            print("No inputs found in the Rscript, please specify inputs.")
-        return inputs
-
-
-class Output(object):
-    """Output class for parsing outputs."""
-
-    def __init__(self, script, example_command):
-        """Initialize Input with searchtext - output."""
-        self.script = script
-        self.example_command = example_command
-        self.searchtext = "output"
-
-    def find_outputs(self):
-        """Find outputs in example command."""
-        opt_dict = parse_example_command(self.example_command)
-        outputs = {}
-        for key, value in opt_dict.iteritems():
-            if self.searchtext in key:
-                for i, line in enumerate(self.script):
-                    line = line.strip()
-                    if (key in line) and (not line.startswith("#")):
-                        outputs[key] = value
-                    else:
-                        continue
-        # if not bool(outputs):  # if outputs are empty
-        #     print("No explicit outputs found, please specify outputs.")
-        return outputs
-
-
-if __name__ == "__main__":
-    # TODO : Make sure tools with configfile are not used, this is not supported yet
-    test_file1 = "/Users/nturaga/Documents/galaxyproject/bioc-galaxy-integration/my_r_tool/my_r_tool.R"
-    test_file2 = "/Users/nturaga/Documents/galaxyproject/bioc-galaxy-integration/my_r_tool/my_r_tool_verbose.R"
-    test_file3 = "/Users/nturaga/Documents/galaxyproject/bioc-galaxy-integration/my_r_tool/my_r_tool_multi_inputs_outputs.R"
-    test_file4 = "/Users/nturaga/Documents/galaxyproject/bioc-galaxy-integration/my_r_tool/my_r_tool_fail_case.R"
-
-    # Test case with explicit input and outputs
-    print(" \n ===  Tool test 1 ==== \n ")
-    parse_rscript(test_file1, "Rscript my_r_tool.R --input input.csv --output output.csv")
-
-    # Test case with NO EXPLICIT OUTPUT
-    print(" \n ===  Tool test 2 ==== \n")
-    parse_rscript(test_file2, "Rscript my_r_tool_verbose.R --verbose TRUE --input intput.csv")
-
-    # Test case with tool which has to fail
-    print("\n == Tool test 4: Fail case ==== \n")
-    parse_rscript(test_file4, "Rscript my_r_tool_fail_case.R")