From 0ef5560af94c7ef6ad04824a6034906da6d1d9d7 Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Thu, 24 Sep 2026 14:17:03 -0700 Subject: [PATCH 1/4] Read Babel version from index metadata --- src/nodenorm/babel.py | 15 +++++++++++++ src/nodenorm/handlers/health.py | 12 +++++----- tests/test_health.py | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 src/nodenorm/babel.py create mode 100644 tests/test_health.py diff --git a/src/nodenorm/babel.py b/src/nodenorm/babel.py new file mode 100644 index 0000000..146a107 --- /dev/null +++ b/src/nodenorm/babel.py @@ -0,0 +1,15 @@ +from urllib.parse import urlparse + +BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/tree/main/releases" + + +def get_babel_version(index_mapping: dict) -> str: + """Return the explicit Babel source version, with legacy URL fallback.""" + + source_metadata = index_mapping["mappings"]["_meta"]["src"]["nodenorm"] + if babel_version := source_metadata.get("version"): + return babel_version + + compendia_url = source_metadata["url"] + parsed_compendia_url = urlparse(compendia_url) + return parsed_compendia_url.path.rstrip("/").rsplit("/", maxsplit=1)[-1] diff --git a/src/nodenorm/handlers/health.py b/src/nodenorm/handlers/health.py index 19f986a..56d0abb 100644 --- a/src/nodenorm/handlers/health.py +++ b/src/nodenorm/handlers/health.py @@ -1,11 +1,11 @@ import importlib.resources import json from functools import lru_cache -from urllib.parse import urlparse from elasticsearch import AsyncElasticsearch import nodenorm +from nodenorm.babel import BABEL_RELEASES_URL, get_babel_version from nodenorm.biolink import BIOLINK_MODEL_VERSION from nodenorm.handlers.base import NodeNormalizationBaseHandler @@ -32,10 +32,8 @@ async def get(self): mapping_response = await async_client.indices.get_mapping(index=search_indices) index_mapping = next(iter(mapping_response.values())) - compendia_url = index_mapping["mappings"]["_meta"]["src"]["nodenorm"]["url"] - parsed_compendia_url = urlparse(compendia_url) - babel_version = parsed_compendia_url.path.rstrip("/").rsplit("/", maxsplit=1)[-1] - babel_markdown = f"https://github.com/ncatstranslator/Babel/blob/master/releases/{babel_version}.md" + babel_version = get_babel_version(index_mapping) + babel_version_url = f"{BABEL_RELEASES_URL}/{babel_version}" version = get_openapi_version() try: attributes = [ @@ -61,7 +59,7 @@ async def get(self): "status": "error", "version": version, "babel_version": babel_version, - "babel_version_url": babel_markdown, + "babel_version_url": babel_version_url, "backend": "elasticsearch", } else: @@ -69,7 +67,7 @@ async def get(self): "status": "running", "version": version, "babel_version": babel_version, - "babel_version_url": babel_markdown, + "babel_version_url": babel_version_url, "backend": "elasticsearch", "biolink_model_toolkit_version": BIOLINK_MODEL_VERSION, **nodes, diff --git a/tests/test_health.py b/tests/test_health.py new file mode 100644 index 0000000..42d479f --- /dev/null +++ b/tests/test_health.py @@ -0,0 +1,39 @@ +from nodenorm.babel import BABEL_RELEASES_URL, get_babel_version + + +def index_mapping(source_metadata): + return { + "mappings": { + "_meta": { + "src": { + "nodenorm": source_metadata, + } + } + } + } + + +def test_babel_version_uses_explicit_source_version(): + mapping = index_mapping( + { + "version": "2026jul22", + "url": "https://stars.renci.org/var/babel_outputs/latest/VERSION.txt", + } + ) + + babel_version = get_babel_version(mapping) + + assert babel_version == "2026jul22" + assert f"{BABEL_RELEASES_URL}/{babel_version}" == ( + "https://github.com/NCATSTranslator/Babel/tree/main/releases/2026jul22" + ) + + +def test_babel_version_falls_back_to_legacy_source_url(): + mapping = index_mapping( + { + "url": "https://stars.renci.org/var/babel_outputs/2025sep1/", + } + ) + + assert get_babel_version(mapping) == "2025sep1" From c32da25e4d24ccd58120676f16cd451b18a04480 Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Thu, 24 Sep 2026 14:59:43 -0700 Subject: [PATCH 2/4] Update default Biolink Model to v4.3.3 --- src/nodenorm/biolink.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nodenorm/biolink.py b/src/nodenorm/biolink.py index fd0be9f..d6e92ad 100644 --- a/src/nodenorm/biolink.py +++ b/src/nodenorm/biolink.py @@ -8,7 +8,7 @@ # > get_normalized_nodes # > get_semantic_types -DEFAULT_BIOLINK_MODEL_VERSION = "v4.2.6-rc5" +DEFAULT_BIOLINK_MODEL_VERSION = "v4.3.3" BIOLINK_MODEL_VERSION = os.getenv("BIOLINK_VERSION", DEFAULT_BIOLINK_MODEL_VERSION) BIOLINK_MODEL_URL = ( f"https://raw.githubusercontent.com/biolink/biolink-model/{BIOLINK_MODEL_VERSION}/biolink-model.yaml" From e68820d527e7547b91272a3c2da2b07b80d847ba Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Thu, 24 Sep 2026 15:07:13 -0700 Subject: [PATCH 3/4] Use stable Babel release tag links --- src/nodenorm/babel.py | 2 +- tests/test_health.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/nodenorm/babel.py b/src/nodenorm/babel.py index 146a107..9dca9e8 100644 --- a/src/nodenorm/babel.py +++ b/src/nodenorm/babel.py @@ -1,6 +1,6 @@ from urllib.parse import urlparse -BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/tree/main/releases" +BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/releases/tag" def get_babel_version(index_mapping: dict) -> str: diff --git a/tests/test_health.py b/tests/test_health.py index 42d479f..8036452 100644 --- a/tests/test_health.py +++ b/tests/test_health.py @@ -25,7 +25,7 @@ def test_babel_version_uses_explicit_source_version(): assert babel_version == "2026jul22" assert f"{BABEL_RELEASES_URL}/{babel_version}" == ( - "https://github.com/NCATSTranslator/Babel/tree/main/releases/2026jul22" + "https://github.com/NCATSTranslator/Babel/releases/tag/2026jul22" ) @@ -36,4 +36,9 @@ def test_babel_version_falls_back_to_legacy_source_url(): } ) - assert get_babel_version(mapping) == "2025sep1" + babel_version = get_babel_version(mapping) + + assert babel_version == "2025sep1" + assert f"{BABEL_RELEASES_URL}/{babel_version}" == ( + "https://github.com/NCATSTranslator/Babel/releases/tag/2025sep1" + ) From d4f5d0adf12882ec80852c08afb71be932fba8d7 Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Thu, 24 Sep 2026 15:10:14 -0700 Subject: [PATCH 4/4] Link to canonical Babel release notes --- src/nodenorm/babel.py | 8 +++++++- src/nodenorm/handlers/health.py | 4 ++-- tests/test_health.py | 10 +++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/nodenorm/babel.py b/src/nodenorm/babel.py index 9dca9e8..3e30f22 100644 --- a/src/nodenorm/babel.py +++ b/src/nodenorm/babel.py @@ -1,6 +1,6 @@ from urllib.parse import urlparse -BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/releases/tag" +BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/blob/main/releases" def get_babel_version(index_mapping: dict) -> str: @@ -13,3 +13,9 @@ def get_babel_version(index_mapping: dict) -> str: compendia_url = source_metadata["url"] parsed_compendia_url = urlparse(compendia_url) return parsed_compendia_url.path.rstrip("/").rsplit("/", maxsplit=1)[-1] + + +def get_babel_release_url(version: str) -> str: + """Return the canonical Babel release-notes URL for a build version.""" + + return f"{BABEL_RELEASES_URL}/{version}/README.md" diff --git a/src/nodenorm/handlers/health.py b/src/nodenorm/handlers/health.py index 56d0abb..2dcd5e5 100644 --- a/src/nodenorm/handlers/health.py +++ b/src/nodenorm/handlers/health.py @@ -5,7 +5,7 @@ from elasticsearch import AsyncElasticsearch import nodenorm -from nodenorm.babel import BABEL_RELEASES_URL, get_babel_version +from nodenorm.babel import get_babel_release_url, get_babel_version from nodenorm.biolink import BIOLINK_MODEL_VERSION from nodenorm.handlers.base import NodeNormalizationBaseHandler @@ -33,7 +33,7 @@ async def get(self): mapping_response = await async_client.indices.get_mapping(index=search_indices) index_mapping = next(iter(mapping_response.values())) babel_version = get_babel_version(index_mapping) - babel_version_url = f"{BABEL_RELEASES_URL}/{babel_version}" + babel_version_url = get_babel_release_url(babel_version) version = get_openapi_version() try: attributes = [ diff --git a/tests/test_health.py b/tests/test_health.py index 8036452..14b536d 100644 --- a/tests/test_health.py +++ b/tests/test_health.py @@ -1,4 +1,4 @@ -from nodenorm.babel import BABEL_RELEASES_URL, get_babel_version +from nodenorm.babel import get_babel_release_url, get_babel_version def index_mapping(source_metadata): @@ -24,8 +24,8 @@ def test_babel_version_uses_explicit_source_version(): babel_version = get_babel_version(mapping) assert babel_version == "2026jul22" - assert f"{BABEL_RELEASES_URL}/{babel_version}" == ( - "https://github.com/NCATSTranslator/Babel/releases/tag/2026jul22" + assert get_babel_release_url(babel_version) == ( + "https://github.com/NCATSTranslator/Babel/blob/main/releases/2026jul22/README.md" ) @@ -39,6 +39,6 @@ def test_babel_version_falls_back_to_legacy_source_url(): babel_version = get_babel_version(mapping) assert babel_version == "2025sep1" - assert f"{BABEL_RELEASES_URL}/{babel_version}" == ( - "https://github.com/NCATSTranslator/Babel/releases/tag/2025sep1" + assert get_babel_release_url(babel_version) == ( + "https://github.com/NCATSTranslator/Babel/blob/main/releases/2025sep1/README.md" )