diff main_json.py @ 0:8a0659f23df7 draft

planemo upload for repository https://forgemia.inra.fr/nathalie.rousse/erecord-deploy/-/tree/main/galaxy-tools/erecord_json commit 88beb443a737b4c4d42bb0011a26a0acf535c366
author siwaa
date Tue, 12 Dec 2023 17:37:35 +0000
parents
children afc88ac8de69
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_json.py	Tue Dec 12 17:37:35 2023 +0000
@@ -0,0 +1,104 @@
+# -*- coding: UTF-8 -*-
+""" 
+    main_json
+
+    Requests having only 1 json data as OUTput
+
+    Accepts actions :
+    'get_vpz_input' 'post_vpz_input'
+    'get_vpz_output' 'post_vpz_output'
+    'get_vpz_inout' 'post_vpz_inout'
+    'get_pkg_list' 'get_pkg_vpz_list' 'get_pkg_data_list'
+    'help'
+
+    Refused actions :
+    'get_vpz_experiment' 'post_vpz_experiment'
+    'get_vpz_report_conditions' 'post_vpz_report_conditions'
+    'get_vpz_report' 'post_vpz_report'
+
+    Parameters (Inputs) :
+    - '-data' parameter : data (JSON format) (optional)
+      A required action value must be included into data.
+    - '-datafolder' parameter : datafolder file path (optional,
+      available only in some cases)
+
+   Outputs :
+   - output.json data file
+"""
+
+MAIN_DEBUG=False # True for more information returned
+
+import argparse
+import json
+import erecord.api.erecord as erecord_api
+import os
+from erecord.api.cmn.utils.dir_and_file import create_dir_if_absent
+from erecord.api.cmn.configs.config import PROJECT_HOME
+from erecord.api.cmn.configs.config import out_path
+
+PM = "[main_json.py]"
+
+UNACCEPTED_ACTIONS_LIST = ['get_vpz_experiment', 'post_vpz_experiment',
+                   'get_vpz_report_conditions', 'post_vpz_report_conditions',
+                   'get_vpz_report', 'post_vpz_report']
+
+jsonoutput_filepath = os.path.join(out_path, "output.json") # tool.xml uses it
+
+r = dict()
+
+import sys
+if MAIN_DEBUG: r["sys.path"] = sys.path # debug
+if MAIN_DEBUG: r["sys.argv"] = sys.argv # debug
+if MAIN_DEBUG: r["out_path"] = out_path # debug
+
+data = dict()
+json_response = dict()
+
+create_dir_if_absent(PROJECT_HOME) # required
+
+try :
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-data", type=str, help="data json file path")
+    parser.add_argument("-datafolder", type=str, help="datafolder file path")
+
+    args = parser.parse_args()
+
+    if (args.data is None) or (args.data == 'None') :
+        warn = "NO data (JSON format) given => action enforced to 'help'"
+        r["warning"] = warn
+        data = {'action':'help'} # enforced (default)
+    else:
+        jsoninput_filename = args.data
+        inputfile = open(jsoninput_filename, 'r')
+        data = json.load(inputfile) # get data
+
+        if (args.datafolder is None) or (args.datafolder == 'None') :
+            pass # NO datafolder given
+        else :
+            data['datafolder'] = args.datafolder
+
+    # Pre-filtering : Unaccepted actions => enforced to 'help' action
+    if "action" in data.keys() :
+        a = data["action"]
+        if a in UNACCEPTED_ACTIONS_LIST :
+            warn = "Unaccepted action '"+a+"' => action enforced to 'help'"
+            r["warning"] = warn
+            data["action"] = 'help'
+
+    r["data"] = data
+    r_init = erecord_api.init()
+    if MAIN_DEBUG: r["init"] = r_init # debug
+    response = erecord_api.action(data)
+    json_response = json.loads(response)
+
+except Exception as e :
+
+    response = erecord_api.error_case(data=data, msg=PM, e=e)
+    json_response = json.loads(response)
+
+r["response"] = json_response
+
+# Restitution : json file
+with open(jsonoutput_filepath, "w") as outfile:
+    json.dump(r, outfile)
+