changeset 2:a9579c344a90 draft default tip

planemo upload commit 8f84e3911c6ff4103c0ad5fb8dd774f80d9b2559
author mingchen0919
date Fri, 23 Mar 2018 21:50:16 -0400
parents ddc3c3527f49
children
files dynamic_tool.Rmd dynamic_tool.xml dynamic_tool_render.R dynamic_tool_wrappers_macros.xml
diffstat 4 files changed, 111 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/dynamic_tool.Rmd	Fri Mar 23 02:01:52 2018 -0400
+++ b/dynamic_tool.Rmd	Fri Mar 23 21:50:16 2018 -0400
@@ -3,6 +3,15 @@
 output: html_document
 ---
 
+<style>
+pre code, pre, code {
+  white-space: pre !important;
+  overflow-x: scroll !important;
+  word-break: keep-all !important;
+  word-wrap: initial !important;
+}
+</style>
+
 ```{r setup, include=FALSE, warning=FALSE, message=FALSE}
 knitr::opts_chunk$set(error = TRUE)
 ```
@@ -16,13 +25,23 @@
 df = read.table(paste0(Sys.getenv('REPORT_FILES_PATH'), '/options_and_arguments.txt'), 
                 sep = '|', header = TRUE)
 
+# prepend A_TOOL_OUTPUT_PATH
+if (nrow(df[df$type == 'path_relative_to_a_tool', ]) > 0) {
+  for (i in 1:nrow(df[df$type == 'path_relative_to_a_tool', ])) {
+    root_path = readLines(df[df$type == 'path_relative_to_a_tool', ][i, 'path_type'])[1]
+    df[df$type == 'path_relative_to_a_tool', ][i, 'value'] = paste(root_path, 
+                                                                   df[df$type == 'path_relative_to_a_tool', ][i, 'value'], 
+                                                                   sep = '/')
+  }
+}
+
 # get tool name
 tool_name = df[df$type == 'tool_name', 'value']
 # build script for displaying help messages (this probably should be tool specific)
 write(paste0(tool_name, ' -h'), 
         file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/help.sh'))
 
-knitr::kable(df[, c('flag', 'value')])
+knitr::kable(df)
 
 # if the number of option/argument pairs is larger than 0, build script file
 df2 = df[df$type != 'tool_name', ]
@@ -56,13 +75,31 @@
 sh ${REPORT_FILES_PATH}/help.sh > ${TOOL_HELP_DOC}
 ```
 
-```{bash, results='asis', echo=FALSE}
-echo '## Show help documentation'
-echo ''
-echo ''
-echo '```bash'
-cat ${REPORT_FILES_PATH}/help.sh
-echo '```'
+
+```{r, echo=FALSE}
+# create paths before running the job script
+df_paths = df[df$type == 'path_relative_to_this_tool', ]
+
+if (nrow(df_paths) > 0) {
+  for (i in 1:nrow(df_paths)) {
+    path = paste0(Sys.getenv('REPORT_FILES_PATH'), '/', df_paths[i, 'value'])
+    path_type = df_paths[i, 'path_type']
+  
+    # create file paths
+    if ((path_type == 'file_path') & !file.exists(path)) {
+      dir_path = paste(head(strsplit(path, '/')[[1]], -1), collapse = '/' )
+      if (!dir.exists(dir_path)) {
+        dir.create(dir_path, recursive = TRUE)
+      }
+      file.create(path)
+    }
+    
+    # create dir paths
+    if ((path_type == 'dir_path') & !dir.exists(path)) {
+      dir.create(path, recursive = TRUE)
+    }
+  }
+}
 ```
 
 
@@ -72,6 +109,8 @@
 cd ${REPORT_FILES_PATH} && sh script.sh
 ```
 
+
+
 ```{bash, results='asis', echo=FALSE}
 echo '## Job script'
 echo ''
@@ -82,6 +121,15 @@
 ```
 
 
+```{r, echo=FALSE}
+## obtain REPORT_FILES_PAHT and save it to a galaxy output.
+database_root = paste(head(strsplit(Sys.getenv('TOOL_LOG'), '/')[[1]], -1), collapse = '/')
+tool_output_dir_id = tail(strsplit(Sys.getenv('REPORT_FILES_PATH'), '/')[[1]], 1)
+tool_output_dir = paste0(database_root, '/', tool_output_dir_id)
+write(tool_output_dir, Sys.getenv('TOOL_OUTPUT_DIR'))
+```
+
+
 ```{r, results='asis', echo=FALSE}
 cat('##All output files')
 cat('\n\n')
--- a/dynamic_tool.xml	Fri Mar 23 02:01:52 2018 -0400
+++ b/dynamic_tool.xml	Fri Mar 23 21:50:16 2018 -0400
@@ -10,12 +10,11 @@
     <expand macro="shell_command" />
     <inputs>
         <expand macro="tool_name" />
-        <expand macro="option_argument_one_dataset" />
+        <expand macro="option_argument_single_dataset" />
         <expand macro="option_argument_multiple_datasets" />
-        <expand macro="option_argument_path_relative_to_upstream_tool" />
-        <expand macro="option_argument_string" />
-        <expand macro="option_argument_float" />
-        <expand macro="option_argument_integer" />
+        <expand macro="option_argument_path_relative_to_a_tool" />
+        <expand macro="option_argument_path_relative_to_this_tool" />
+        <expand macro="option_argument_string_float_integer" />
     </inputs>
     <outputs>
         <expand macro="output_set" />
--- a/dynamic_tool_render.R	Fri Mar 23 02:01:52 2018 -0400
+++ b/dynamic_tool_render.R	Fri Mar 23 21:50:16 2018 -0400
@@ -8,7 +8,6 @@
 #------------import libraries--------------------
 options(stringsAsFactors = FALSE)
 
-library(getopt)
 library(rmarkdown)
 #------------------------------------------------
 
@@ -18,8 +17,14 @@
 
 
 #-----------------render Rmd--------------
-render(paste0(Sys.getenv('TOOL_INSTALL_DIR'), '/dynamic_tool.Rmd'), 
-       output_file = Sys.getenv('REPORT'))
+render(paste0(Sys.getenv('TOOL_INSTALL_DIR'), '/dynamic_tool.Rmd'),
+       output_file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/report.html'))
+
+# for some unknow reason, directly using REPORT as the input value for output_file parameter
+# in the render function can cause empty report file when the tool runs in batch mode.
+# the solution is to render the rmarkdown to a explicitly specified file and then copy the
+# file to ${REPORT}
+system(command = 'cp ${REPORT_FILES_PATH}/report.html ${REPORT}')
 #------------------------------------------
 
 
--- a/dynamic_tool_wrappers_macros.xml	Fri Mar 23 02:01:52 2018 -0400
+++ b/dynamic_tool_wrappers_macros.xml	Fri Mar 23 21:50:16 2018 -0400
@@ -22,41 +22,46 @@
 
     <!--OPTION/ARGUMENT PAIRS and INPUT types-->
     <!--input files-->
-    <xml name="option_argument_one_dataset">
-        <repeat name="option_argument_one_dataset_repeat" title="OPTION and ARGUMENT: input one dataset" min="0" default="0">
+    <xml name="option_argument_single_dataset">
+        <repeat name="option_argument_single_dataset_repeat" title="INPUT SINGLE DATASET" min="0" default="0">
             <param type="text" name="flag" optional="true" label="flag" />
-            <param name="value" type="data" optional="true" multiple="false" label="value"/>
+            <param name="value" type="data" optional="false" multiple="false" label="value"/>
         </repeat>
     </xml>
+
     <xml name="option_argument_multiple_datasets">
-        <repeat name="option_argument_multiple_datasets_repeat" title="OPTION and ARGUMENT: input multiple datasets" min="0" default="0">
+        <repeat name="option_argument_multiple_datasets_repeat" title="INPUT MULTIPLE DATASETS" min="0" default="0">
             <param type="text" name="flag" optional="true" label="flag" />
-            <param name="value" type="data" optional="true" multiple="true" label="value" />
+            <param name="value" type="data" optional="false" multiple="true" label="value"/>
+            <param type="select" name="delimiter" multiple="false" label="file delimiter">
+                <option value=" " selected="false">space</option>
+                <option value="," selected="false">comma</option>
+            </param>
         </repeat>
     </xml>
-    <xml name="option_argument_path_relative_to_upstream_tool">
-        <repeat name="option_argument_path_relative_to_upstream_tool_repeat" title="OPTION and ARGUMENT: path relative to upstream tool" min="0" default="0">
+    
+    <!--input path-->
+    <xml name="option_argument_path_relative_to_a_tool">
+        <repeat name="option_argument_path_relative_to_a_tool_repeat" title="INPUT PATH: path relative to a tool" min="0" default="0">
             <param type="text" name="flag" optional="true" label="flag"  />
-            <param name="upstream_tool_output_dir" type="data" optional="true" multiple="false" label="upstream tool output directory"/>
+            <param name="a_tool_output_dir" type="data" optional="false" multiple="false" label="a tool output directory"/>
             <param type="text" name="value" optional="true" label="value"  />
         </repeat>
     </xml>
-
-    <!--input values: string, float and integer-->
-    <xml name="option_argument_string">
-        <repeat name="option_argument_string_repeat" title="OPTION and ARGUMENT: input string" min="0" default="0">
-            <param type="text" name="flag" label="flag"  />
-            <param type="text" name="value"  label="value"  />
+    <xml name="option_argument_path_relative_to_this_tool">
+        <repeat name="option_argument_path_relative_to_this_tool_repeat" title="INPUT PATH: path relative to this tool" min="0" default="0">
+            <param type="text" name="flag" optional="true" label="flag"  />
+            <param type="text" name="value" optional="false" label="value"  />
+            <param type="select" name="path_type" multiple="false" label="path type">
+                <option value="file_path" selected="false">file path</option>
+                <option value="dir_path" selected="false">directory path</option>
+            </param>
         </repeat>
     </xml>
-    <xml name="option_argument_float">
-        <repeat name="option_argument_float_repeat" title="OPTION and ARGUMENT: input float" min="0" default="0">
-            <param type="text" name="flag" label="flag"  />
-            <param type="text" name="value" label="value"  />
-        </repeat>
-    </xml>
-    <xml name="option_argument_integer">
-        <repeat name="option_argument_integer_repeat" title="OPTION and ARGUMENT: input integer" min="0" default="0">
+    
+    <!--input values: string, float and integer-->
+    <xml name="option_argument_string_float_integer">
+        <repeat name="option_argument_string_float_integer_repeat" title="INPUT VALUE: string/float/integer" min="0" default="0">
             <param type="text" name="flag" label="flag"  />
             <param type="text" name="value"  label="value"  />
         </repeat>
@@ -90,54 +95,47 @@
         #########################
 
         ## first line will be the header
-        echo 'type|flag|value' > options_and_arguments.txt &&
+        echo 'type|flag|value|path_type' > options_and_arguments.txt &&
 
         ############ tool_name
         ##-t '$tool_name'
-        echo "tool_name|tool_flag|${tool_name}" >> options_and_arguments.txt &&
+        echo "tool_name|not available|${tool_name}|not available" >> options_and_arguments.txt &&
 
         ####################################################
         ## loop through repeats to get option/argument pairs
         ####################################################
 
-        ############ option_argument_one_dataset
-        #for i in $option_argument_one_dataset_repeat:
-            #set $item = 'one_dataset|' + str($i.flag) + "|" + str($i.value)
+        ############ option_argument_single_dataset
+        #for i in $option_argument_single_dataset_repeat:
+            #set $item = 'single_dataset|' + str($i.flag) + "|" + str($i.value) + "|"
             echo '$item' >> options_and_arguments.txt &&
         #end for
 
         ############ option_argument_multiple_datasets
         #for i in $option_argument_multiple_datasets_repeat:
-            #set $item = 'multiple_datasets|' + str($i.flag) + "|" + str($i.value)
+            #set $item = 'multiple_datasets|' + str($i.flag) + "|" + str($i.value).replace(',', str($i.delimiter)) + "|"
             echo '$item' >> options_and_arguments.txt &&
         #end for
 
-        ############ option_argument_path_relative_to_upstream_tool
-        #for i in $option_argument_path_relative_to_upstream_tool_repeat:
-             #set $item = 'path_relative_to_upstream_tool|' + str($i.flag) + "|" + str($i.value)
+
+        ############ option_argument_path_relative_to_a_tool
+        #for i in $option_argument_path_relative_to_a_tool_repeat:
+             #set $item = 'path_relative_to_a_tool|' + str($i.flag) + "|" + str($i.value) + "|" + str($i.a_tool_output_dir)
              echo '$item' >> options_and_arguments.txt &&
         #end for
 
-        ############ option_argument_string
-        #for i in $option_argument_string_repeat:
-             #set $item = 'string|' + str($i.flag) + "|" + str($i.value)
+        ############ option_argument_path_relative_to_this_tool
+        #for i in $option_argument_path_relative_to_this_tool_repeat:
+             #set $item = 'path_relative_to_this_tool|' + str($i.flag) + "|" + str($i.value) + "|" + str($i.path_type)
              echo '$item' >> options_and_arguments.txt &&
         #end for
 
-        ############ option_argument_float
-        #for i in $option_argument_float_repeat:
-             #set $item = 'float|' + str($i.flag) + "|" + str($i.value)
+        ############ option_argument_string_float_integer
+        #for i in $option_argument_string_float_integer_repeat:
+             #set $item = 'value|' + str($i.flag) + "|" + str($i.value) + "|"
              echo '$item' >> options_and_arguments.txt &&
         #end for
 
-
-        ############ option_argument_integer
-        #for i in $option_argument_integer_repeat:
-             #set $item = 'integer|' + str($i.flag) + "|" + str($i.value)
-             echo '$item' >> options_and_arguments.txt &&
-        #end for
-
-
         ############ output_set
         ## '$report'
         ## '$report.files_path'
@@ -152,9 +150,6 @@
         export TOOL_LOG='$tool_log' &&
 
 
-        ############ save tool files path to a tool output so that it can be accessed from galaxy history
-        echo '$report.files_path' > $tool_output_dir &&
-
         ############ run render R script to render R markdowns
         Rscript '${__tool_directory__}/dynamic_tool_render.R'