Skip to content

Commit

Permalink
issue #1099 - ImportedAlleleInfo store hgvs_resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
davmlaw committed Jul 4, 2024
1 parent 0c50354 commit 7f82f66
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.2.10 on 2024-07-04 08:06

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('classification', '0144_one_off_populate_historical_resolved_variant_hgvsconverter_version'),
]

operations = [
migrations.AddField(
model_name='importedalleleinfo',
name='hgvs_converter_version',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='classification.hgvsconverterversion'),
),
]
18 changes: 15 additions & 3 deletions classification/models/classification_variant_info_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ class CalculatedVariantCoordinate:
variant_coordinate: Optional[VariantCoordinate]
genome_build: GenomeBuild
message: str
hgvs_converter_version: Optional[HGVSConverterVersion]

@property
def variant_coordinate_str(self) -> Optional[str]:
Expand Down Expand Up @@ -406,6 +407,9 @@ class ImportedAlleleInfo(TimeStampedModel):

imported_g_hgvs = TextField(null=True, blank=True)

hgvs_converter_version = ForeignKey(HGVSConverterVersion, null=True, blank=True, on_delete=PROTECT)
""" Tool used to resolve hgvs """

imported_transcript = TextField(null=True, blank=True)
"""
Only needed if we're using g.hgvs
Expand Down Expand Up @@ -680,17 +684,23 @@ def resolved_builds(self) -> list[ResolvedVariantInfo]:
def calculate_variant_coordinate(self) -> CalculatedVariantCoordinate:
vc: Optional[VariantCoordinate] = None
genome_build: Optional[GenomeBuild] = None
message: str
message: str = ""
hgvs_converter_version: Optional[HGVSConverterVersion] = None
try:
genome_build = self.imported_genome_build_patch_version.genome_build
use_hgvs = self.imported_c_hgvs or self.imported_g_hgvs
hgvs_matcher = HGVSMatcher(genome_build)
hgvs_converter_type = hgvs_matcher.hgvs_converter.get_hgvs_converter_type()
version = hgvs_matcher.hgvs_converter.get_version()

vc_extra = hgvs_matcher.get_variant_coordinate_used_transcript_kind_method_and_matches_reference(use_hgvs)
message = f"HGVS matched by \"{vc_extra.method}\""
hgvs_converter_version = HGVSConverterVersion.get(hgvs_converter_type,
version=version, method=vc_extra.method)
vc = vc_extra.variant_coordinate
except Exception as ex:
message = str(ex)
return CalculatedVariantCoordinate(variant_coordinate=vc, genome_build=genome_build, message=message)
return CalculatedVariantCoordinate(variant_coordinate=vc, genome_build=genome_build,
message=message, hgvs_converter_version=hgvs_converter_version)

def update_variant_coordinate(self):
""" returns if a valid variant_coordinate could be derived """
Expand All @@ -700,6 +710,7 @@ def update_variant_coordinate(self):
# but it's better to do that in the validation step
cvc = self.calculate_variant_coordinate()
self.message = cvc.message
self.hgvs_converter_version = cvc.hgvs_converter_version
self.variant_coordinate = cvc.variant_coordinate_str
if not cvc.is_valid:
self.status = ImportedAlleleInfoStatus.FAILED
Expand Down Expand Up @@ -779,6 +790,7 @@ def set_matching_failed(self, message: Optional[str] = None):
def hard_reset_matching_info(self):
self.status = ImportedAlleleInfoStatus.PROCESSING
self.matched_variant = None
self.hgvs_converter_version = None
self.allele = None
for genome_build in [GenomeBuild.grch37(), GenomeBuild.grch38()]:
self._update_variant(genome_build=genome_build, variant=None)
Expand Down
5 changes: 3 additions & 2 deletions genes/hgvs/hgvs_matcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,8 @@ def _set_clingen_allele_registry_missing_transcript(transcript_accession: str):
cache.set(key, True, timeout=WEEK_SECS)

def get_variant_coordinate(self, hgvs_string: str) -> VariantCoordinate:
return self.get_variant_coordinate_used_transcript_kind_method_and_matches_reference(hgvs_string).variant_coordinate
vcd = self.get_variant_coordinate_used_transcript_kind_method_and_matches_reference(hgvs_string)
return vcd.variant_coordinate

@staticmethod
def _get_sort_key_transcript_version_and_methods(version, prefer_local=True, closest=False):
Expand Down Expand Up @@ -341,7 +342,7 @@ def get_variant_coordinate_used_transcript_kind_method_and_matches_reference(sel
# Ensure that ref is always present so we can give warning about provided reference
hgvs_string_for_version = hgvs_variant.format(max_ref_length=sys.maxsize)
if method == self.HGVS_METHOD_INTERNAL_LIBRARY:
method = self.hgvs_converter.description()
# method = self.hgvs_converter.description(describe_fallback=False)
variant_coordinate, matches_reference = self.hgvs_converter.hgvs_to_variant_coordinate_and_reference_match(hgvs_string_for_version, tv)
elif method == self.HGVS_METHOD_CLINGEN_ALLELE_REGISTRY:
if self._clingen_allele_registry_ok(tv.accession):
Expand Down

0 comments on commit 7f82f66

Please sign in to comment.