# HG changeset patch # User tduigou # Date 1753263614 0 # Node ID c4f98010d9ac6f5dd8a4de17f8a006436be3ea62 planemo upload for repository https://github.com/brsynth/galaxytools/tree/main/tools/parameters_maystro commit db4ac861e1d03fcdfe94321d858839124e493930-dirty diff -r 000000000000 -r c4f98010d9ac maystro.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maystro.py Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,98 @@ +import argparse +import tempfile +import os +import json +import shutil + + +def parse_command_line_args(): + parser = argparse.ArgumentParser(description="Maystro JSON Handler") + + parser.add_argument("--distribute_json", required=True, help="true or false") + parser.add_argument("--json_from_workflow", required=False, nargs='+', help="JSON files from tools", default=[]) + parser.add_argument("--json_from_user", required=False, help="User-provided JSON") + parser.add_argument("--json_name_mapping", required=True, help="map the real json name") + parser.add_argument("--output_workflow", required=True, help="JSON output for next workflow steps") + parser.add_argument("--output_user", required=True, help="Final JSON output to user") + + return parser.parse_args() + + +def parse_file_name_mapping(mapping_str): + mapping = {} + if mapping_str: + for pair in mapping_str.split(','): + stored, original = pair.strip().split(':', 1) + # Strip .json from original + real_name = os.path.splitext(original)[0] + mapping[os.path.basename(stored)] = real_name + return mapping + + +def handle_distribute_json_false(args): + temp_dir = tempfile.mkdtemp(prefix="maystro_merge_") + print(f"[INFO] Watching temp dir for new JSONs: {temp_dir}") + + try: + # Collect JSONs from json_from_workflow + initial_jsons = list(filter(os.path.isfile, args.json_from_workflow)) + print(f"[INFO] Initial JSONs from workflow: {initial_jsons}") + + # Parse filename mapping if provided + filename_mapping = parse_file_name_mapping(getattr(args, 'json_name_mapping', '')) + + # Merge all together + merged = {} + for file_path in initial_jsons: + try: + with open(file_path, 'r') as f: + data = json.load(f) + basename = os.path.basename(file_path) + real_name = filename_mapping.get(basename, basename) # fallback if not in mapping + merged[real_name] = data + print(f"[INFO] Added data under key: {real_name}") + except json.JSONDecodeError as e: + print(f"[WARN] Skipping invalid JSON file {file_path}: {e}") + + with open(args.output_user, "w") as f: + json.dump(merged, f, indent=2) + print(f"[INFO] Merged JSON written to: {args.output_user}") + + finally: + print(f"[INFO] Cleaning up: {temp_dir}") + shutil.rmtree(temp_dir) + + +def merge_json_files(paths): + merged = {} + for path in paths: + try: + with open(path, "r") as f: + data = json.load(f) + merged.update(data) + except Exception as e: + print(f"[WARN] Skipping {path}: {e}") + return merged + + +def handle_distribute_json_true(args): + if not args.json_from_user: + raise ValueError("json_from_user is required when distribute_json is true") + + with open(args.json_from_user, 'r') as in_f: + user_data = json.load(in_f) + + with open(args.output_workflow, 'w') as out_f: + json.dump(user_data, out_f, indent=2) + + +def main(): + args = parse_command_line_args() + + if args.distribute_json.lower() == 'false': + handle_distribute_json_false(args) + else: + handle_distribute_json_true(args) + +if __name__ == "__main__": + main() diff -r 000000000000 -r c4f98010d9ac maystro_workflow_1.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maystro_workflow_1.xml Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,92 @@ + + Store parameters of workflow-1 to be used again + + 0.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @unpublished{parameters_maystro_workflow_1 + author = {Ramiz Khaled}, + title = {{parameters_maystro_workflow_1}}, + url = {https://github.com/brsynth/}, + } + + + \ No newline at end of file diff -r 000000000000 -r c4f98010d9ac output.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/output.html Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,291 @@ + + + + + + + Test Results (powered by Planemo) + + + + + + + + + + +
+
+
+
+ + + + + + + \ No newline at end of file diff -r 000000000000 -r c4f98010d9ac output.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/output.json Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,168 @@ +{ + "summary": { + "num_errors": 0, + "num_failures": 0, + "num_skips": 0, + "num_tests": 2 + }, + "tests": [ + { + "data": { + "inputs": { + "DB|annotation_column": "annotation", + "DB|db_uri": "postgresql://postgres:RK17@localhost:5432/test_fragments_db", + "DB|execution": true, + "DB|fragment_column": "fragment", + "DB|sequence_column": "sequence", + "DB|table_name": "sample", + "DnaOptimizationProblemClass": "DnaOptimizationProblem", + "assembly_plan_name": "Type2sRestrictionAssembly", + "avoid_patterns": "BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer", + "enzyme": "auto", + "gc_constraints": "mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100", + "hairpin_constraints": "stem_size=20, hairpin_window=200", + "kmer_size": "15", + "methylation_protection": true, + "topology": "circular" + }, + "job": { + "command_line": "python3 -c \"import json; params = { 'DnaOptimizationProblemClass': 'DnaOptimizationProblem', 'methylation_protection': 'true', 'allow_edits': 'true', 'avoid_patterns': 'BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer', 'hairpin_constraints': 'stem_size=20, hairpin_window=200', 'gc_constraints': 'mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100', 'kmer_size': '15', 'assembly_plan_name': 'Type2sRestrictionAssembly', 'topology': 'circular', 'enzyme': 'auto', 'execution': 'true', 'db_uri': 'postgresql://postgres:RK17__at__localhost:5432/test_fragments_db', 'table': 'sample', 'fragment_column': 'fragment', 'sequence_column': 'sequence', 'annotation_column': 'annotation' }; f = open('/tmp/tmpnxavcgf5/job_working_directory/000/1/outputs/dataset_53ffa695-5fab-48b3-b5f5-ff93f77bfc10.dat', 'w'); json.dump(params, f, indent=4); f.close()\" && echo DEBG && cat '/tmp/tmpnxavcgf5/job_working_directory/000/1/outputs/dataset_53ffa695-5fab-48b3-b5f5-ff93f77bfc10.dat' && echo DEBG && cat '/tmp/tmpnxavcgf5/job_working_directory/000/1/outputs/dataset_53ffa695-5fab-48b3-b5f5-ff93f77bfc10.dat'", + "command_version": "", + "copied_from_job_id": null, + "create_time": "2025-07-17T12:08:28.832103", + "dependencies": [], + "exit_code": 0, + "external_id": "135810", + "galaxy_version": "25.0", + "handler": null, + "history_id": "d952758136b0c83c", + "id": "d952758136b0c83c", + "inputs": {}, + "job_messages": [], + "job_metrics": [], + "job_runner_name": null, + "job_stderr": "", + "job_stdout": "", + "model_class": "Job", + "output_collections": {}, + "outputs": { + "output_json": { + "id": "d952758136b0c83c", + "src": "hda", + "uuid": "53ffa695-5fab-48b3-b5f5-ff93f77bfc10" + } + }, + "params": { + "DB": "{\"annotation_column\": \"annotation\", \"db_uri\": \"postgresql://postgres:RK17@localhost:5432/test_fragments_db\", \"execution\": true, \"fragment_column\": \"fragment\", \"sequence_column\": \"sequence\", \"table_name\": \"sample\", \"user_json\": null}", + "DnaOptimizationProblemClass": "\"DnaOptimizationProblem\"", + "__input_ext": "\"input\"", + "allow_edits": "true", + "assembly_plan_name": "\"Type2sRestrictionAssembly\"", + "avoid_patterns": "\"BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer\"", + "chromInfo": "\"/tmp/tmpnxavcgf5/galaxy-dev/tool-data/shared/ucsc/chrom/?.len\"", + "dbkey": "\"?\"", + "enzyme": "\"auto\"", + "gc_constraints": "\"mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100\"", + "hairpin_constraints": "\"stem_size=20, hairpin_window=200\"", + "kmer_size": "\"15\"", + "methylation_protection": "true", + "topology": "\"circular\"" + }, + "state": "ok", + "stderr": "", + "stdout": "DEBG\n{\n \"DnaOptimizationProblemClass\": \"DnaOptimizationProblem\",\n \"methylation_protection\": \"true\",\n \"allow_edits\": \"true\",\n \"avoid_patterns\": \"BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\",\n \"gc_constraints\": \"mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100\",\n \"kmer_size\": \"15\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17__at__localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}DEBG\n{\n \"DnaOptimizationProblemClass\": \"DnaOptimizationProblem\",\n \"methylation_protection\": \"true\",\n \"allow_edits\": \"true\",\n \"avoid_patterns\": \"BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\",\n \"gc_constraints\": \"mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100\",\n \"kmer_size\": \"15\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17__at__localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}", + "tool_id": "parameters_maystro_workflow_2", + "tool_stderr": "", + "tool_stdout": "DEBG\n{\n \"DnaOptimizationProblemClass\": \"DnaOptimizationProblem\",\n \"methylation_protection\": \"true\",\n \"allow_edits\": \"true\",\n \"avoid_patterns\": \"BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\",\n \"gc_constraints\": \"mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100\",\n \"kmer_size\": \"15\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17__at__localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}DEBG\n{\n \"DnaOptimizationProblemClass\": \"DnaOptimizationProblem\",\n \"methylation_protection\": \"true\",\n \"allow_edits\": \"true\",\n \"avoid_patterns\": \"BsaI_site nNotI_site nXbaI_site nClaI_site n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\",\n \"gc_constraints\": \"mini=0.3, maxi=0.7, window=100 mini=0.1, maxi=0.9, window=100\",\n \"kmer_size\": \"15\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17__at__localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}", + "update_time": "2025-07-17T12:08:33.771569", + "user_email": "planemo@galaxyproject.org", + "user_id": "d952758136b0c83c" + }, + "status": "success", + "test_index": 0, + "time_seconds": 5.093859434127808, + "tool_id": "parameters_maystro_workflow_2", + "tool_version": "0.1.0" + }, + "has_data": true, + "id": "parameters_maystro_workflow_2-0" + }, + { + "data": { + "inputs": { + "DB|user_json": { + "id": "b08444d846605ee4", + "src": "hda" + } + }, + "job": { + "command_line": "cp '/tmp/tmpnxavcgf5/files/b/b/d/dataset_bbd9a440-a787-439e-9b36-2c1c45dae0a3.dat' '/tmp/tmpnxavcgf5/job_working_directory/000/3/outputs/dataset_6eed7c7c-77ce-4d77-b2ef-0a367df7e250.dat' && echo DEBG && cat '/tmp/tmpnxavcgf5/job_working_directory/000/3/outputs/dataset_6eed7c7c-77ce-4d77-b2ef-0a367df7e250.dat'", + "command_version": "", + "copied_from_job_id": null, + "create_time": "2025-07-17T12:08:43.857384", + "dependencies": [], + "exit_code": 0, + "external_id": "135995", + "galaxy_version": "25.0", + "handler": null, + "history_id": "b08444d846605ee4", + "id": "e67c2cbedbcb0da1", + "inputs": { + "DB|user_json": { + "id": "b08444d846605ee4", + "src": "hda", + "uuid": "bbd9a440-a787-439e-9b36-2c1c45dae0a3" + } + }, + "job_messages": [], + "job_metrics": [], + "job_runner_name": null, + "job_stderr": "", + "job_stdout": "", + "model_class": "Job", + "output_collections": {}, + "outputs": { + "output_json": { + "id": "e67c2cbedbcb0da1", + "src": "hda", + "uuid": "6eed7c7c-77ce-4d77-b2ef-0a367df7e250" + } + }, + "params": { + "DB": "{\"annotation_column\": null, \"db_uri\": null, \"execution\": false, \"fragment_column\": null, \"sequence_column\": null, \"table_name\": null, \"user_json\": {\"values\": [{\"id\": 2, \"src\": \"hda\"}]}}", + "DnaOptimizationProblemClass": "\"DnaOptimizationProblem\"", + "__input_ext": "\"input\"", + "allow_edits": "true", + "assembly_plan_name": "\"Type2sRestrictionAssembly\"", + "avoid_patterns": null, + "chromInfo": "\"/tmp/tmpnxavcgf5/galaxy-dev/tool-data/shared/ucsc/chrom/?.len\"", + "dbkey": "\"?\"", + "enzyme": "\"auto\"", + "gc_constraints": null, + "hairpin_constraints": null, + "kmer_size": "\"\"", + "methylation_protection": "false", + "topology": "\"circular\"" + }, + "state": "ok", + "stderr": "", + "stdout": "DEBG\n{\n \"DnaOptimizationProblemClass\":\"DnaOptimizationProblem\",\n \"avoid_patterns\": \"BsaI_site\\nNotI_site\\nXbaI_site\\nClaI_site\\n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\\nstem_size=10, hairpin_window=100\",\n \"gc_constraints\": \"mini=0.1, maxi=0.9\\nmini-0.3, maxi=0.7, window=50\",\n \"kmer_size\": \"15\",\n \"methylation_protection\":\"methylation_protection\",\n \"allow_edits\":\"True\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17@localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}\n", + "tool_id": "parameters_maystro_workflow_2", + "tool_stderr": "", + "tool_stdout": "DEBG\n{\n \"DnaOptimizationProblemClass\":\"DnaOptimizationProblem\",\n \"avoid_patterns\": \"BsaI_site\\nNotI_site\\nXbaI_site\\nClaI_site\\n8x1mer\",\n \"hairpin_constraints\": \"stem_size=20, hairpin_window=200\\nstem_size=10, hairpin_window=100\",\n \"gc_constraints\": \"mini=0.1, maxi=0.9\\nmini-0.3, maxi=0.7, window=50\",\n \"kmer_size\": \"15\",\n \"methylation_protection\":\"methylation_protection\",\n \"allow_edits\":\"True\",\n \"assembly_plan_name\": \"Type2sRestrictionAssembly\",\n \"topology\": \"circular\",\n \"enzyme\": \"auto\",\n \"execution\": \"true\",\n \"db_uri\": \"postgresql://postgres:RK17@localhost:5432/test_fragments_db\",\n \"table\": \"sample\",\n \"fragment_column\": \"fragment\",\n \"sequence_column\": \"sequence\",\n \"annotation_column\": \"annotation\"\n}\n", + "update_time": "2025-07-17T12:08:49.096516", + "user_email": "planemo@galaxyproject.org", + "user_id": "d952758136b0c83c" + }, + "status": "success", + "test_index": 1, + "time_seconds": 15.298557996749878, + "tool_id": "parameters_maystro_workflow_2", + "tool_version": "0.1.0" + }, + "has_data": true, + "id": "parameters_maystro_workflow_2-1" + } + ], + "version": "0.1" +} \ No newline at end of file diff -r 000000000000 -r c4f98010d9ac test-data/test-JSON_workflow1.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test-JSON_workflow1.json Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,11 @@ +{ + "execution": "true", + "db_uri": "postgresql://postgres:RK17@localhost:5432/test_fragments_db", + "table": "sample", + "fragment_column": "fragment", + "sequence_column": "sequence", + "annotation_column": "annotation", + "assembly_plan_name": "Type2sRestrictionAssembly", + "topology": "circular", + "enzyme": "auto" +} \ No newline at end of file diff -r 000000000000 -r c4f98010d9ac test-data/test_json.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_json.json Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,8 @@ +{ + "execution": "true", + "db_uri": "postgresql://postgres:RK17@localhost:5432/test_fragments_db", + "table": "sample", + "fragment_column": "fragment", + "sequence_column": "sequence", + "annotation_column": "annotation" +} \ No newline at end of file diff -r 000000000000 -r c4f98010d9ac test-data/test_json_workflow2.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_json_workflow2.json Wed Jul 23 09:40:14 2025 +0000 @@ -0,0 +1,16 @@ +{ + "DnaOptimizationProblemClass":"DnaOptimizationProblem", + "avoid_patterns": "BsaI_site\nNotI_site\nXbaI_site\nClaI_site\n8x1mer", + "hairpin_constraints": "stem_size=20, hairpin_window=200\nstem_size=10, hairpin_window=100", + "gc_constraints": "mini=0.1, maxi=0.9\nmini=0.3, maxi=0.7, window=50", + "kmer_size": "15", + "assembly_plan_name": "Type2sRestrictionAssembly", + "topology": "circular", + "enzyme": "auto", + "execution": "true", + "db_uri": "postgresql://postgres:RK17@localhost:5432/test_fragments_db", + "table": "sample", + "fragment_column": "fragment", + "sequence_column": "sequence", + "annotation_column": "annotation" +} \ No newline at end of file