comparison map_param_value.xml @ 1:a01f088d0e5e draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/map_param_value commit 49eab9a9d601cccd50401e5a0221264b5681b64d
author iuc
date Wed, 19 Oct 2022 11:37:19 +0000
parents 43d7b3642a30
children 5ac8a4bf7a8d
comparison
equal deleted inserted replaced
0:43d7b3642a30 1:a01f088d0e5e
1 <tool name="Map parameter value" id="map_param_value" version="0.1.0" tool_type="expression" profile="22.01"> 1 <tool name="Map parameter value" id="map_param_value" version="0.1.1" tool_type="expression" profile="22.01">
2 <macros> 2 <macros>
3 <xml name="when_element" tokens="type_selection"> 3 <xml name="when_element" tokens="type_selection">
4 <param name="input_param" type="@TYPE_SELECTION@" optional="true" label="Map this parameter value to a different value"/> 4 <param name="input_param" type="@TYPE_SELECTION@" optional="true" label="Value to map">
5 <sanitizer sanitize="false"/>
6 </param>
5 <repeat name="mappings" label="Add value mapping"> 7 <repeat name="mappings" label="Add value mapping">
6 <param name="from" type="@TYPE_SELECTION@" optional="true" label="Map from this value"></param> 8 <param name="from" type="@TYPE_SELECTION@" optional="true" label="Map from this value">
7 <param name="to" type="text" label="to this value" help="This value must be coercable to the selected output parameter type"></param> 9 <sanitizer sanitize="false"/>
10 </param>
11 <param name="to" type="text" optional="true" label="to this value" help="This value must be coercable to the selected output parameter type">
12 <sanitizer sanitize="false"/>
13 </param>
8 </repeat> 14 </repeat>
9 </xml> 15 </xml>
10 </macros> 16 </macros>
11 <expression type="ecma5.1"> 17 <expression type="ecma5.1">
12 <![CDATA[{ 18 <![CDATA[{
28 return value 34 return value
29 } 35 }
30 } 36 }
31 37
32 for ( var i = 0; i < mappings.length; i++ ) { 38 for ( var i = 0; i < mappings.length; i++ ) {
33 if ( String(mappings[i].from) == source ) { 39 if ( String(mappings[i].from) == String(source) ) {
34 return { output: coerceToOutput(mappings[i].to) }; 40 return { output: coerceToOutput(mappings[i].to) };
35 } 41 }
36 } 42 }
37 if ( $job.unmapped.on_unmapped == "fail" ) { 43 if ( $job.unmapped.on_unmapped == "fail" ) {
38 return { __error_message: `text_param ${source} not found in mapping values.` }; 44 return { __error_message: `input_param ${source} not found in mapping values.` };
39 } else if ( $job.unmapped.on_unmapped == "default" ) { 45 } else if ( $job.unmapped.on_unmapped == "default" ) {
40 return { output: coerceToOutput($job.unmapped.default_value) }; 46 return { output: coerceToOutput($job.unmapped.default_value) };
41 } 47 }
42 return { output: coerceToOutput(source) }; 48 return { output: coerceToOutput(source) };
43 }]]> 49 }]]>
61 </when> 67 </when>
62 <when value="boolean"> 68 <when value="boolean">
63 <expand macro="when_element" type_selection="boolean"/> 69 <expand macro="when_element" type_selection="boolean"/>
64 </when> 70 </when>
65 </conditional> 71 </conditional>
66 <param name="output_param_type" type="select" label="Select type of parameter to output">
67 <option value="text">Text</option>
68 <option value="integer">Integer</option>
69 <option value="float">Float</option>
70 <option value="boolean">Boolean</option>
71 </param>
72 <conditional name="unmapped"> 72 <conditional name="unmapped">
73 <param name="on_unmapped" type="select" label="Select how"> 73 <param name="on_unmapped" type="select" label="Select how to handle unmapped values">
74 <option value="input">Use unmodified input parameter value if input parameter value not found in mappings</option> 74 <option value="input">Use unmodified input parameter value if input parameter value not found in mappings</option>
75 <option value="fail">Fail if input parameter value not found in mappings</option> 75 <option value="fail">Fail if input parameter value not found in mappings</option>
76 <option value="default">Provide a default value to use if input parameter value not found in mappings</option> 76 <option value="default">Provide a default value to use if input parameter value not found in mappings</option>
77 </param> 77 </param>
78 <when value="input" /> 78 <when value="input" />
79 <when value="fail" /> 79 <when value="fail" />
80 <when value="default"> 80 <when value="default">
81 <param name="default_value" type="text" label="Use this value if the input parameter value was not found in mappings"/> 81 <param name="default_value" type="text" label="Use this value if the input parameter value was not found in mappings"/>
82 </when> 82 </when>
83 </conditional> 83 </conditional>
84 <param name="output_param_type" type="select" label="Select type of parameter to output">
85 <option value="text">Text</option>
86 <option value="integer">Integer</option>
87 <option value="float">Float</option>
88 <option value="boolean">Boolean</option>
89 </param>
84 </inputs> 90 </inputs>
85 <outputs> 91 <outputs>
86 <output type="text" name="output_param_text" from="output"> 92 <output type="text" name="output_param_text" from="output">
87 <filter>output_param_type == 'text'</filter> 93 <filter>output_param_type == 'text'</filter>
88 </output> 94 </output>
96 <filter>output_param_type == 'boolean'</filter> 102 <filter>output_param_type == 'boolean'</filter>
97 </output> 103 </output>
98 </outputs> 104 </outputs>
99 <tests> 105 <tests>
100 <test expect_num_outputs="1"> 106 <test expect_num_outputs="1">
107 <!-- map string A to string B -->
101 <conditional name="input_param_type"> 108 <conditional name="input_param_type">
102 <param name="type" value="text"/> 109 <param name="type" value="text"/>
103 <param name="input_param" value="A" /> 110 <param name="input_param" value="A" />
104 <repeat name="mappings"> 111 <repeat name="mappings">
105 <param name="from" value="A" /> 112 <param name="from" value="A" />
107 </repeat> 114 </repeat>
108 </conditional> 115 </conditional>
109 <output name="output_param_text" value_json="&quot;B&quot;" /> 116 <output name="output_param_text" value_json="&quot;B&quot;" />
110 </test> 117 </test>
111 <test expect_num_outputs="1"> 118 <test expect_num_outputs="1">
119 <!-- test that mapping works in the presence of usually sanitized characters -->
120 <conditional name="input_param_type">
121 <param name="type" value="text"/>
122 <param name="input_param" value="echo $abc &gt; 1" />
123 <repeat name="mappings">
124 <param name="from" value="echo $abc &gt; 1" />
125 <param name="to" value="echo $abc &gt; 2" />
126 </repeat>
127 </conditional>
128 <output name="output_param_text" value_json="&quot;echo $abc &gt; 2&quot;" />
129 </test>
130 <test expect_num_outputs="1">
131 <!-- keep unmodified input if no match in mapping values -->
112 <conditional name="input_param_type"> 132 <conditional name="input_param_type">
113 <param name="input_param" value="C" /> 133 <param name="input_param" value="C" />
114 <repeat name="mappings"> 134 <repeat name="mappings">
115 <param name="from" value="A" /> 135 <param name="from" value="A" />
116 <param name="to" value="B" /> 136 <param name="to" value="B" />
117 </repeat> 137 </repeat>
118 </conditional> 138 </conditional>
119 <output name="output_param_text" value_json="&quot;C&quot;" /> 139 <output name="output_param_text" value_json="&quot;C&quot;" />
120 </test> 140 </test>
121 <test expect_num_outputs="1" expect_failure="true"> 141 <test expect_failure="true">
142 <!-- fail job if no mapping found and on_unmapped is set to fail -->
122 <conditional name="input_param_type"> 143 <conditional name="input_param_type">
123 <param name="input_param" value="C" /> 144 <param name="input_param" value="C" />
124 <repeat name="mappings"> 145 <repeat name="mappings">
125 <param name="from" value="A" /> 146 <param name="from" value="A" />
126 <param name="to" value="B" /> 147 <param name="to" value="B" />
129 <conditional name="unmapped"> 150 <conditional name="unmapped">
130 <param name="on_unmapped" value="fail"/> 151 <param name="on_unmapped" value="fail"/>
131 </conditional> 152 </conditional>
132 </test> 153 </test>
133 <test expect_num_outputs="1"> 154 <test expect_num_outputs="1">
134 <conditional name="input_param_type"> 155 <!-- map unspecified option text to string default via unmapped default value -->
135 <param name="input_param" value="C" /> 156 <conditional name="input_param_type">
136 <repeat name="mappings"> 157 <repeat name="mappings">
137 <param name="from" value="A" /> 158 <param name="from" value="A" />
138 <param name="to" value="B" /> 159 <param name="to" value="B" />
139 </repeat> 160 </repeat>
140 </conditional> 161 </conditional>
141 <conditional name="unmapped"> 162 <conditional name="unmapped">
142 <param name="on_unmapped" value="default"/> 163 <param name="on_unmapped" value="default"/>
143 <param name="default_value" value="D"/> 164 <param name="default_value" value="default"/>
144 </conditional> 165 </conditional>
145 <param name="output_param_text" value_json="&quot;D&quot;" /> 166 <output name="output_param_text" value_json="&quot;default&quot;" />
146 </test> 167 </test>
147 <test expect_num_outputs="1"> 168 <test expect_num_outputs="1">
169 <!-- map string C to string X via default value -->
148 <conditional name="input_param_type"> 170 <conditional name="input_param_type">
149 <param name="input_param" value="C" /> 171 <param name="input_param" value="C" />
150 <repeat name="mappings"> 172 <repeat name="mappings">
151 <param name="from" value="A" /> 173 <param name="from" value="A" />
152 <param name="to" value="B" /> 174 <param name="to" value="B" />
154 </conditional> 176 </conditional>
155 <conditional name="unmapped"> 177 <conditional name="unmapped">
156 <param name="on_unmapped" value="default"/> 178 <param name="on_unmapped" value="default"/>
157 <param name="default_value" value="X"/> 179 <param name="default_value" value="X"/>
158 </conditional> 180 </conditional>
159 <param name="output_param_text" value_json="&quot;X&quot;" /> 181 <output name="output_param_text" value_json="&quot;X&quot;" />
160 </test> 182 </test>
161 <test expect_num_outputs="1"> 183 <test expect_num_outputs="1">
184 <!-- map string C to string D in presence of multiple mappings -->
162 <conditional name="input_param_type"> 185 <conditional name="input_param_type">
163 <param name="input_param" value="C" /> 186 <param name="input_param" value="C" />
164 <repeat name="mappings"> 187 <repeat name="mappings">
165 <param name="from" value="A" /> 188 <param name="from" value="A" />
166 <param name="to" value="B" /> 189 <param name="to" value="B" />
168 <repeat name="mappings"> 191 <repeat name="mappings">
169 <param name="from" value="C" /> 192 <param name="from" value="C" />
170 <param name="to" value="D" /> 193 <param name="to" value="D" />
171 </repeat> 194 </repeat>
172 </conditional> 195 </conditional>
173 <param name="output_param_text" value_json="&quot;D&quot;" /> 196 <output name="output_param_text" value_json="&quot;D&quot;" />
174 </test> 197 </test>
175 <test expect_num_outputs="1"> 198 <test expect_num_outputs="1">
199 <!-- map integer 42 to integer true value -->
176 <conditional name="input_param_type"> 200 <conditional name="input_param_type">
177 <param name="type" value="integer" /> 201 <param name="type" value="integer" />
178 <param name="input_param" value="42" /> 202 <param name="input_param" value="42" />
179 <repeat name="mappings"> 203 <repeat name="mappings">
180 <param name="from" value="42" /> 204 <param name="from" value="42" />
181 <param name="to" value="true" /> 205 <param name="to" value="true" />
182 </repeat> 206 </repeat>
183 </conditional> 207 </conditional>
184 <param name="output_param_type" value="boolean"/> 208 <param name="output_param_type" value="boolean"/>
185 <param name="output_param_boolean" value_json="true" /> 209 <output name="output_param_boolean" value_json="true" />
186 </test> 210 </test>
187 <test expect_num_outputs="1"> 211 <test expect_num_outputs="1">
212 <!-- map float 1.2 to boolean false via unmapped default value -->
188 <conditional name="input_param_type"> 213 <conditional name="input_param_type">
189 <param name="type" value="float" /> 214 <param name="type" value="float" />
190 <param name="input_param" value="1.2" /> 215 <param name="input_param" value="1.2" />
191 <repeat name="mappings"> 216 <repeat name="mappings">
192 <param name="from" value="42" /> 217 <param name="from" value="42" />
196 <conditional name="unmapped"> 221 <conditional name="unmapped">
197 <param name="on_unmapped" value="default"/> 222 <param name="on_unmapped" value="default"/>
198 <param name="default_value" value="False"/> 223 <param name="default_value" value="False"/>
199 </conditional> 224 </conditional>
200 <param name="output_param_type" value="boolean"/> 225 <param name="output_param_type" value="boolean"/>
201 <param name="output_param_boolean" value_json="false" /> 226 <output name="output_param_boolean" value_json="false" />
202 </test> 227 </test>
203 <test expect_num_outputs="1"> 228 <test expect_num_outputs="1">
229 <!-- map integer 1 to float 1.1 -->
204 <conditional name="input_param_type"> 230 <conditional name="input_param_type">
205 <param name="type" value="integer" /> 231 <param name="type" value="integer" />
206 <param name="input_param" value="1" /> 232 <param name="input_param" value="1" />
207 <repeat name="mappings"> 233 <repeat name="mappings">
208 <param name="from" value="1" /> 234 <param name="from" value="1" />
209 <param name="to" value="1.1" /> 235 <param name="to" value="1.1" />
210 </repeat> 236 </repeat>
211 </conditional> 237 </conditional>
212 <param name="output_param_type" value="float"/> 238 <param name="output_param_type" value="float"/>
213 <param name="output_param_float" value_json="1.1" /> 239 <output name="output_param_float" value_json="1.1" />
214 </test> 240 </test>
215 <test expect_num_outputs="1"> 241 <test expect_num_outputs="1">
216 <conditional name="input_param_type"> 242 <!-- map string A to integer 2 -->
217 <param name="type" value="string" /> 243 <conditional name="input_param_type">
244 <param name="type" value="text" />
218 <param name="input_param" value="A" /> 245 <param name="input_param" value="A" />
219 <repeat name="mappings"> 246 <repeat name="mappings">
220 <param name="from" value="A" /> 247 <param name="from" value="A" />
221 <param name="to" value="2" /> 248 <param name="to" value="2" />
222 </repeat> 249 </repeat>
223 </conditional> 250 </conditional>
224 <param name="output_param_type" value="integer"/> 251 <param name="output_param_type" value="integer"/>
225 <param name="output_param_float" value_json="2" /> 252 <output name="output_param_integer" value_json="2" />
226 </test> 253 </test>
254 <test expect_num_outputs="1">A
255 <!-- map string False to boolean false -->
256 <conditional name="input_param_type">
257 <param name="type" value="text" />
258 <param name="input_param" value="False" />
259 <repeat name="mappings">
260 <param name="from" value="False" />
261 <param name="to" value="false" />
262 </repeat>
263 </conditional>
264 <conditional name="unmapped">
265 <param name="on_unmapped" value="fail"/>
266 </conditional>
267 <param name="output_param_type" value="boolean"/>
268 <output name="output_param_boolean" value_json="false" />
269 </test>
270 <test expect_num_outputs="1">
271 <!-- map boolean false to boolean true -->
272 <conditional name="input_param_type">
273 <param name="type" value="boolean" />
274 <param name="input_param" value="false" />
275 <repeat name="mappings">
276 <param name="from" value="false" />
277 <param name="to" value="true" />
278 </repeat>
279 </conditional>
280 <conditional name="unmapped">
281 <param name="on_unmapped" value="fail"/>
282 </conditional>
283 <param name="output_param_type" value="boolean"/>
284 <output name="output_param_boolean" value_json="true" />
285 </test>
286 <test expect_num_outputs="1">
287 <!-- map integer 0 to boolean false via default value coercion -->
288 <conditional name="input_param_type">
289 <param name="type" value="integer" />
290 <param name="input_param" value="0" />
291 </conditional>
292 <param name="output_param_type" value="boolean"/>
293 <output name="output_param_boolean" value_json="false" />
294 </test>
295 <test expect_num_outputs="1">
296 <!-- map null text value to boolean true -->
297 <conditional name="input_param_type">
298 <param name="type" value="text" />
299 <param name="input_param" value_json="null" />
300 <repeat name="mappings">
301 <param name="from" value_json="null" />
302 <param name="to" value="true" />
303 </repeat>
304 </conditional>
305 <param name="output_param_type" value="boolean"/>
306 <output name="output_param_boolean" value_json="true" />
307 </test>
308 <test expect_num_outputs="1" doc="map null integer value to boolean true">
309 <!-- map null integer value to boolean true -->
310 <conditional name="input_param_type">
311 <param name="type" value="integer" />
312 <param name="input_param" value_json="null" />
313 <repeat name="mappings">
314 <param name="from" value_json="null" />
315 <param name="to" value="true" />
316 </repeat>
317 </conditional>
318 <param name="output_param_type" value="boolean"/>
319 <output name="output_param_boolean" value_json="true" />
320 </test>
321 <test expect_num_outputs="1">
322 <!-- map integer value to null text -->
323 <conditional name="input_param_type">
324 <param name="type" value="integer" />
325 <param name="input_param" value="1" />
326 <repeat name="mappings">
327 <param name="from" value="1" />
328 <param name="to" value_json="null" />
329 </repeat>
330 </conditional>
331 <param name="output_param_type" value="text"/>
332 <output name="output_param_text" value_json="null" />
333 </test>
334 <!-- Old Galaxy issue, optional unset text input still recorded as ""
335 We could work around this with a conditional, but no usecase yet
336 and we should better fix this in Galaxy
337 <test expect_num_outputs="1">
338 <conditional name="input_param_type">
339 <param name="input_param" value="A" />
340 <repeat name="mappings">
341 <param name="from" value="A" />
342 </repeat>
343 </conditional>
344 <output name="output_param_text" value_json="null" />
345 </test>
346 -->
227 </tests> 347 </tests>
228 <help><![CDATA[ 348 <help><![CDATA[
229 **What it does** 349 **What it does**
230 350
231 Maps a parameter value to another value. 351 Maps a parameter value to another value.