From ac07a7820bbe941d13b2cac2307e013ccf45191e Mon Sep 17 00:00:00 2001 From: Jas Kalayan Date: Fri, 3 Jul 2026 15:17:03 +0100 Subject: [PATCH] use UPLOAD_FOLDER as root dir for all uploaded files --- biosimdb_interface/form/extract.py | 8 ++++++-- biosimdb_interface/form/upload.py | 7 +++---- biosimdb_interface/form/utils.py | 10 ++++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/biosimdb_interface/form/extract.py b/biosimdb_interface/form/extract.py index eeddc64..244bce5 100644 --- a/biosimdb_interface/form/extract.py +++ b/biosimdb_interface/form/extract.py @@ -8,12 +8,13 @@ """ import os -import tempfile +import shutil from biosim_extractor.metadata.populatemetadata import MetadataPopulator from flask import jsonify, request, session from . import form_bp +from .utils import make_upload_tmpdir def extract_files_validate(top_file, traj_file): @@ -71,7 +72,8 @@ def extract_metadata(): if not topology or not trajectories: return jsonify({"error": "Simulation files are missing."}), 400 - with tempfile.TemporaryDirectory() as temp_dir: + temp_dir = make_upload_tmpdir("biosimdb_extract_") + try: topo_path = os.path.join(temp_dir, topology.filename) topology.save(topo_path) traj_files = [] @@ -100,6 +102,8 @@ def extract_metadata(): "message": "Metadata extracted successfully.", } ) + finally: + shutil.rmtree(temp_dir, ignore_errors=True) except Exception as e: print(f"ERROR: {e}") diff --git a/biosimdb_interface/form/upload.py b/biosimdb_interface/form/upload.py index 7a73cbf..ba82290 100644 --- a/biosimdb_interface/form/upload.py +++ b/biosimdb_interface/form/upload.py @@ -4,14 +4,13 @@ import json import os import shutil -import tempfile from biosim_extractor.metadata.filemetadata import files_metadata from flask import current_app, request, session from werkzeug.utils import secure_filename from .invenio import run_record_upload -from .utils import fill_invenio_metadata, form_to_json +from .utils import fill_invenio_metadata, form_to_json, make_upload_tmpdir def _save_request_files(tmpdir): @@ -54,7 +53,7 @@ def _save_files_and_extract_metadata(tmpdir): def extract_uploaded_file_metadata(): """Extract file metadata from the current request's uploaded files.""" - tmpdir = tempfile.mkdtemp(prefix="biosimdb_file_metadata_") + tmpdir = make_upload_tmpdir("biosimdb_file_metadata_") try: _, file_meta = _save_files_and_extract_metadata(tmpdir) return file_meta @@ -109,7 +108,7 @@ def save_pending_submission(json_form=None): session["pending_files_dir"]: Set to temporary directory path containing uploaded files and optional ``simulation_metadata.json``. """ - tmpdir = tempfile.mkdtemp(prefix="biosimdb_pending_") + tmpdir = make_upload_tmpdir("biosimdb_pending_") _, file_meta = _save_files_and_extract_metadata(tmpdir) if json_form is not None: diff --git a/biosimdb_interface/form/utils.py b/biosimdb_interface/form/utils.py index aab21ba..f77ea72 100644 --- a/biosimdb_interface/form/utils.py +++ b/biosimdb_interface/form/utils.py @@ -1,12 +1,22 @@ #!/usr/bin/env python import copy +import os import re +import tempfile + +from flask import current_app from biosimdb_interface.schema.invenio import INVENIO_FORM_EMPTY from biosimdb_interface.schema.webform import get_simulation_metadata +def make_upload_tmpdir(prefix): + upload_root = current_app.config["UPLOAD_FOLDER"] + os.makedirs(upload_root, exist_ok=True) + return tempfile.mkdtemp(prefix=prefix, dir=upload_root) + + def fill_invenio_metadata(form_data): """Populate a blank Invenio record with form data.