# 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