From d37d5f5eee1bf7aee46b9b4cd34483677bbca65c Mon Sep 17 00:00:00 2001 From: Michael Strobel Date: Sun, 18 Jan 2026 15:09:56 -0800 Subject: [PATCH 1/5] Update MassBank API Endpoint. --- metabolomics_spectrum_resolver/parsing.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/metabolomics_spectrum_resolver/parsing.py b/metabolomics_spectrum_resolver/parsing.py index 5c748f3..9d4fd5c 100644 --- a/metabolomics_spectrum_resolver/parsing.py +++ b/metabolomics_spectrum_resolver/parsing.py @@ -14,13 +14,17 @@ from metabolomics_spectrum_resolver.zenodo_mzml_repo import mzml_repo +import logging + +# Init logging +logging.basicConfig(level=logging.INFO) timeout = 45 # seconds MS2LDA_SERVER = "http://ms2lda.org/basicviz/" MOTIFDB_SERVER = "http://ms2lda.org/motifdb/" MONA_SERVER = "https://massbank.us/rest/spectra/" -MASSBANKEUROPE_SERVER = "https://msbi.ipb-halle.de/MassBank-api/records/" +MASSBANKEUROPE_SERVER = "https://massbank.eu/MassBank-api/records/" NORMAN_SERVER = "http://server.norman-data.eu:8770/getScan" # USI specification: http://www.psidev.info/usi From dfcf4f4325e94d6722ec163cda6aed2d4a83d966 Mon Sep 17 00:00:00 2001 From: Michael Strobel Date: Sun, 18 Jan 2026 15:11:01 -0800 Subject: [PATCH 2/5] If EU and MONA fail, raise MONA error from EU error. Distinct UsiError for MONA. --- metabolomics_spectrum_resolver/parsing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metabolomics_spectrum_resolver/parsing.py b/metabolomics_spectrum_resolver/parsing.py index 9d4fd5c..b5761fa 100644 --- a/metabolomics_spectrum_resolver/parsing.py +++ b/metabolomics_spectrum_resolver/parsing.py @@ -633,7 +633,7 @@ def _parse_massbank(usi: str) -> Tuple[sus.MsmsSpectrum, str]: return _parse_massbankEurope(usi) except UsiError: - pass + return _parse_mona(usi) # Either MassBank EU Failed or it's a MoNA entry, fallback to MoNA. # Let the exception propagate if it fails @@ -700,7 +700,7 @@ def _parse_mona(usi: str) -> Tuple[sus.MsmsSpectrum, str]: return spectrum, source_link except requests.exceptions.HTTPError: - raise UsiError("Unknown MassBank USI", 404) + raise UsiError("Unknown MONA USI", 404) # Parse MassBank entry. def _parse_massbankEurope(usi: str) -> Tuple[sus.MsmsSpectrum, str]: From 76c35f0c69321211653325f8830a7a13cc4e0a2c Mon Sep 17 00:00:00 2001 From: Michael Strobel Date: Sun, 18 Jan 2026 15:01:52 -0800 Subject: [PATCH 3/5] Checkout submodiles in unit tests. --- .github/workflows/unittest.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 7a3c890..6e1dfa6 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -14,6 +14,8 @@ jobs: # TODO: We probably should switch to using the Docker version. steps: - uses: actions/checkout@v2 + with: + submodules: 'true' - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: From 5123d8190a7347b6f33877523caa3f93efaa01f4 Mon Sep 17 00:00:00 2001 From: Michael Strobel Date: Sun, 18 Jan 2026 15:14:44 -0800 Subject: [PATCH 4/5] Update dependencies in unittest workflow --- .github/workflows/unittest.yml | 2 +- requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 6e1dfa6..91af374 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -34,7 +34,7 @@ jobs: apt-get update -y && apt-get install -y git-core source activate usi pip install "git+https://github.com/berlinguyinca/spectra-hash.git#subdirectory=python" - pip install celery celery-once joblib + pip install celery celery-once joblib umami-analytics echo "source activate usi" > ~/.bashrc - name: Run unit and integration tests run: | diff --git a/requirements.txt b/requirements.txt index 62ea414..849d8a4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,6 +18,7 @@ redis requests requests_cache scipy +umami-analytics spectrum_utils werkzeug==2.0.0 git+https://github.com/berlinguyinca/spectra-hash.git#subdirectory=python \ No newline at end of file From 9487fafe1f244e5b01a3d53e22429bdfde10bb64 Mon Sep 17 00:00:00 2001 From: Michael Strobel Date: Sun, 18 Jan 2026 16:20:31 -0800 Subject: [PATCH 5/5] Quote plus for GNPS2 tasks. --- metabolomics_spectrum_resolver/parsing.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/metabolomics_spectrum_resolver/parsing.py b/metabolomics_spectrum_resolver/parsing.py index b5761fa..9d11fe1 100644 --- a/metabolomics_spectrum_resolver/parsing.py +++ b/metabolomics_spectrum_resolver/parsing.py @@ -284,7 +284,6 @@ def _match_usi(usi: str) -> re.Match: raise UsiError(f"Incorrectly formatted USI: {usi}", 400) return match - def _convert_legacy_usi(usi: str) -> str: """ Convert a legacy format metabolomics USI to the proper metabolomics USI @@ -413,6 +412,9 @@ def _parse_gnps2_task(usi: str) -> Tuple[sus.MsmsSpectrum, str]: scan = match.group(4) + # Reconstruct the USI for URL usage + request_usi = f"mzspec:GNPS2:TASK-{task}-{urllib.parse.quote_plus(filename)}:scan:{scan}" + # We will try in order these GNPS2 URLs to see if the task is actually there gnps2_server_url_list = [ "https://gnps2.org", @@ -427,7 +429,7 @@ def _parse_gnps2_task(usi: str) -> Tuple[sus.MsmsSpectrum, str]: for gnps2server_url in gnps2_server_url_list: try: request_url = ( - f"{gnps2server_url}/spectrumpeaks?format=json&usi={usi}" + f"{gnps2server_url}/spectrumpeaks?format=json&usi={request_usi}" ) lookup_request = requests.get(request_url, timeout=timeout) lookup_request.raise_for_status()