From b0bc71064a7f8015fce251fb131f2ab8a61400a7 Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Tue, 5 Nov 2019 13:13:18 -0600 Subject: [PATCH 1/2] Pull in MANE preferred transcript from the allele registry --- app/controllers/variants_controller.rb | 8 +++- app/models/mane_preferred_transcript.rb | 51 +++++++++++++++++++++++++ config/routes.rb | 1 + 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 app/models/mane_preferred_transcript.rb diff --git a/app/controllers/variants_controller.rb b/app/controllers/variants_controller.rb index 6aef3b02..8b2cba92 100644 --- a/app/controllers/variants_controller.rb +++ b/app/controllers/variants_controller.rb @@ -2,8 +2,8 @@ class VariantsController < ApplicationController include WithComment include WithSoftDeletion - actions_without_auth :index, :show, :typeahead_results, :datatable, :gene_index, :entrez_gene_index, :variant_group_index, :myvariant_info_proxy, :allele_registry_proxy, :variant_navigation - skip_analytics :typeahead_results, :myvariant_info_proxy, :allele_registry_proxy + actions_without_auth :index, :show, :typeahead_results, :datatable, :gene_index, :entrez_gene_index, :variant_group_index, :myvariant_info_proxy, :allele_registry_proxy, :mane_preferred_transcript, :variant_navigation + skip_analytics :typeahead_results, :myvariant_info_proxy, :allele_registry_proxy, :mane_preferred_transcript def index variants = Variant.index_scope @@ -78,6 +78,10 @@ def allele_registry_proxy render json: AlleleRegistry.new(params[:variant_id]).response end + def mane_preferred_transcript + render json: ManePreferredTranscript.new(params[:variant_id]).mane_preferred_transcript + end + private def variant_params params.permit(:name, :description, :genome_build, :chromosome, :start, :stop, :reference_bases, :variant_bases, :representative_transcript, :chromosome2, :start2, :stop2, :reference_build, :representative_transcript2, :ensembl_version, variant_types: []) diff --git a/app/models/mane_preferred_transcript.rb b/app/models/mane_preferred_transcript.rb new file mode 100644 index 00000000..3f5fc243 --- /dev/null +++ b/app/models/mane_preferred_transcript.rb @@ -0,0 +1,51 @@ +class ManePreferredTranscript + attr_reader :variant + + def initialize(variant_id) + @variant = Variant.find(variant_id) + end + + def mane_preferred_transcript + Rails.cache.fetch(cache_key(variant), expires_in: 24.hours) do + if mane_preferred_ref_seq = get_mane_preferred_ref_seq(variant) + transcripts = get_allele_registry_transcripts(variant) + transcripts.find{ |t| t['hgvs'][0].start_with?(mane_preferred_ref_seq) } + end + end + end + + def get_allele_registry_transcripts(variant) + allele_response = make_allele_request(variant.allele_registry_id) + JSON.parse(allele_response)['transcriptAlleles'] + end + + def get_mane_preferred_ref_seq(variant) + gene_response = make_gene_request(variant.gene.name) + JSON.parse(gene_response)[0]['externalRecords']['MANEPrefRefSeq']['id'] rescue nil + end + + private + def make_gene_request(gene_name) + Scrapers::Util.make_get_request(gene_url(gene_name)) + rescue StandardError + {} + end + + def make_allele_request(allele_registry_id) + Scrapers::Util.make_get_request(allele_url(allele_registry_id)) + rescue StandardError + {} + end + + def gene_url(gene_name) + URI.encode("http://reg.genome.network/genes?name=#{gene_name}") + end + + def allele_url(allele_registry_id) + URI.encode("http://reg.genome.network/allele/#{allele_registry_id}") + end + + def cache_key(variant) + "mane_preferred_transcript_#{variant.id}_#{variant.hash}" + end +end diff --git a/config/routes.rb b/config/routes.rb index d0048b0e..0943854d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -100,6 +100,7 @@ resources 'variants', except: [:edit] do get 'myvariant_info_proxy' => 'variants#myvariant_info_proxy' get 'allele_registry_proxy' => 'variants#allele_registry_proxy' + get 'mane_preferred_transcript' => 'variants#mane_preferred_transcript' get 'evidence_items' => 'evidence_items#variant_index' get 'variant_groups' => 'variant_groups#variant_index' get 'assertions' => 'assertions#variant_index' From c60df18a269eb4803e2b382ce86a1f22b0fd5fa8 Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Wed, 6 Nov 2019 08:54:02 -0600 Subject: [PATCH 2/2] Fix StandardError return values --- app/models/mane_preferred_transcript.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/mane_preferred_transcript.rb b/app/models/mane_preferred_transcript.rb index 3f5fc243..2c1d65f5 100644 --- a/app/models/mane_preferred_transcript.rb +++ b/app/models/mane_preferred_transcript.rb @@ -28,13 +28,13 @@ def get_mane_preferred_ref_seq(variant) def make_gene_request(gene_name) Scrapers::Util.make_get_request(gene_url(gene_name)) rescue StandardError - {} + '{}' end def make_allele_request(allele_registry_id) Scrapers::Util.make_get_request(allele_url(allele_registry_id)) rescue StandardError - {} + '{}' end def gene_url(gene_name)