Skip to content

Commit fc7e3ae

Browse files
authored
Turn off primary identifier resolution in pyobo.get_name() by default (#440)
1 parent f397132 commit fc7e3ae

2 files changed

Lines changed: 41 additions & 9 deletions

File tree

src/pyobo/api/names.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import subprocess
77
from collections.abc import Callable, Mapping
88
from functools import lru_cache
9-
from typing import Any, TypeVar
9+
from typing import TypeVar
1010

1111
import curies
1212
import pandas as pd
@@ -49,9 +49,15 @@
4949
logger = logging.getLogger(__name__)
5050

5151

52-
def get_name_by_curie(curie: str, **kwargs: Any) -> str | None:
52+
def get_name_by_curie(
53+
curie: str,
54+
/,
55+
*,
56+
upgrade_identifier: bool | None = None,
57+
**kwargs: Unpack[GetOntologyKwargs],
58+
) -> str | None:
5359
"""Get the name for a CURIE, if possible."""
54-
return get_name(curie, **kwargs)
60+
return get_name(curie, upgrade_identifier=upgrade_identifier, **kwargs)
5561

5662

5763
X = TypeVar("X")
@@ -63,6 +69,8 @@ def get_name_by_curie(curie: str, **kwargs: Any) -> str | None:
6369
def _help_get(
6470
f: Callable[[str, Unpack[GetOntologyKwargs]], Mapping[str, X]],
6571
reference: Reference,
72+
*,
73+
upgrade_identifier: bool | None = None,
6674
**kwargs: Unpack[GetOntologyKwargs],
6775
) -> X | None:
6876
"""Get the result for an entity based on a mapping maker function ``f``."""
@@ -87,19 +95,32 @@ def _help_get(
8795
NO_BUILD_PREFIXES.add(reference.prefix)
8896
return None
8997

90-
primary_id = get_primary_identifier(reference, **kwargs)
91-
return mapping.get(primary_id)
98+
if upgrade_identifier is None:
99+
if reference.identifier in mapping:
100+
return mapping[reference.identifier]
101+
else:
102+
primary_id = get_primary_identifier(reference, **kwargs)
103+
return mapping.get(primary_id)
104+
elif upgrade_identifier is True:
105+
primary_id = get_primary_identifier(reference, **kwargs)
106+
return mapping.get(primary_id)
107+
else:
108+
return mapping.get(reference.identifier)
92109

93110

94111
def get_name(
95112
prefix: str | curies.Reference | curies.ReferenceTuple,
96113
identifier: str | None = None,
97114
/,
115+
*,
116+
upgrade_identifier: bool | None = None,
98117
**kwargs: Unpack[GetOntologyKwargs],
99118
) -> str | None:
100119
"""Get the name for an entity."""
101120
reference = _get_pi(prefix, identifier)
102-
return _help_get(get_id_name_mapping, reference, **kwargs)
121+
return _help_get(
122+
get_id_name_mapping, reference, upgrade_identifier=upgrade_identifier, **kwargs
123+
)
103124

104125

105126
@lru_cache

tests/test_api.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ def test_get_primary(self, _, __):
9090
primary_id = get_primary_identifier("go", "0001071")
9191
self.assertIsNotNone(primary_id)
9292
self.assertEqual("0003700", primary_id)
93-
name = get_name(ReferenceTuple("go", "0001071"))
93+
self.assertIsNone(get_name(ReferenceTuple("go", "0001071"), upgrade_identifier=False))
94+
name = get_name(ReferenceTuple("go", "0001071"), upgrade_identifier=True)
9495
self.assertIsNotNone(name)
9596
self.assertEqual("DNA-binding transcription factor activity", name)
9697

@@ -101,7 +102,16 @@ def test_get_primary_by_curie(self, _, __):
101102
primary_curie = get_primary_curie("go:0001071")
102103
self.assertIsNotNone(primary_curie)
103104
self.assertEqual("go:0003700", primary_curie)
104-
name = get_name_by_curie("go:0001071")
105+
self.assertIsNone(get_name_by_curie("go:0001071", upgrade_identifier=False))
106+
107+
# if set explicitly to true, then it will do it eagerly
108+
name = get_name_by_curie("go:0001071", upgrade_identifier=True)
109+
self.assertIsNotNone(name)
110+
self.assertEqual("DNA-binding transcription factor activity", name)
111+
112+
# if not set, or left as default, then it will do it only if there's no
113+
# original name
114+
name = get_name_by_curie("go:0001071", upgrade_identifier=None)
105115
self.assertIsNotNone(name)
106116
self.assertEqual("DNA-binding transcription factor activity", name)
107117

@@ -209,7 +219,8 @@ def test_api(self) -> None:
209219
self.assertEqual({t1.name: t1.identifier}, name_id)
210220

211221
self.assertEqual(t1.name, pyobo.get_name(r1, cache=False))
212-
self.assertEqual(t1.name, pyobo.get_name(r2, cache=False))
222+
self.assertEqual(t1.name, pyobo.get_name(r2, cache=False, upgrade_identifier=True))
223+
self.assertIsNone(pyobo.get_name(r2, cache=False, upgrade_identifier=False))
213224

214225
# Xrefs
215226
d = pyobo.get_filtered_xrefs(TEST_P1, TEST_P2, cache=False, use_tqdm=False)

0 commit comments

Comments
 (0)