Mercurial > repos > siwaa > erecord_text
comparison main_text.py @ 0:5edb952b394e draft default tip
planemo upload for repository https://forgemia.inra.fr/nathalie.rousse/erecord-deploy/-/tree/main/galaxy-tools/erecord_text commit c9272a57d834895bf21c987be7d7416532cfa23f-dirty
author | siwaa |
---|---|
date | Tue, 27 Feb 2024 07:58:55 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:5edb952b394e |
---|---|
1 # -*- coding: UTF-8 -*- | |
2 """ | |
3 main_text | |
4 | |
5 Requests having only 1 json data as OUTput | |
6 | |
7 Accepts actions : | |
8 'get_vpz_input' 'post_vpz_input' | |
9 'get_vpz_output' 'post_vpz_output' | |
10 'get_vpz_inout' 'post_vpz_inout' | |
11 'get_pkg_list' 'get_pkg_vpz_list' 'get_pkg_data_list' | |
12 'help' | |
13 | |
14 Refused actions : | |
15 'get_vpz_experiment' 'post_vpz_experiment' | |
16 'get_vpz_report_conditions' 'post_vpz_report_conditions' | |
17 'get_vpz_report' 'post_vpz_report' | |
18 | |
19 Parameters (Inputs) : | |
20 - '-data' parameter : data (string format) (optional) | |
21 A required action value must be included into data. | |
22 - '-datafolder' parameter : datafolder file path (optional, | |
23 available only in some cases) | |
24 | |
25 Outputs : | |
26 - output.json data file (jsonoutput_filepath) | |
27 """ | |
28 | |
29 MAIN_DEBUG=False # True for more information returned | |
30 | |
31 import argparse | |
32 import json | |
33 import erecord.api.erecord as erecord_api | |
34 | |
35 import os | |
36 | |
37 PM = "[main_text.py]" | |
38 | |
39 UNACCEPTED_ACTIONS_LIST = ['get_vpz_experiment', 'post_vpz_experiment', | |
40 'get_vpz_report_conditions', 'post_vpz_report_conditions', | |
41 'get_vpz_report', 'post_vpz_report'] | |
42 | |
43 r = dict() | |
44 | |
45 import sys | |
46 if MAIN_DEBUG: r["sys.path"] = sys.path # debug | |
47 if MAIN_DEBUG: r["sys.argv"] = sys.argv # debug | |
48 | |
49 data = dict() | |
50 json_response = dict() | |
51 | |
52 # default configuration + maybe some modifications | |
53 config = erecord_api.conf() # default (vle-2.0.0 version) | |
54 config.DB_add_vpz(vpz_id=1312, vpzname="wwdm.vpz", pkgname="wwdm") | |
55 | |
56 try : | |
57 parser = argparse.ArgumentParser() | |
58 parser.add_argument("-data", type=str, help="data in string format") | |
59 parser.add_argument("-datafolder", type=str, help="datafolder file path") | |
60 | |
61 args = parser.parse_args() | |
62 | |
63 if (args.data is None) or (args.data == 'None') : | |
64 warn = "NO data (string format) given => action enforced to 'help'" | |
65 r["warning"] = warn | |
66 data = {'action':'help'} # enforced (default) | |
67 else: | |
68 #jsoninput_filename = args.data | |
69 #inputfile = open(jsoninput_filename, 'r') | |
70 #data = json.load(inputfile) # get data | |
71 | |
72 # examples | |
73 # {"action":"pkg_list"} | |
74 # {"action": "post_vpz_output", "pkgname": "wwdm", "vpzname": "wwdm.vpz", "style": "compactlist", "plan":"linear", "restype" : "matrix", "cond_wwdm.A": [0.0063, 0.0065, 0.0067], "cond_wwdm.B": 0.00201, "duration":6.0, "outselect": "view"} | |
75 | |
76 jsoninput_text = args.data | |
77 try : | |
78 | |
79 # restore sanitized text | |
80 MAPPING = {'>': '__gt__', '<': '__lt__', "'": '__sq__', '"': '__dq__', '[': '__ob__', ']': '__cb__', '{': '__oc__', '}': '__cc__', '@': '__at__', '\n': '__cn__', '\r': '__cr__', '\t': '__tc__', '#': '__pd__'} | |
81 for key, value in MAPPING.items(): | |
82 jsoninput_text = jsoninput_text.replace(value, key) | |
83 | |
84 data = json.loads(jsoninput_text) # get data | |
85 except: | |
86 warn = "Failed to get json data from string '" +jsoninput_text+ "'" | |
87 warn = warn + " => action enforced to 'help'" | |
88 r["warning"] = warn | |
89 data = {'action':'help'} # enforced (default) | |
90 | |
91 if (args.datafolder is None) or (args.datafolder == 'None') : | |
92 pass # NO datafolder given | |
93 else : | |
94 data['datafolder'] = args.datafolder | |
95 | |
96 # Pre-filtering : Unaccepted actions => enforced to 'help' action | |
97 if "action" in data.keys() : | |
98 a = data["action"] | |
99 if a in UNACCEPTED_ACTIONS_LIST : | |
100 warn = "Unaccepted action '"+a+"' => action enforced to 'help'" | |
101 r["warning"] = warn | |
102 data["action"] = 'help' | |
103 | |
104 r["data"] = data | |
105 | |
106 # configuration | |
107 if MAIN_DEBUG: r["config"] = config.get_as_dict() # debug | |
108 | |
109 r_init = erecord_api.init(config) | |
110 if MAIN_DEBUG: r["init"] = r_init # debug | |
111 | |
112 response = erecord_api.action(config, data) | |
113 json_response = json.loads(response) | |
114 | |
115 except Exception as e : | |
116 | |
117 response = erecord_api.error_case(data=data, msg=PM, e=e) | |
118 json_response = json.loads(response) | |
119 | |
120 r["response"] = json_response | |
121 | |
122 try : | |
123 # Restitution : json file | |
124 jsonoutput_filepath = os.path.join(config.out_path, | |
125 config.jsonoutput_filename) | |
126 with open(jsonoutput_filepath, "w") as outfile: | |
127 json.dump(r, outfile) | |
128 | |
129 except : | |
130 print(PM, " -- error when trying to open output json file --") | |
131 |