Skip to content

Commit

Permalink
fix: store variation aliases in aliases not extensions (#460)
Browse files Browse the repository at this point in the history
close #459
  • Loading branch information
korikuzma committed Mar 9, 2025
1 parent 4e435d2 commit 0247270
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 32 deletions.
4 changes: 4 additions & 0 deletions src/metakb/load_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,10 @@ def _add_categorical_variant(
_create_parameterized_query(cv, ("id", "name", "description", "type"))
]

if "aliases" in cv:
cv["aliases"] = json.dumps(cv["aliases"])
mp_nonnull_keys.append("aliases:$aliases")

_add_mappings_and_exts_to_obj(cv, mp_nonnull_keys)
mp_keys = ", ".join(mp_nonnull_keys)

Expand Down
5 changes: 1 addition & 4 deletions src/metakb/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@ def _get_cat_var(self, node: dict) -> CategoricalVariant:
:return: Categorical Variant data
"""
node["mappings"] = _deserialize_field(node, "mappings")
node["aliases"] = _deserialize_field(node, "aliases")

extensions = []
for node_key, ext_name in (
Expand Down Expand Up @@ -678,10 +679,6 @@ def _get_cat_var(self, node: dict) -> CategoricalVariant:
)
)

aliases = node.pop("aliases", None)
if aliases:
extensions.append(Extension(name="aliases", value=json.loads(aliases)))

node["extensions"] = extensions or None
node["constraints"] = [
DefiningAlleleConstraint(
Expand Down
16 changes: 4 additions & 12 deletions src/metakb/transformers/civic.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ class _VariationCache(BaseModel):
civic_gene_id: str
variant_types: list[Coding] | None = None
mappings: list[ConceptMapping] | None = None
aliases: list[Extension] | None = None
aliases: list[str] | None = None
coordinates: dict | None = None
members: list[Variation] | None = None
extensions: list[Extension] | None = None
Expand Down Expand Up @@ -523,16 +523,11 @@ def _add_categorical_variants(
extensions = civic_variation_data.extensions or []

# Get aliases from MP and Variant record
if civic_variation_data.aliases:
aliases = civic_variation_data.aliases[0].value
else:
aliases = []
aliases = civic_variation_data.aliases or []

for a in mp["aliases"] or []:
if not SNP_RE.match(a) and a not in aliases:
aliases.append(a)
if aliases:
extensions.append(Extension(name="aliases", value=aliases))

# Get molecular profile score data
mp_score = mp["molecular_profile_score"]
Expand Down Expand Up @@ -567,6 +562,7 @@ def _add_categorical_variants(
description=mp["description"],
name=mp["name"],
constraints=constraints,
aliases=aliases or None,
mappings=civic_variation_data.mappings,
extensions=extensions or None,
members=civic_variation_data.members,
Expand Down Expand Up @@ -669,7 +665,6 @@ async def _add_variations(self, variants: list[dict]) -> None:
vrs_variation = None
civic_variation = None
extensions = []
aliases_extensions = []

if self._is_supported_variant_query(variant_name, variant_id):
vrs_variation = await self.vicc_normalizers.normalize_variation(
Expand Down Expand Up @@ -763,9 +758,6 @@ async def _add_variations(self, variants: list[dict]) -> None:
else:
aliases.append(a)

if aliases:
aliases_extensions.append(Extension(name="aliases", value=aliases))

if variant["coordinates"]:
coordinates = {
k: v for k, v in variant["coordinates"].items() if v is not None
Expand All @@ -781,7 +773,7 @@ async def _add_variations(self, variants: list[dict]) -> None:
civic_gene_id=f"civic.gid:{variant['gene_id']}",
variant_types=variant_types_value or None,
mappings=mappings or None,
aliases=aliases_extensions or None,
aliases=aliases or None,
extensions=extensions,
coordinates=coordinates or None,
members=members,
Expand Down
6 changes: 3 additions & 3 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,8 +408,8 @@ def civic_mpid33(civic_vid33):
"relation": "exactMatch",
},
],
"aliases": ["LEU858ARG", "L813R", "LEU813ARG"],
"extensions": [
{"name": "aliases", "value": ["LEU858ARG", "L813R", "LEU813ARG"]},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down Expand Up @@ -679,8 +679,8 @@ def civic_mpid12(civic_vid12, braf_v600e_genomic):
"relation": "exactMatch",
},
],
"aliases": ["VAL600GLU", "V640E", "VAL640GLU"],
"extensions": [
{"name": "aliases", "value": ["VAL600GLU", "V640E", "VAL640GLU"]},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down Expand Up @@ -1558,8 +1558,8 @@ def civic_mpid65(civic_vid65):
"relation": "exactMatch",
},
],
"aliases": ["ASP816VAL"],
"extensions": [
{"name": "aliases", "value": ["ASP816VAL"]},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down
5 changes: 1 addition & 4 deletions tests/unit/database/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,10 +341,7 @@ def test_categorical_variant_rules(
assert cv["type"] == civic_mpid12["type"]
assert cv["name"] == civic_mpid12["name"]
assert cv["description"] == civic_mpid12["description"]
expected_aliases = next(
ext for ext in civic_mpid12["extensions"] if ext["name"] == "aliases"
)["value"]
assert set(json.loads(cv["aliases"])) == set(expected_aliases)
assert set(json.loads(cv["aliases"])) == set(civic_mpid12["aliases"])
assert isinstance(cv["civic_molecular_profile_score"], float)
crc = json.loads(cv["civic_representative_coordinate"])
assert set(crc.keys()) == {
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/transformers/test_civic_transformer_diagnostic.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ def civic_mpid99():
"relation": "exactMatch",
},
],
"aliases": ["ASP842VAL"],
"extensions": [
{"name": "aliases", "value": ["ASP842VAL"]},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down Expand Up @@ -430,8 +430,8 @@ def civic_mpid113():
"relation": "exactMatch",
},
],
"aliases": ["MET918THR"],
"extensions": [
{"name": "aliases", "value": ["MET918THR"]},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down
11 changes: 4 additions & 7 deletions tests/unit/transformers/test_civic_transformer_therapeutic.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,15 +169,12 @@ def civic_mpid473():
"relation": "exactMatch",
},
],
"aliases": [
"3021INSTC",
"PRO968LEUFS",
],
"extensions": [
get_vicc_normalizer_failure_ext(),
{
"name": "aliases",
"value": [
"3021INSTC",
"PRO968LEUFS",
],
},
{
"name": "CIViC representative coordinate",
"value": {
Expand Down

0 comments on commit 0247270

Please sign in to comment.