From 7b7ae35cbadff806396920317d2f8fa4dc3103b4 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Fri, 28 Jul 2023 15:28:31 +1000 Subject: [PATCH 01/37] Show ClinVar details on allele apge at all times - start integrating API for the data --- annotation/models/models.py | 15 +++- .../annotation/tags/clinvar_tag.html | 49 +++++++++++++ annotation/templatetags/clinvar_tags.py | 68 +++++++++++++++++++ .../variantopedia/variant_details.html | 48 +------------ .../templates/variantopedia/view_allele.html | 6 +- 5 files changed, 139 insertions(+), 47 deletions(-) create mode 100644 annotation/templates/annotation/tags/clinvar_tag.html diff --git a/annotation/models/models.py b/annotation/models/models.py index 8458990f2..48f337352 100644 --- a/annotation/models/models.py +++ b/annotation/models/models.py @@ -6,6 +6,7 @@ from functools import cached_property from typing import List, Optional, Dict, Callable, Tuple +import requests from Bio import Entrez from Bio.Data.IUPACData import protein_letters_1to3 from django.conf import settings @@ -32,7 +33,8 @@ from genes.models_enums import AnnotationConsortium from library.django_utils import object_is_referenced from library.django_utils.django_partition import RelatedModelsPartitionModel -from library.utils import invert_dict, name_from_filename +from library.log_utils import report_exc_info +from library.utils import invert_dict, name_from_filename, JsonObjType from ontology.models import OntologyVersion from patients.models_enums import GnomADPopulation from snpdb.models import GenomeBuild, Variant, VariantGridColumn, Q, VCF, DBSNP_PATTERN, VARIANT_PATTERN, \ @@ -124,6 +126,17 @@ class ClinVar(models.Model): clinvar_suspect_reason_code = models.IntegerField(default=0) drug_response = models.BooleanField(default=False) + @property + def fetch_json_summary(self) -> JsonObjType: + try: + url = f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=clinvar&id={self.clinvar_variation_id}&retmode=json" + r = requests.get(url) + r.raise_for_status() + return r.json() + except: + report_exc_info() + return {} + @property def stars(self): return ClinVarReviewStatus(self.clinvar_review_status).stars() diff --git a/annotation/templates/annotation/tags/clinvar_tag.html b/annotation/templates/annotation/tags/clinvar_tag.html new file mode 100644 index 000000000..9214acf1d --- /dev/null +++ b/annotation/templates/annotation/tags/clinvar_tag.html @@ -0,0 +1,49 @@ +{% load clinvar_tags %} +{% load ui_utils %} +{% load js_tags %} +
+
ClinVar
+
+ {% if clinvar %} + {% labelled label="ClinVar Variation ID" %} + {{ clinvar.clinvar_variation_id }} + {% endlabelled %} + {% labelled label="Highest Pathogenicity" %}{{ clinvar.highest_pathogenicity }}{% endlabelled %} + {% labelled label="Clinical Significance" %}{{ clinvar.clinical_significance }}{% endlabelled %} + {% if clinvar.conflicting_clinical_significance %} + {% labelled label="Conflicting Clinical Significance" %}{{ clinvar.conflicting_clinical_significance }}{% endlabelled %} + {% endif %} + {% labelled label="Preferred Disease Name" %}{{ clinvar.clinvar_preferred_disease_name }}{% endlabelled %} + {% labelled label="Disease Database Name" %}{{ clinvar.clinvar_disease_database_name }}{% endlabelled %} + {% labelled label="Review status" %} + + {% clinvar_stars clinvar.stars %} {{ clinvar.get_clinvar_review_status_display }} + + {% endlabelled %} + {% labelled label="Clinical Sources" %}{{ clinvar.clinvar_clinical_sources }}{% endlabelled %} + {% labelled label="Origin" %}{{ clinvar.get_origin_display }}{% endlabelled %} + {% if clinvar_suspect_reason_code %} + {% labelled label="Suspect Reason Code" %}{{ clinvar.get_suspect_reason_code_display }}{% endlabelled %} + {% endif %} + {% labelled label="Drug Response" %}{{ clinvar.drug_response }}{% endlabelled %} + {% labelled label="Citations" %} + {% if num_clinvar_citations %}Show {{ num_clinvar_citations }} Literature Citations + {% else %}No Citations. + {% endif %} + {% endlabelled %} + {% labelled label="JSON" %} + {% modal label="API Response" admin_only=True %} + {% code_json clinvar.fetch_json_summary css_class="modal-body" %} + {% endmodal %} + {% endlabelled %} +
+ {% for citation_id in clinvar_citations %} +
+ {% endfor %} +
+ {% else %} + No ClinVar entry (version: {{ annotation_version.clinvar_version.annotation_date.date }}) + Search ClinVar + {% endif %} +
+
\ No newline at end of file diff --git a/annotation/templatetags/clinvar_tags.py b/annotation/templatetags/clinvar_tags.py index 3f551044f..971d15d05 100644 --- a/annotation/templatetags/clinvar_tags.py +++ b/annotation/templatetags/clinvar_tags.py @@ -1,4 +1,13 @@ +from typing import Optional, Union, List + from django.template import Library +from more_itertools import first + +from annotation.models import ClinVar, AnnotationVersion +from genes.hgvs import HGVSMatcher +from library.log_utils import report_exc_info +from snpdb.genome_build_manager import GenomeBuildManager +from snpdb.models import Allele, Variant, GenomeBuild register = Library() @@ -8,3 +17,62 @@ def clinvar_stars(stars): MAX_STARS = 4 stars = ([True] * stars) + ([False] * (MAX_STARS - stars)) return {"stars": stars} + +@register.inclusion_tag("annotation/tags/clinvar_tag.html") +def clinvar(allele: Optional[Union[int, Allele]] = None, variant: Optional[Union[int, Variant]] = None, genome_build: Optional[GenomeBuild] = None, annotation_version: Optional[AnnotationVersion] = None): + if not allele and not variant: + raise ValueError("One of allele or variant must be provided") + + if not genome_build: + if annotation_version: + genome_build = annotation_version.genome_build + else: + genome_build = GenomeBuildManager.get_current_genome_build() + + is_desired_build = True + + if not variant: + variant: Variant + if isinstance(allele, int): + allele = Allele.objects.get(pk=allele) + variant = allele.variant_for_build_optional(genome_build) + if not variant: + variant = allele.variants.first() + genome_build = first(variant.genome_builds) + is_desired_build = False + + if not annotation_version: + annotation_version = AnnotationVersion.latest(genome_build) + + clinvar_record: Optional[ClinVar] = None + + if variant.can_have_annotation: + clinvar_qs = ClinVar.objects.filter(variant=variant, version=annotation_version.clinvar_version) + try: + clinvar_record = clinvar_qs.get() + except ClinVar.MultipleObjectsReturned: + # Report this - but carry on for the user + report_exc_info({"target": f"Variant {variant.pk}), Annotation Version {annotation_version.pk}"}) + clinvar_record = clinvar_qs.first() + except ClinVar.DoesNotExist: + pass + + clinvar_citations: List[str] = None + num_clinvar_citations: Optional[int] = None + + g_hgvs: Optional[str] = None + if not clinvar_record: + g_hgvs = HGVSMatcher(genome_build).variant_to_g_hgvs(variant) + else: + clinvar_citations = clinvar_record.citation_ids + num_clinvar_citations = len(clinvar_citations) + + return { + "clinvar": clinvar_record, + "clinvar_citations": clinvar_citations, + "num_clinvar_citations": num_clinvar_citations, + "is_desired_build": is_desired_build, + "genome_build": genome_build, + "annotation_version": annotation_version, + "g_hgvs": g_hgvs + } \ No newline at end of file diff --git a/variantopedia/templates/variantopedia/variant_details.html b/variantopedia/templates/variantopedia/variant_details.html index dd0dde01f..5c565d354 100644 --- a/variantopedia/templates/variantopedia/variant_details.html +++ b/variantopedia/templates/variantopedia/variant_details.html @@ -7,7 +7,7 @@ {% load settings_tags %} {% load user_tag_color_tags %} {% load settings_tags %} - +{% load clinvar_tags %} {% settings_value 'ANNOTATION_PUBMED_SEARCH_TERMS_ENABLED' as annotation_pubmed_search_terms_enabled %} {% settings_value 'VARIANT_DETAILS_SHOW_ANNOTATION' as show_annotation %} {% settings_value 'VARIANT_DETAILS_SHOW_GENE_COVERAGE' as show_gene_coverage %} @@ -555,50 +555,8 @@

Tags

{% if show_annotation and variant_annotation %} -
-
-
ClinVar
-
- {% if clinvar %} - {% labelled label="Allele" %} - {{ clinvar.clinvar_variation_id }} -  AlleleID {{ clinvar.clinvar_allele_id }} - {% endlabelled %} - {% labelled label="Highest pathogenicity" %}{{ clinvar.highest_pathogenicity }}{% endlabelled %} - {% labelled label="Clinical significance" %}{{ clinvar.clinical_significance }}{% endlabelled %} - {% if clinvar.conflicting_clinical_significance %} - {% labelled label="Conflicting clinical significance" %}{{ clinvar.conflicting_clinical_significance }}{% endlabelled %} - {% endif %} - {% labelled label="Preferred disease name" %}{{ clinvar.clinvar_preferred_disease_name }}{% endlabelled %} - {% labelled label="Disease database name" %}{{ clinvar.clinvar_disease_database_name }}{% endlabelled %} - {% labelled label="Review status" %} - {% load clinvar_tags %} - - {% clinvar_stars clinvar.stars %} {{ clinvar.get_clinvar_review_status_display }} - - {% endlabelled %} - {% labelled label="Clinical sources" %}{{ clinvar.clinvar_clinical_sources }}{% endlabelled %} - {% labelled label="Origin" %}{{ clinvar.get_origin_display }}{% endlabelled %} - {% if clinvar_suspect_reason_code %} - {% labelled label="Suspect reason code" %}{{ clinvar.get_suspect_reason_code_display }}{% endlabelled %} - {% endif %} - {% labelled label="Drug response" %}{{ clinvar.drug_response }}{% endlabelled %} - {% labelled label="Citations" %} - {% if num_clinvar_citations %}Show {{ num_clinvar_citations }} Literature Citations - {% else %}No Citations. - {% endif %} - {% endlabelled %} -
- {% for citation_id in clinvar_citations %} -
- {% endfor %} -
- {% else %} - No ClinVar entry (version: {{ annotation_version.clinvar_version.annotation_date.date }}) - Search ClinVar - {% endif %} -
-
+
+ {% clinvar variant=variant annotation_version=annotation_version %}
diff --git a/variantopedia/templates/variantopedia/view_allele.html b/variantopedia/templates/variantopedia/view_allele.html index 5d57c7a00..dfbdb4531 100644 --- a/variantopedia/templates/variantopedia/view_allele.html +++ b/variantopedia/templates/variantopedia/view_allele.html @@ -6,7 +6,7 @@ {% load ui_help %} {% load ui_menu_bars %} {% load settings_tags %} - +{% load clinvar_tags %} {% block submenu %}{% menu_bar_data %}{% endblock submenu %} {% block head %} -

{{ citation.title }} -

- {% if citation.authors %} -
- {{ citation.authors }} -
- {% endif %} -
- {{ citation.journal | default_if_none:"" }} - - {{ citation.pk }} - - {% if citation.abstract %} - Show abstract. - {% endif %} -
-
- - {% if citation.abstract %} - - {% endif %} -
\ No newline at end of file diff --git a/annotation/templates/annotation/tags/clinvar_stars.html b/annotation/templates/annotation/tags/clinvar_stars.html index b56cf8a22..7e9432cff 100644 --- a/annotation/templates/annotation/tags/clinvar_stars.html +++ b/annotation/templates/annotation/tags/clinvar_stars.html @@ -1,6 +1,4 @@
-{% comment %}yeah I know this is brute force coding you wouldn't expect form a graduate, but since I was changing -the colour of the stars, it was just easier{% endcomment %} {% for star in stars %} {% if star %}{% else %}{% endif %} {% endfor %} diff --git a/annotation/templates/annotation/tags/clinvar_tag.html b/annotation/templates/annotation/tags/clinvar_tag.html index a4565e70d..7b223af66 100644 --- a/annotation/templates/annotation/tags/clinvar_tag.html +++ b/annotation/templates/annotation/tags/clinvar_tag.html @@ -5,104 +5,50 @@ {% load english_tags %}

{% if expert_panel_only %}Expert Panels{% else %}ClinVar Records{% endif %}

- {% with clinvar=data.clinvar %} - {% if clinvar %} - {% if not expert_panel_only %} - {% clinvar_stars clinvar.stars %}{{ clinvar.get_clinvar_review_status_display }} | {{ clinvar.clinical_significance | code_to_english }} | - as of ClinVar Export {% timestamp data.annotation_version.clinvar_version.annotation_date time_ago=True %} - | - {% elif not clinvar.is_expert_panel_or_greater %} - No expert panel available as of ClinVar Export {% timestamp data.annotation_version.clinvar_version.annotation_date time_ago=True %} - {% endif %} - View on ClinVar -
- {% if expert_panel_only and data.is_expert_panel_or_greater %} - {% comment %}If we're only showing expert panels - insta-show them{% endcomment %} -
-
- Loading... -
-
- {% elif not expert_panel_only %} - {% comment %}Do we need to restore more data that was in ClinVar tag before? e.g. drug_response, etc{% endcomment %} -
- {% labelled label="Origin" %}{{ clinvar.get_origin_display }}{% endlabelled %} - {% labelled label="Diseases" %}{% for term in clinvar.clinvar_disease_database_terms %}{% if not forloop.first %}|{% endif %} {% ontology_term term %} {% endfor %}{% endlabelled %} - {% labelled label="Clinical Sources" %}{% for source in clinvar.clinvar_clinical_sources_list %}{% if not forloop.first %}|{% endif %} {{ source | code_to_english }} {% endfor %}{% endlabelled %} -
-
-
-
- {% with citation_ids=clinvar.citation_ids %} -
- {% if citation_ids %} - Toggle {% count citation_ids singular='Citation' plural='Citations' %} from ClinVar -
- {% for citation_id in citation_ids %} -
- {% endfor %} -
- {% else %} -
No citations from ClinVar found
- {% endif %} -
- {% endwith %} - {% endif %} - {% else %} - No ClinVar entry (as of version: {{ data.annotation_version.clinvar_version.annotation_date.date }}) Search ClinVar - {% endif %} - {% endwith %} - -{% comment %} -
- -
- {% if clinvar %} - {% labelled label="Highest Pathogenicity" %}{{ clinvar.highest_pathogenicity }}{% endlabelled %} - {% labelled label="Clinical Significance" %}{{ clinvar.clinical_significance | code_to_english }}{% endlabelled %} - {% if clinvar.conflicting_clinical_significance %} - {% labelled label="Conflicting Clinical Significance" %}{{ clinvar.conflicting_clinical_significance }}{% endlabelled %} - {% endif %} - {% labelled label="Preferred Disease Name" %}{{ clinvar.clinvar_preferred_disease_name | code_to_english }}{% endlabelled %} - {% labelled label="Disease Database Name" %} - {% for term in clinvar.clinvar_disease_database_terms %} - {% ontology_term term show_link=True %}
- {% endfor %} - {% endlabelled %} - {% labelled label="Review Status" %} - - {% clinvar_stars clinvar.stars %} {{ clinvar.get_clinvar_review_status_display }} - - {% endlabelled %} - {% labelled label="Clinical Sources" %} - {% for term in clinvar.clinvar_clinical_sources_list %} - {{ term | code_to_english }}
- {% endfor %} - {% endlabelled %} - {% labelled label="Origin" %}{{ clinvar.get_origin_display }}{% endlabelled %} - {% if clinvar_suspect_reason_code %} - {% labelled label="Suspect Reason Code" %}{{ clinvar.get_suspect_reason_code_display }}{% endlabelled %} - {% endif %} - {% labelled label="Drug Response" %}{{ clinvar.drug_response }}{% endlabelled %} - {% labelled label="Citations" %} - {% if num_clinvar_citations %}Show {{ num_clinvar_citations }} Literature Citations - {% else %}No Citations. - {% endif %} - {% endlabelled %} - {% labelled label="RCV Data" %} - {% modal label="API Response" admin_only=True %} - {% code_xml clinvar.fetch_rcv_data css_class="modal-body" %} - {% endmodal %} - {% endlabelled %} -
- {% for citation_id in clinvar_citations %} -
- {% endfor %} +{% with clinvar=data.clinvar %} + {% if clinvar %} + {% if not expert_panel_only %} + {% clinvar_stars clinvar.stars %}{{ clinvar.get_clinvar_review_status_display }} | {{ clinvar.clinical_significance | code_to_english }} | + as of ClinVar Export {% timestamp data.annotation_version.clinvar_version.annotation_date time_ago=True %} + | + {% elif not clinvar.is_expert_panel_or_greater %} + No expert panel available as of ClinVar Export {% timestamp data.annotation_version.clinvar_version.annotation_date time_ago=True %} + {% endif %} + View on ClinVar +
+ {% if expert_panel_only and data.is_expert_panel_or_greater %} + {% comment %}If we're only showing expert panels - insta-show them{% endcomment %} +
+
+ Loading... +
- {% else %} - No ClinVar entry (version: {{ annotation_version.clinvar_version.annotation_date.date }}) - Search ClinVar + {% elif not expert_panel_only %} + {% comment %}Do we need to restore more data that was in ClinVar tag before? e.g. drug_response, etc{% endcomment %} +
+ {% labelled label="Origin" %}{{ clinvar.get_origin_display }}{% endlabelled %} + {% labelled label="Diseases" %}{% for term in clinvar.clinvar_disease_database_terms %}{% if not forloop.first %}|{% endif %} {% ontology_term term %} {% endfor %}{% endlabelled %} + {% labelled label="Clinical Sources" %}{% for source in clinvar.clinvar_clinical_sources_list %}{% if not forloop.first %}|{% endif %} {{ source | code_to_english }} {% endfor %}{% endlabelled %} +
+
+
+
+ {% with citation_ids=clinvar.citation_ids %} +
+ {% if citation_ids %} + Toggle {% count citation_ids singular='Citation' plural='Citations' %} from ClinVar +
+ {% for citation_id in citation_ids %} +
+ {% endfor %} +
+ {% else %} +
No citations from ClinVar found
+ {% endif %} +
+ {% endwith %} {% endif %} -
-
-{% endcomment %} \ No newline at end of file + {% else %} + No ClinVar entry (as of version: {{ data.annotation_version.clinvar_version.annotation_date.date }}) Search ClinVar + {% endif %} +{% endwith %} diff --git a/library/utils/xml_utils.py b/library/utils/xml_utils.py index c525da956..6e07d725a 100644 --- a/library/utils/xml_utils.py +++ b/library/utils/xml_utils.py @@ -94,6 +94,16 @@ def wrapper(*args, **kwargs): class XmlParser: + """ + A utility for helping us parse streaming XML data (as in open tag/close tag events) into classes. + Can be run on things like clinvar's multi GB XML output, or just a few kb of XML. + + Annotate methods with a parser_path (a series of cascading path predicates), if the predicate is matched + at the stage of processing the XML, then the method is called. + + There's an expectation that we're only populating one kind of object. When the XML indicates that there should + be a new instance, call `set_yieldable` with the new object. Then other methods should parse it. + """ @staticmethod def get_parser_methods(klass): From 4e9134ea4c0bc2a560d68263993fe09d6d819a76 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Mon, 14 Aug 2023 13:43:03 +1000 Subject: [PATCH 31/37] Remove links to allele/ClinVar in ClinVar admin as just too database intensive. --- annotation/admin.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/annotation/admin.py b/annotation/admin.py index 25f2c9b44..957072c27 100644 --- a/annotation/admin.py +++ b/annotation/admin.py @@ -46,8 +46,13 @@ class ClinVarRecordCollectionAdmin(ModelAdminBasics): inlines = (ClinVarRecordAdmin, ) list_per_page = 20 - list_display = ("pk", "clinvar", "allele", "min_stars_loaded", "last_loaded") + # list_display = ("pk", "clinvar", "allele", "min_stars_loaded", "last_loaded") + list_display = ("pk", "clinvar_variation_id", "min_stars_loaded", "last_loaded") + + """ + # these took prohibitively long to load + @admin_list_column(limit=0) def clinvar(self, obj: ClinVarRecordCollection): try: @@ -65,6 +70,7 @@ def allele(self, obj: ClinVarRecordCollection): return SafeString(f"{allele}") except Exception as ex: return str(ex) + """ def has_change_permission(self, request, obj=None): return False From 6a67f212471174c63ad64dd639491740127273c6 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 11:16:57 +1000 Subject: [PATCH 32/37] ClinVarRecords - simplify code by removing min_stars on caching Still provide it for displaying. --- annotation/admin.py | 19 ++------ annotation/clinvar_xml_parser.py | 44 ++----------------- ...linvarrecordcollection_min_stars_loaded.py | 17 +++++++ annotation/models/models.py | 1 - .../annotation/clinvar_records_detail.html | 12 ++--- annotation/views.py | 8 ++-- ...classification_export_formatter_clinvar.py | 5 +-- 7 files changed, 36 insertions(+), 70 deletions(-) create mode 100644 annotation/migrations/0072_remove_clinvarrecordcollection_min_stars_loaded.py diff --git a/annotation/admin.py b/annotation/admin.py index 957072c27..fa2b11b4b 100644 --- a/annotation/admin.py +++ b/annotation/admin.py @@ -6,7 +6,7 @@ from django.utils.safestring import SafeString from annotation import models -from annotation.clinvar_xml_parser import ClinVarFetchRequest +from annotation.clinvar_xml_parser import ClinVarFetchRequest, CLINVAR_RECORD_CACHE_DAYS from annotation.models import Citation, CitationFetchRequest, ClinVarRecordCollection, ClinVarRecord, VariantAnnotation, \ ClinVar from snpdb.admin_utils import ModelAdminBasics, admin_action, admin_list_column, get_admin_url @@ -48,7 +48,7 @@ class ClinVarRecordCollectionAdmin(ModelAdminBasics): # list_display = ("pk", "clinvar", "allele", "min_stars_loaded", "last_loaded") - list_display = ("pk", "clinvar_variation_id", "min_stars_loaded", "last_loaded") + list_display = ("pk", "clinvar_variation_id", "last_loaded") """ # these took prohibitively long to load @@ -78,29 +78,18 @@ def has_change_permission(self, request, obj=None): def has_add_permission(self, request): return False - @admin_action("Refresh: If Old (current stars)") + @admin_action(f"Refresh: If Older than {CLINVAR_RECORD_CACHE_DAYS} days") def refresh_old(self, request, queryset: QuerySet[ClinVarRecordCollection]): for obj in queryset: ClinVarFetchRequest( clinvar_variation_id=obj.clinvar_variation_id, - min_stars=obj.min_stars_loaded ).fetch() - @admin_action("Refresh: Force (current stars)") + @admin_action("Refresh: Force") def refresh_force(self, request, queryset: QuerySet[ClinVarRecordCollection]): for obj in queryset: ClinVarFetchRequest( clinvar_variation_id=obj.clinvar_variation_id, - min_stars=obj.min_stars_loaded, - max_cache_age=timedelta(seconds=0) - ).fetch() - - @admin_action("Refresh: Force (1+ stars)") - def refresh_force_one_plus_stars(self, request, queryset: QuerySet[ClinVarRecordCollection]): - for obj in queryset: - ClinVarFetchRequest( - clinvar_variation_id=obj.clinvar_variation_id, - min_stars=1, max_cache_age=timedelta(seconds=0) ).fetch() diff --git a/annotation/clinvar_xml_parser.py b/annotation/clinvar_xml_parser.py index ea1fbfdd2..8572c8102 100644 --- a/annotation/clinvar_xml_parser.py +++ b/annotation/clinvar_xml_parser.py @@ -1,6 +1,5 @@ from dataclasses import dataclass, field from datetime import timedelta, datetime -from functools import cached_property from urllib.error import HTTPError import time from django.utils import timezone @@ -42,35 +41,6 @@ } -@dataclass -class ClinVarFetchResponse: - """ - This warps a clinvar_record_collection just so we can override records to match the number of stars - requested - """ - - clinvar_record_collection: ClinVarRecordCollection - min_stars: int - - @property - def clinvar_variation_id(self): - return self.clinvar_record_collection.clinvar_variation_id - - @property - def rcvs(self): - return self.clinvar_record_collection.rcvs - - @property - def last_loaded(self): - return self.clinvar_record_collection.last_loaded - - @cached_property - def records(self): - # it's possible that we've retrieved records with min stars of 1 - # and now we re-used the cache, but only want records with min stars of 3 (so filter the others out) - return self.clinvar_record_collection.records_with_min_stars(self.min_stars) - - @dataclass class ClinVarFetchRequest: """ @@ -78,7 +48,6 @@ class ClinVarFetchRequest: """ clinvar_variation_id: int - min_stars: int """ The API currently only allows us to ask for all records for that clinvar_variation_id and then we can cache only the ones we want. if we've already cached records (but with a lower min_stars, we can just re-use that) @@ -89,7 +58,7 @@ class ClinVarFetchRequest: How old until the cache is considered stale, provide seconds=0 if you want to force a refresh """ - def fetch(self) -> ClinVarFetchResponse: + def fetch(self) -> ClinVarRecordCollection: fetch_date = timezone.now() with transaction.atomic(): @@ -101,8 +70,6 @@ def fetch(self) -> ClinVarFetchResponse: if not created: if \ (clinvar_record_collection.parser_version == ClinVarXmlParser.PARSER_VERSION) and \ - clinvar_record_collection.min_stars_loaded is not None and \ - (clinvar_record_collection.min_stars_loaded <= self.min_stars) and \ clinvar_record_collection.last_loaded and \ ((fetch_date - clinvar_record_collection.last_loaded) <= self.max_cache_age): # if all the above is true, then our cache is fine @@ -121,7 +88,6 @@ def fetch(self) -> ClinVarFetchResponse: # update our cache clinvar_record_collection.last_loaded = fetch_date - clinvar_record_collection.min_stars_loaded = self.min_stars clinvar_record_collection.rcvs = response.rcvs clinvar_record_collection.parser_version = ClinVarXmlParser.PARSER_VERSION clinvar_record_collection.save() @@ -131,8 +97,7 @@ def fetch(self) -> ClinVarFetchResponse: # but a wipe and replace is easier ClinVarRecord.objects.filter(clinvar_record_collection=clinvar_record_collection).delete() - min_star_records = [r for r in response.all_records if r.stars >= self.min_stars] - ClinVarRecord.objects.bulk_create(min_star_records) + ClinVarRecord.objects.bulk_create(response.all_records) break except HTTPError as http_ex: @@ -145,10 +110,7 @@ def fetch(self) -> ClinVarFetchResponse: # out of attempts or not 400 raise - return ClinVarFetchResponse( - clinvar_record_collection=clinvar_record_collection, - min_stars=self.min_stars - ) + return clinvar_record_collection @dataclass diff --git a/annotation/migrations/0072_remove_clinvarrecordcollection_min_stars_loaded.py b/annotation/migrations/0072_remove_clinvarrecordcollection_min_stars_loaded.py new file mode 100644 index 000000000..604b18882 --- /dev/null +++ b/annotation/migrations/0072_remove_clinvarrecordcollection_min_stars_loaded.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.2 on 2023-08-15 01:04 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('annotation', '0071_clinvarrecordcollection_alter_clinvar_options_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='clinvarrecordcollection', + name='min_stars_loaded', + ), + ] diff --git a/annotation/models/models.py b/annotation/models/models.py index 5ebab0e06..4fd9831f7 100644 --- a/annotation/models/models.py +++ b/annotation/models/models.py @@ -194,7 +194,6 @@ class Meta: rcvs = ArrayField(base_field=models.TextField(), blank=True, null=True, size=None) last_loaded = models.DateTimeField(blank=True, null=True) parser_version = models.IntegerField(blank=True, null=True) - min_stars_loaded = models.IntegerField(blank=True, null=True) def records_with_min_stars(self, min_stars: int) -> List['ClinVarRecord']: return list(sorted(self.clinvarrecord_set.filter(stars__gte=min_stars), reverse=True)) diff --git a/annotation/templates/annotation/clinvar_records_detail.html b/annotation/templates/annotation/clinvar_records_detail.html index 02dfdf59f..17854005d 100644 --- a/annotation/templates/annotation/clinvar_records_detail.html +++ b/annotation/templates/annotation/clinvar_records_detail.html @@ -6,15 +6,15 @@
-
 {% timestamp clinvar_records.last_loaded time_ago=True %}
+
 {% timestamp clinvar_record_collection.last_loaded time_ago=True %}
{% if user.is_superuser %}
{% modal label="Debug" admin_only=True size="md" %}
-{% if clinvar_records.records %} +{% if records %} @@ -36,7 +36,7 @@ - {% for record in clinvar_records.records %} + {% for record in records %} diff --git a/annotation/views.py b/annotation/views.py index bd1bfec59..baa650d1b 100644 --- a/annotation/views.py +++ b/annotation/views.py @@ -504,10 +504,10 @@ def citations_json(request, citations_ids_list): def view_clinvar_records_detail(request, clinvar_variation_id: int, min_stars: int): - records = clinvar_record_collection = ClinVarFetchRequest( - clinvar_variation_id=clinvar_variation_id, - min_stars=min_stars + clinvar_record_collection = ClinVarFetchRequest( + clinvar_variation_id=clinvar_variation_id ).fetch() return render(request, "annotation/clinvar_records_detail.html", { - "clinvar_records": records + "clinvar_record_collection": clinvar_record_collection, + "records": clinvar_record_collection.records_with_min_stars(min_stars) }) \ No newline at end of file diff --git a/classification/views/exports/classification_export_formatter_clinvar.py b/classification/views/exports/classification_export_formatter_clinvar.py index 1d2cb52f7..23883049c 100644 --- a/classification/views/exports/classification_export_formatter_clinvar.py +++ b/classification/views/exports/classification_export_formatter_clinvar.py @@ -390,9 +390,8 @@ def row(self, allele_data: AlleleData) -> List[str]: if clinvar_record := allele_data["clinvar"]: if clinvar_record.is_expert_panel_or_greater: records = ClinVarFetchRequest( - clinvar_variation_id=clinvar_record.clinvar_variation_id, - min_stars=CLINVAR_REVIEW_EXPERT_PANEL_STARS_VALUE - ).fetch().records + clinvar_variation_id=clinvar_record.clinvar_variation_id + ).fetch().records_with_min_stars(CLINVAR_REVIEW_EXPERT_PANEL_STARS_VALUE) if records: if len(records) > 1: logging.warning(f"For allele {allele_data.allele_id} we have {len(records)} expert panels") From 97cd9ee1391ba5605e659aa2f39d35406b9b69a9 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 12:10:29 +1000 Subject: [PATCH 33/37] Allele page - tidy up, g.HGVS, allele infos --- .../annotation/tags/clinvar_tag.html | 2 +- .../classification_variant_info_models.py | 5 +++ .../templates/classification/tags/c_hgvs.html | 2 +- .../tags/imported_allele_info.html | 5 ++- classification/variant_card.py | 16 +++++++- snpdb/models/models_genome.py | 5 +++ .../default_static/css/global_bs.css | 7 +++- .../default_static/css/global_bs.css.map | 2 +- .../default_static/css/global_bs.scss | 7 +++- .../variantopedia/variant_details.html | 2 +- .../templates/variantopedia/view_allele.html | 39 +++++++++++-------- 11 files changed, 65 insertions(+), 27 deletions(-) diff --git a/annotation/templates/annotation/tags/clinvar_tag.html b/annotation/templates/annotation/tags/clinvar_tag.html index 7b223af66..2d7cc1174 100644 --- a/annotation/templates/annotation/tags/clinvar_tag.html +++ b/annotation/templates/annotation/tags/clinvar_tag.html @@ -49,6 +49,6 @@

{% if expert_panel_only %}Expert Panels{% else %}ClinVar Records{% endif %}< {% endwith %} {% endif %} {% else %} - No ClinVar entry (as of version: {{ data.annotation_version.clinvar_version.annotation_date.date }}) Search ClinVar + No ClinVar entry (as of version: {{ data.annotation_version.clinvar_version.annotation_date.date }}) Search ClinVar {% endif %} {% endwith %} diff --git a/classification/models/classification_variant_info_models.py b/classification/models/classification_variant_info_models.py index 379f9765c..aa3968459 100644 --- a/classification/models/classification_variant_info_models.py +++ b/classification/models/classification_variant_info_models.py @@ -403,6 +403,11 @@ def get_absolute_url(self): def __str__(self): return f"{self.imported_genome_build_patch_version} {self.imported_c_hgvs or self.imported_g_hgvs}" + def __lt__(self, other: 'ImportedAlleleInfo'): + def sort_key(obj: ImportedAlleleInfo): + return obj.imported_genome_build_patch_version, obj.imported_c_hgvs + return sort_key(self) < sort_key(other) + @property def variant_coordinates_imported_and_resolved(self) -> Tuple[VariantCoordinate, VariantCoordinate]: imported_vc: Optional[VariantCoordinate] = self.variant_coordinate_obj diff --git a/classification/templates/classification/tags/c_hgvs.html b/classification/templates/classification/tags/c_hgvs.html index 1094db5d0..a6e79bd2c 100644 --- a/classification/templates/classification/tags/c_hgvs.html +++ b/classification/templates/classification/tags/c_hgvs.html @@ -17,7 +17,7 @@ ({{ c_hgvs.gene_symbol }}) : - {% else %}:{% endif %} + {% else %}:{% endif %} {{ c_hgvs.raw_c }} diff --git a/classification/templates/classification/tags/imported_allele_info.html b/classification/templates/classification/tags/imported_allele_info.html index 85cfbe6fb..14ce39db0 100644 --- a/classification/templates/classification/tags/imported_allele_info.html +++ b/classification/templates/classification/tags/imported_allele_info.html @@ -2,8 +2,9 @@ {% load ui_utils %} {% if imported_allele_info %} - {{ imported_allele_info.imported_genome_build_patch_version }}
{% c_hgvs imported_allele_info.imported_hgvs_obj %} - {{ imported_allele_info.issue_icon|default_if_none:'' }} + {{ imported_allele_info.imported_genome_build_patch_version }} +
+ {% c_hgvs imported_allele_info.imported_hgvs_obj %}{{ imported_allele_info.issue_icon|default_if_none:'' }}
{% else %} - diff --git a/classification/variant_card.py b/classification/variant_card.py index 40c3a2561..a9abfe969 100644 --- a/classification/variant_card.py +++ b/classification/variant_card.py @@ -114,6 +114,18 @@ def allele_merge_log_qs(self) -> QuerySet[AlleleMergeLog]: def clinvar_data(self) -> ClinVarDetails: return ClinVarDetails.instance_from(allele=self.allele) + @cached_property + def imported_allele_infos(self): + return list( + sorted(ImportedAlleleInfo.objects.filter( + allele=self.allele + ).all()) + ) + @property - def has_imported_allele_infos(self) -> bool: - return any(bool(vc.imported_allele_infos) for vc in self.variant_cards) \ No newline at end of file + def imported_allele_info_label(self): + count = len(self.imported_allele_infos) + if count == 1: + return "1 Imported c.HGVS Resolving to this Allele" + else: + return f"{count} Imported c.HGVSs resolving to this Allele" diff --git a/snpdb/models/models_genome.py b/snpdb/models/models_genome.py index ecc2cc715..e0e017149 100644 --- a/snpdb/models/models_genome.py +++ b/snpdb/models/models_genome.py @@ -267,6 +267,11 @@ class Meta: def __str__(self): return self.name + def __lt__(self, other: 'GenomeBuildPatchVersion'): + def sort_key(obj: GenomeBuildPatchVersion): + return obj.genome_build.name, obj.patch_version or 0 + return sort_key(self) < sort_key(other) + @staticmethod def get_or_create(name: str) -> 'GenomeBuildPatchVersion': if match := GenomeBuildPatchVersion.GENOME_BUILD_VERSION_RE.match(name): diff --git a/variantgrid/static_files/default_static/css/global_bs.css b/variantgrid/static_files/default_static/css/global_bs.css index c0fd87ff7..d950debc9 100644 --- a/variantgrid/static_files/default_static/css/global_bs.css +++ b/variantgrid/static_files/default_static/css/global_bs.css @@ -1151,7 +1151,12 @@ a .c-hgvs-body .c-hgvs-transcript, a .c-hgvs-body .c-hgvs-nomen { .c-hgvs-body .colon { margin-left: -1pt; margin-right: 1pt; - color: #444; + color: #666; +} +.c-hgvs-body .colon-no-gene-symbol { + margin-left: 2pt; + margin-right: 2pt; + color: #666; } .c-hgvs-body .c-hgvs-transcript, .c-hgvs-body .c-hgvs-gene-symbol-b { white-space: nowrap; diff --git a/variantgrid/static_files/default_static/css/global_bs.css.map b/variantgrid/static_files/default_static/css/global_bs.css.map index 9ea81a87a..e13a5d27e 100644 --- a/variantgrid/static_files/default_static/css/global_bs.css.map +++ b/variantgrid/static_files/default_static/css/global_bs.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["global_bs.scss"], "names": [], "file": "global_bs.css" diff --git a/variantgrid/static_files/default_static/css/global_bs.scss b/variantgrid/static_files/default_static/css/global_bs.scss index 4c7a2ef7b..3d4c69b2e 100644 --- a/variantgrid/static_files/default_static/css/global_bs.scss +++ b/variantgrid/static_files/default_static/css/global_bs.scss @@ -1178,7 +1178,12 @@ a .c-hgvs-body { .colon { margin-left: -1pt; margin-right: 1pt; - color: #444; + color: #666; + } + .colon-no-gene-symbol { + margin-left: 2pt; + margin-right: 2pt; + color: #666; } .c-hgvs-transcript, .c-hgvs-gene-symbol-b { white-space: nowrap; diff --git a/variantopedia/templates/variantopedia/variant_details.html b/variantopedia/templates/variantopedia/variant_details.html index 9f10966ff..ec00f111a 100644 --- a/variantopedia/templates/variantopedia/variant_details.html +++ b/variantopedia/templates/variantopedia/variant_details.html @@ -482,7 +482,7 @@

Variant

Variant
- {% labelled id="g-hgvs" label="g.HGVS" value_css="variant-coordinate variant_coordinate" %}{{ g_hgvs }}{% endlabelled %} + {% labelled id="g-hgvs" label="g.HGVS" value_css="variant-coordinate variant_coordinate" %}{% c_hgvs g_hgvs %}{% endlabelled %} {% labelled id="variant_coordinate" label="Variant Coordinate" value_css="variant-coordinate variant_coordinate" %}Loading...{% endlabelled %} {% labelled label="Genome Build" %}{{ genome_build }}{% endlabelled %} {% if variant.can_have_annotation and variant_show_canonical_hgvs %} diff --git a/variantopedia/templates/variantopedia/view_allele.html b/variantopedia/templates/variantopedia/view_allele.html index 5d5203d46..931c87d41 100644 --- a/variantopedia/templates/variantopedia/view_allele.html +++ b/variantopedia/templates/variantopedia/view_allele.html @@ -60,6 +60,22 @@ {{ allele.clingen_allele }} {% endlabelled %} + {% if allele_card.imported_allele_infos %} + {% labelled label="Imported As" %} + {% if allele_card.imported_allele_infos|length == 1 %} + {% imported_allele_info allele_card.imported_allele_infos.0 %} + {% else %} + {% modal label=allele_card.imported_allele_info_label size="md" %} + + {% endmodal %} + {% endif %} + {% endlabelled %} + {% endif %} + {% labelled label="Liftover Details" admin_only=True %} {% modal label="Liftover Details" %}
@@ -149,6 +165,7 @@
Allele Merge Log
+ {% comment %} {% for vc in allele_card.variant_cards %} @@ -170,13 +187,15 @@
Allele Merge Log
{% endfor %} + {% endcomment %} - {% comment %} If we ever want to show g.HGVSs on allele page - {% for vc in allele_card.variant_cards %}{% endfor %} + {% for vc in allele_card.variant_cards %} + {% endfor %} - {% endcomment %} @@ -195,20 +214,6 @@
Allele Merge Log
{% endfor %} - {% if allele_card.has_imported_allele_infos %} - - - {% for vc in allele_card.variant_cards %} - - {% endfor %} - - {% endif %} - {% if allele_card.has_operation %} From e8ad556e43be31dba88f74f0b8e9adf52e9de68a Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 12:29:37 +1000 Subject: [PATCH 34/37] Remove dead code --- annotation/admin.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/annotation/admin.py b/annotation/admin.py index fa2b11b4b..d061084db 100644 --- a/annotation/admin.py +++ b/annotation/admin.py @@ -46,8 +46,6 @@ class ClinVarRecordCollectionAdmin(ModelAdminBasics): inlines = (ClinVarRecordAdmin, ) list_per_page = 20 - # list_display = ("pk", "clinvar", "allele", "min_stars_loaded", "last_loaded") - list_display = ("pk", "clinvar_variation_id", "last_loaded") """ From 4084b6a36001e19d1888eb1fe495106c69530892 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 12:29:48 +1000 Subject: [PATCH 35/37] Fix sort order of Imported Allele Infos --- .../classification_variant_info_models.py | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/classification/models/classification_variant_info_models.py b/classification/models/classification_variant_info_models.py index aa3968459..a531c395b 100644 --- a/classification/models/classification_variant_info_models.py +++ b/classification/models/classification_variant_info_models.py @@ -403,11 +403,6 @@ def get_absolute_url(self): def __str__(self): return f"{self.imported_genome_build_patch_version} {self.imported_c_hgvs or self.imported_g_hgvs}" - def __lt__(self, other: 'ImportedAlleleInfo'): - def sort_key(obj: ImportedAlleleInfo): - return obj.imported_genome_build_patch_version, obj.imported_c_hgvs - return sort_key(self) < sort_key(other) - @property def variant_coordinates_imported_and_resolved(self) -> Tuple[VariantCoordinate, VariantCoordinate]: imported_vc: Optional[VariantCoordinate] = self.variant_coordinate_obj @@ -502,15 +497,10 @@ def apply_validation(self, force_update: bool = False): latest_validation.save() self.latest_validation = latest_validation - def __lt__(self, other): - if self.grch38: - if other.grch38: - return self.grch38 < other.grch38 - else: - return False - elif other.grch38: - return True - return self.imported_c_hgvs < other.imported_c_hgvs + def __lt__(self, other: 'ImportedAlleleInfo'): + def sort_key(obj: ImportedAlleleInfo): + return obj.imported_genome_build_patch_version, obj.imported_c_hgvs + return sort_key(self) < sort_key(other) @property def imported_c_hgvs_obj(self) -> Optional[CHGVS]: From 6a347a0539056f0ff6f35d9832051af2103011a7 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 12:48:36 +1000 Subject: [PATCH 36/37] Link externally for ontology terms we don't store --- ontology/models/models_ontology.py | 18 +++++++++++++++--- .../templates/ontology/tags/ontology_term.html | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ontology/models/models_ontology.py b/ontology/models/models_ontology.py index 697099438..01d7de2f5 100644 --- a/ontology/models/models_ontology.py +++ b/ontology/models/models_ontology.py @@ -318,6 +318,10 @@ def preview(self) -> PreviewData: summary=self.definition ) + @property + def is_locally_stored(self): + return self.ontology_service in OntologyService.LOCAL_ONTOLOGY_PREFIXES + def __str__(self): return f"{self.id} {self.name}" @@ -338,9 +342,6 @@ def __lt__(self, other): return self.name < other.name return self.index < other.index - def get_absolute_url(self): - return reverse('ontology_term', kwargs={"term": self.url_safe_id}) - @property def is_stub(self): return self._state.adding @@ -480,6 +481,17 @@ def padded_index(self) -> str: def external_url(self): return OntologyService.URLS[self.ontology_service].replace("${1}", self.padded_index) + def get_absolute_url(self): + return reverse('ontology_term', kwargs={"term": self.url_safe_id}) + + @property + def best_url(self): + if self.is_locally_stored: + return self.get_absolute_url() + else: + return self.external_url + + @property def url(self): if settings.ONTOLOGY_EXTERNAL_LINKS: diff --git a/ontology/templates/ontology/tags/ontology_term.html b/ontology/templates/ontology/tags/ontology_term.html index 22ccd9388..ea42e0cd1 100644 --- a/ontology/templates/ontology/tags/ontology_term.html +++ b/ontology/templates/ontology/tags/ontology_term.html @@ -1,5 +1,5 @@ {% if term %} -{% if show_link %}{% endif %} + {% if show_link %}{% endif %} {% if is_gene %}{{ term.name }}  {% else %} {{ term.id }} From 0e22e70f40c03e72a7c04046b7a3a46f2e678840 Mon Sep 17 00:00:00 2001 From: TheMadBug Date: Tue, 15 Aug 2023 12:48:49 +1000 Subject: [PATCH 37/37] Display ClinVar record curated date rather than updated date --- annotation/templates/annotation/clinvar_records_detail.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/annotation/templates/annotation/clinvar_records_detail.html b/annotation/templates/annotation/clinvar_records_detail.html index 17854005d..485a4a4f5 100644 --- a/annotation/templates/annotation/clinvar_records_detail.html +++ b/annotation/templates/annotation/clinvar_records_detail.html @@ -32,7 +32,7 @@ - + @@ -42,7 +42,7 @@ - + {% endfor %}
{% clinvar_stars record.stars record.review_status %} {{ record.submitter }} {% if record.c_hgvs %}{% c_hgvs record.c_hgvs %}{% elif record.variant_coordinate %}{{ record.variant_coordinate }}{% else %}-{% endif %}
Variant Coordinate
g.HGVS{{ vc.g_hgvs | dash_if_empty }} + {% c_hgvs vc.g_hgvs %} +
Quick Links
Imported As - {% for imported_allele in vc.imported_allele_infos %} -
{% imported_allele_info imported_allele on_allele_page=True %}
- {% empty %}- - {% endfor %} -
Operationc.HGVS Clinical Significance ConditionUpdatedCurated
{% if record.c_hgvs %}{% c_hgvs record.c_hgvs %}{% elif record.variant_coordinate %}{{ record.variant_coordinate }}{% else %}-{% endif %} {{ record.clinical_significance | ekey:"clinical_significance" }} {% if record.condition %}{% ontology_term record.condition %}{% else %}-{% endif %}{% timestamp record.submitter_date time_ago=True %}{% timestamp record.date_last_evaluated time_ago=True %}