From 49956d181b5cc18acc56c1ac139402c32d7de5b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20=C3=96stberg?= Date: Mon, 13 May 2019 13:39:34 +0200 Subject: [PATCH] avoid exceptions when a non-existing gene is requested --- backend/modules/browser/browser_handlers.py | 1 + backend/modules/browser/lookups.py | 2 + backend/modules/browser/utils.py | 59 +++++++++++---------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/backend/modules/browser/browser_handlers.py b/backend/modules/browser/browser_handlers.py index 6475b9f3d..6abc27649 100644 --- a/backend/modules/browser/browser_handlers.py +++ b/backend/modules/browser/browser_handlers.py @@ -142,6 +142,7 @@ def get(self, dataset:str, gene:str, ds_version:str=None): gene = lookups.get_gene(dataset, gene_id, ds_version) if not gene: self.send_error(status_code=404, reason='Gene not found') + return ret['gene'] = gene # Add exons from transcript diff --git a/backend/modules/browser/lookups.py b/backend/modules/browser/lookups.py index 23cbaec19..652e7f359 100644 --- a/backend/modules/browser/lookups.py +++ b/backend/modules/browser/lookups.py @@ -507,6 +507,8 @@ def get_variants_in_gene(dataset:str, gene_id:str, ds_version:str=None): if not dataset_version: return None gene = get_gene(dataset, gene_id, ds_version) + if not gene: + return None variants = [variant for variant in db.Variant.select() .join(db.VariantGenes) diff --git a/backend/modules/browser/utils.py b/backend/modules/browser/utils.py index ed013eb19..589e2fe72 100644 --- a/backend/modules/browser/utils.py +++ b/backend/modules/browser/utils.py @@ -217,7 +217,9 @@ def get_coverage_pos(dataset:str, datatype:str, item:str, ds_version:str=None): else: if datatype == 'gene': gene = lookups.get_gene(dataset, item) - transcript = lookups.get_transcript(dataset, gene['canonical_transcript'], ds_version) + if gene: + transcript = lookups.get_transcript(dataset, gene['canonical_transcript'], ds_version) + else: transcript = None elif datatype == 'transcript': transcript = lookups.get_transcript(dataset, item, ds_version) if transcript: @@ -361,33 +363,34 @@ def get_variant_list(dataset:str, datatype:str, item:str, ds_version:str=None): return None refgene = transcript['gene_id'] - for variant in variants: - if datatype in ('gene', 'transcript'): - anno = None - if datatype == 'transcript': - anno = [ann for ann in variant['vep_annotations'] if ann['Feature'] == item] - if not anno: - anno = [ann for ann in variant['vep_annotations'] if ann['Gene'] == refgene] - else: - anno = [ann for ann in variant['vep_annotations'] if ann['Gene'] == item] - if anno: - variant['vep_annotations'] = anno - - add_consequence_to_variants(variants) - - for variant in variants: - remove_extraneous_information(variant) - - # Format output - def format_variant(variant): - variant['major_consequence'] = (variant['major_consequence'].replace('_variant','') - .replace('_prime_', '\'') - .replace('_', ' ')) - - # This is so an array values turns into a comma separated string instead - return {k: ", ".join(v) if isinstance(v,list) else v for k, v in variant.items()} - - variants = list(map(format_variant, variants)) + if variants: + for variant in variants: + if datatype in ('gene', 'transcript'): + anno = None + if datatype == 'transcript': + anno = [ann for ann in variant['vep_annotations'] if ann['Feature'] == item] + if not anno: + anno = [ann for ann in variant['vep_annotations'] if ann['Gene'] == refgene] + else: + anno = [ann for ann in variant['vep_annotations'] if ann['Gene'] == item] + if anno: + variant['vep_annotations'] = anno + + add_consequence_to_variants(variants) + + for variant in variants: + remove_extraneous_information(variant) + + # Format output + def format_variant(variant): + variant['major_consequence'] = (variant['major_consequence'].replace('_variant','') + .replace('_prime_', '\'') + .replace('_', ' ')) + + # This is so an array values turns into a comma separated string instead + return {k: ", ".join(v) if isinstance(v,list) else v for k, v in variant.items()} + + variants = list(map(format_variant, variants)) return {'variants': variants, 'headers': headers}