Mercurial > repos > siwaa > erecord_json
changeset 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 | d87b8a1073ad |
files | erecord_json.xml main_json.py |
diffstat | 2 files changed, 195 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/erecord_json.xml Tue Dec 12 17:37:35 2023 +0000 @@ -0,0 +1,91 @@ +<tool id="erecord_json" name="erecord_json" version="1.0.0"> + + <description>erecord returning .json</description> + + <requirements> + + <!-- singularity --> + <container type="singularity">oras://registry.forgemia.inra.fr/nathalie.rousse/erecord-deploy/erecord_rep0_vle2:82d8fea607be20851e194828125785fb0f7e96d0</container> + + </requirements> + + <command detect_errors="aggressive"> + <![CDATA[ + /bin/bash -c "python3 $__tool_directory__/main_json.py -data ${input_json} -datafolder ${datafolder}"; + cp WS/OUT/output.json ${output_json}; + ]]> + </command> + + <inputs> + + <param name="input_json" optional="true" type="data" format="json" + label="Input json file"/> + + <param name="datafolder" optional="true" type="data" format="zip" + label="Add a datafolder zip file (available and used only in 'post_vpz_output' or 'post_vpz_inout' cases)" + help="Precisions sur forme du dossier..."/> + + </inputs> + + <outputs> + <data format="json" name="output_json" label="jsonoutput"/> + </outputs> + + <tests> + </tests> + + <help><![CDATA[ + +erecord_json.xml + +================ + +Actions: + +------- + +- Available : + - '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' + +- Unavailable (actions with 2 output files) : + - 'get_vpz_experiment' 'post_vpz_experiment' + - 'get_vpz_report_conditions' 'post_vpz_report_conditions' + - 'get_vpz_report' 'post_vpz_report' + +Code: + +---- + +- main_json.py + +Inputs: + +------- + +- data json file (optional) (json file, param type="data") + + This file contains the action value + +- datafolder (optional) (only in 'post_vpz_output', 'post_vpz_inout' cases) + +Outputs: + +-------- + +- data json file (no other file returned) + +Credits: + +-------- + +- Author: Nathalie Rousse nathalie.rousse@inrae.fr +- Copyright: INRAE + + ]]> + </help> + +</tool>
--- /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) +