2
|
1 <tool id="json_eval" name="JSON Eval" version="1.0">
|
|
2 <description>Evalutate and Format JSON</description>
|
|
3 <command interpreter="python">$script_file</command>
|
|
4 <inputs>
|
|
5 <param name="json_txt" type="text" area="True" size="5x35" label="JSON Text" optional="True">
|
|
6 <sanitizer>
|
|
7 <valid initial="string.printable">
|
|
8 <remove value="""/>
|
|
9 </valid>
|
|
10 <mapping initial="none">
|
|
11 <add source=""" target="\""/>
|
|
12 </mapping>
|
|
13 </sanitizer>
|
|
14 </param>
|
|
15 <param name="json_data" type="data" label="JSON File" optional="True"/>
|
|
16 <param name="multi_line" type="boolean" label="MultiLine file" checked="False"/>
|
|
17 <param name="end_line" type="boolean" label="Add endfiles" checked="True"/>
|
|
18 <param name="eval_txt" type="text" area="True" size="5x35" label="PYTHON Eval">
|
|
19 <sanitizer>
|
|
20 <valid initial="string.printable">
|
|
21 <remove value="""/>
|
|
22 <remove value="\"/>
|
|
23 </valid>
|
|
24 <mapping initial="none">
|
|
25 <add source=""" target="\""/>
|
|
26 <add source="\" target="\\"/>
|
|
27 </mapping>
|
|
28 </sanitizer>
|
|
29 </param>
|
|
30 </inputs>
|
|
31 <outputs>
|
|
32 <data format="txt" name="outfile" />
|
|
33 </outputs>
|
|
34 <configfiles>
|
|
35 <configfile name="script_file"><![CDATA[#!/usr/bin/env python
|
|
36 import os
|
|
37 import sys
|
|
38 import json
|
|
39 from StringIO import StringIO
|
|
40 json_txt = """${json_txt}"""
|
|
41 json_path = """${json_data}"""
|
|
42 eval_txt = """${eval_txt}"""
|
|
43 out_path = """${outfile}"""
|
|
44 multi_line = "${multi_line}"
|
|
45 add_endline = "${end_line}"
|
|
46
|
|
47 print eval_txt
|
|
48
|
|
49 if len(json_path) and json_path != "None":
|
|
50 handle = open(json_path)
|
|
51 else:
|
|
52 handle = StringIO(json_txt)
|
|
53
|
|
54 ohandle = open(out_path, "w")
|
|
55 if multi_line == "true":
|
|
56 for line in handle:
|
|
57 funcmap = {
|
|
58 "len":len,
|
|
59 "value" : json.loads(line)
|
|
60 }
|
|
61 ohandle.write( eval(eval_txt,{"__builtins__":None},funcmap) )
|
|
62 if add_endline == "true":
|
|
63 ohandle.write("\n")
|
|
64
|
|
65 else:
|
|
66 line = handle.read()
|
|
67 funcmap = {
|
|
68 "len":len,
|
|
69 "value" : json.loads(line)
|
|
70 }
|
|
71 ohandle.write( eval(eval_txt,{"__builtins__":None},funcmap) )
|
|
72 if add_endline == "true":
|
|
73 ohandle.write("\n")
|
|
74
|
|
75 handle.close()
|
|
76 ohandle.close()
|
|
77
|
|
78
|
|
79 ]]></configfile>
|
|
80 </configfiles>
|
|
81 <help>
|
|
82 This is a utility to decode JSON data into text info.
|
|
83
|
|
84 The 'multiline' mode assumes that each line in an input is a seperate and complete
|
|
85 JSON record (ie no return characters in the middle of a record)
|
|
86
|
|
87 Given a files with
|
|
88
|
|
89 { "@id" : "Test_1" }
|
|
90 { "@id" : "Test_2" }
|
|
91 { "@id" : "Test_3" }
|
|
92
|
|
93 Example:
|
|
94 value['@id']
|
|
95
|
|
96 Prints out the file:
|
|
97 Test_1
|
|
98 Test_2
|
|
99 Test_3
|
|
100
|
|
101
|
|
102
|
|
103
|
|
104 </help>
|
|
105 </tool>
|