Source code for pgfinder.gui.internal

"""Functions used in uploading files from the WebUI."""

import sys
import tempfile
from contextlib import contextmanager
from pathlib import Path

import pandas as pd

from pgfinder import pgio

# Consider switching to using the import importlib.resources as pkg_resources method of loading files that are included
# as part of the package rather than a plain open()
MASS_LIB_DIR = Path(sys.modules["pgfinder"].__file__).parent / "masses"


[docs] def ms_upload_reader(upload: dict) -> pd.DataFrame: with uploaded_file(upload) as file: return pgio.ms_file_reader(file)
[docs] def theo_masses_upload_reader(upload: dict) -> pd.DataFrame: """Attempt to load a built-in library if no content was uploaded.""" if upload["content"] is None: upload["content"] = open(MASS_LIB_DIR / upload["name"], "rb").read() with uploaded_file(upload) as file: return pgio.theo_masses_reader(file)
[docs] @contextmanager def uploaded_file(upload: dict): with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tempdir: file = Path(tempdir) / upload["name"] with open(file, "wb") as f: f.write(upload["content"]) yield file