Mercurial > repos > tduigou > save_to_db
diff save_to_db.py @ 4:c7a7520afb4b draft
planemo upload for repository https://github.com/brsynth commit 6ae809b563b40bcdb6be2e74fe2a84ddad5484ae
| author | tduigou |
|---|---|
| date | Mon, 02 Jun 2025 09:48:14 +0000 |
| parents | 034686b5bc15 |
| children | f934215bdb78 |
line wrap: on
line diff
--- a/save_to_db.py Fri May 23 08:51:50 2025 +0000 +++ b/save_to_db.py Mon Jun 02 09:48:14 2025 +0000 @@ -5,11 +5,22 @@ import os import re import pandas as pd +import json from sqlalchemy import create_engine, inspect from sqlalchemy.sql import text from sqlalchemy.engine.url import make_url from sqlalchemy.exc import OperationalError +def resolve_parameters(user_params: dict, json_params: dict, keys: list): + resolved = {} + for key in keys: + # Prefer user parameter if it's provided (not None or empty string) + if key in user_params and user_params[key]: + resolved[key] = user_params[key] + else: + resolved[key] = json_params.get(f"JSON_{key}") + return resolved + def fix_db_uri(uri): """Replace __at__ with @ in the URI if needed.""" return uri.replace("__at__", "@") @@ -177,19 +188,53 @@ parser.add_argument("--fragment_column", required=True, help="Fragment column name in the database") parser.add_argument("--output", required=True, help="Text report") parser.add_argument("--file_name_mapping", required=True, help="real fragments names") + parser.add_argument("--json_conf", required=False, help="JSON config file with DB parameters") args = parser.parse_args() - # Start the Docker container (if not already running) + # Load JSON config if provided + json_config = {} + if args.json_conf != 'None' or '': + with open(args.json_conf, "r") as f: + json_config = json.load(f) + + # Prefer user input; fallback to JSON_ values if not provided + user_params = { + "table": args.table, + "sequence_column": args.sequence_column, + "annotation_column": args.annotation_column, + "fragment_column": args.fragment_column, + "db_uri": args.db_uri + } + + keys = ["table", "sequence_column", "annotation_column", "fragment_column", "db_uri"] + resolved = resolve_parameters(user_params, json_config, keys) + + # Unpack resolved parameters + table = resolved["table"] + sequence_column = resolved["sequence_column"] + annotation_column = resolved["annotation_column"] + fragment_column = resolved["fragment_column"] + db_uri = fix_db_uri(resolved["db_uri"]) + + # Prepare gb files gb_file_list = [f.strip() for f in args.input.split(",") if f.strip()] - db_uri = fix_db_uri(args.db_uri) + + # Start and wait for DB db_name = extract_db_name(db_uri) start_postgres_container(db_name) - - # Wait until the database is ready wait_for_db(db_uri) - # Fetch annotations from the database and save as gb - push_gb_annotations(gb_file_list, args.sequence_column, args.annotation_column, db_uri, args.table, args.fragment_column, args.output, args.file_name_mapping) + # Push annotations + push_gb_annotations( + gb_file_list, + sequence_column, + annotation_column, + db_uri, + table, + fragment_column, + args.output, + args.file_name_mapping + ) if __name__ == "__main__": main()
