From 885af6c030a2d97f2047a69a13364d5dfeed83b8 Mon Sep 17 00:00:00 2001 From: Jas Kalayan Date: Fri, 12 Jun 2026 16:17:19 +0100 Subject: [PATCH 1/9] move file extraction to separate function --- biosimdb_interface/form/extract.py | 47 ++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/biosimdb_interface/form/extract.py b/biosimdb_interface/form/extract.py index 9417650..efde63f 100644 --- a/biosimdb_interface/form/extract.py +++ b/biosimdb_interface/form/extract.py @@ -11,11 +11,41 @@ import tempfile from biosim_extractor.metadata.populatemetadata import MetadataPopulator -from flask import jsonify, request +from flask import jsonify, request, session from . import form_bp +def extract_files_validate(top_file, traj_file): + """Extract metadata from simulation files and validate against the schema. + + Args: + top_file (str): Path to the topology file. + traj_file (str or list[str]): Path or list of paths to the trajectory file(s). + + Returns: + tuple: A tuple containing: + - result (dict): The extracted and populated metadata dictionary. + - validation_errors (list[str]): A list of validation error messages, + empty if validation succeeded. + """ + populator = MetadataPopulator( + schema_path=os.getenv("ENGINE_MAPPING_SCHEMA_PATH", ""), + top_file=top_file, + traj_file=traj_file, + ) + + result = populator.populate() + biosimschema_path = os.getenv("BIOSIM_SCHEMA_PATH", "") + validation_errors = [] + try: + populator.validate(result, biosimschema_path, strict=True) + except ValueError as e: + validation_errors = str(e).splitlines() + + return result, validation_errors + + @form_bp.route("/extract_metadata", methods=["POST"]) def extract_metadata(): """Extract simulation metadata from uploaded topology and trajectory files. @@ -54,19 +84,12 @@ def extract_metadata(): traj.save(traj_path) traj_files.append(traj_path) - populator = MetadataPopulator( - schema_path=os.getenv("ENGINE_MAPPING_SCHEMA_PATH", ""), - top_file=topo_file.name, - traj_file=traj_files, + result, validation_errors = extract_files_validate( + topo_file.name, traj_files ) - result = populator.populate() - biosimschema_path = os.getenv("BIOSIM_SCHEMA_PATH", "") - validation_errors = [] - try: - populator.validate(result, biosimschema_path, strict=True) - except ValueError as e: - validation_errors = str(e).splitlines() + # Keep authoritative extracted payload on the server + session["extracted_metadata"] = result if len(validation_errors) > 0: return jsonify( From 7a690362b24154c9958dd846b44c595b7bc43061 Mon Sep 17 00:00:00 2001 From: Jas Kalayan Date: Fri, 12 Jun 2026 19:39:25 +0100 Subject: [PATCH 2/9] add option for readonly fields --- biosimdb_interface/templates/macros/webform.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/biosimdb_interface/templates/macros/webform.html b/biosimdb_interface/templates/macros/webform.html index dc72bbd..28d223f 100644 --- a/biosimdb_interface/templates/macros/webform.html +++ b/biosimdb_interface/templates/macros/webform.html @@ -51,6 +51,7 @@ {% set key = group_name ~ '[' ~ field_name ~ ']' %} {% set value = form_data.get(key, '') %} {% set error = errors.get(key) %} + {% set is_locked = field.get("extracted_only") or field.get("readonly") %} {% if field.type == "textarea" %} @@ -91,6 +92,7 @@ {% elif field.type == "select" %} @@ -98,6 +100,7 @@