diff --git a/src/nodenorm/babel.py b/src/nodenorm/babel.py new file mode 100644 index 0000000..3e30f22 --- /dev/null +++ b/src/nodenorm/babel.py @@ -0,0 +1,21 @@ +from urllib.parse import urlparse + +BABEL_RELEASES_URL = "https://github.com/NCATSTranslator/Babel/blob/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] + + +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/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" diff --git a/src/nodenorm/handlers/health.py b/src/nodenorm/handlers/health.py index 19f986a..2dcd5e5 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 get_babel_release_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 = get_babel_release_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..14b536d --- /dev/null +++ b/tests/test_health.py @@ -0,0 +1,44 @@ +from nodenorm.babel import get_babel_release_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 get_babel_release_url(babel_version) == ( + "https://github.com/NCATSTranslator/Babel/blob/main/releases/2026jul22/README.md" + ) + + +def test_babel_version_falls_back_to_legacy_source_url(): + mapping = index_mapping( + { + "url": "https://stars.renci.org/var/babel_outputs/2025sep1/", + } + ) + + babel_version = get_babel_version(mapping) + + assert babel_version == "2025sep1" + assert get_babel_release_url(babel_version) == ( + "https://github.com/NCATSTranslator/Babel/blob/main/releases/2025sep1/README.md" + )