Mercurial > repos > jjohnson > value_from_yaml_or_json
diff value_from_yaml_or_json.xml @ 0:47839d77a281 draft default tip
"planemo upload for repository https://github.com/jj-umn/galaxytools/tree/master/value_from_yaml_or_json commit 28fa7f14add96533ed9538b675a5fb58438566d5-dirty"
author | jjohnson |
---|---|
date | Thu, 14 Jul 2022 17:02:53 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/value_from_yaml_or_json.xml Thu Jul 14 17:02:53 2022 +0000 @@ -0,0 +1,141 @@ +<tool id="value_from_yaml_or_json" name="Value from YAML or JSON" version="0.1.0" python_template_version="3.5"> + <requirements> + </requirements> + <command detect_errors="exit_code"><![CDATA[ +#def getValue(contents, path) + #set $rslt = $contents + #set $keys = path.split(':') + #for k in $keys: + #if isinstance($rslt,dict) + #if k in $rslt.keys() + #set $rslt = $rslt[k] + #else + #for dk in $rslt.keys(): + #if str(dk) == k + #set $rslt = $rslt[dk] + #end if + #end for + #end if + #elif isinstance($rslt,list) + #set $rslt = $rslt[int(k)] + #end if + #end for + #return $rslt +#end def +#set $fh = open(str($input),'r') +#if $input.is_of_type('yaml') +#import yaml +#set $data = $yaml.safe_load(fh.read()) +#else +#import json +#set $data = $json.load($fh) +#end if +#silent $fh.close() +#set $value = $getValue($data, $path) +echo "$value" > '$output' + ]]></command> + <inputs> + <param name="input" type="data" format="yaml,json" label="YAML or JSON from which to extract value"/> + <param name="path" type="text" value="" label="path to value via dict keys or list indices" + help="separate keys/indexes with the colon char : "> + <sanitizer> + <valid initial="string.printable"> + </valid> + </sanitizer> + </param> + </inputs> + <outputs> + <data name="output" format="txt" /> + </outputs> + <tests> + <!-- Test-1 json dict --> + <test> + <param name="input" ftype="json" value="input.json"/> + <param name="path" value="beam:energy"/> + <output name="output"> + <assert_contents> + <has_line line="41.9906" /> + </assert_contents> + </output> + </test> + <!-- Test-2 json list --> + <test> + <param name="input" ftype="json" value="input.json"/> + <param name="path" value="calibration_crystal:0:orientation:1"/> + <output name="output"> + <assert_contents> + <has_line line="0.6945507909200794" /> + </assert_contents> + </output> + </test> + <!-- Test-3 yaml dict --> + <test> + <param name="input" ftype="yaml" value="input.yaml"/> + <param name="path" value="beam:energy"/> + <output name="output"> + <assert_contents> + <has_line line="41.9906" /> + </assert_contents> + </output> + </test> + <!-- Test-4 yaml list --> + <test> + <param name="input" ftype="yaml" value="input.yaml"/> + <param name="path" value="calibration_crystal:0:orientation:1"/> + <output name="output"> + <assert_contents> + <has_line line="0.6945507909200794" /> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +Extract a value from a YAML or JSON dataset and save to the output dataset. +It is expected that this will be most useful in workflows for extracting values that can be linked to parameters. + +*If more elaborate filtering of JSON datasets is required, the* `JQ tool`_ *is available.* + +.. _JQ tool: https://toolshed.g2.bx.psu.edu/view/iuc/jq/5ff75eb1a893 + +----- + +With a JSON or YAML input dataset, specify the path for the value you wish to output by listing the key/index of the elements separated by the colon character. + +**Example Input YAML File** :: + + beam: + energy: 41.9906 + vector: + azimuth: 90.0 + polar_angle: 90.0 + calibration_crystal: + 0: + orientation: + - 1.2148784044413221 + - 0.6945507909200794 + - 0.765702046701113 + position: + - 0.06060121926310595 + - 0.1312120981443553 + - -0.06694059935413639 + 1: + orientation: + - 1.4105172207115466 + - -0.14336674130145605 + - -0.37238882282338215 + position: + - 0.016940740257706914 + - -0.1183857552099456 + - 0.34767784259162654 + +*Specifying path:* **beam:energy** + *outputs:* **41.9906** + +*Specifying path:* **calibration_crystal:1:position:2** + *outputs:* **0.34767784259162654** + +*Specifying path:* **calibration_crystal:1:position** + *outputs:* **[0.016940740257706914, -0.1183857552099456, 0.34767784259162654]** + + ]]></help> +</tool>