Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions biosimdb_interface/form/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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 = []
Expand Down Expand Up @@ -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}")
Expand Down
7 changes: 3 additions & 4 deletions biosimdb_interface/form/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
10 changes: 10 additions & 0 deletions biosimdb_interface/form/utils.py
Original file line number Diff line number Diff line change
@@ -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.

Expand Down
Loading