diff --git a/backend/modules/browser/browser_handlers.py b/backend/modules/browser/browser_handlers.py index d17c87377..4c6b6c4e0 100644 --- a/backend/modules/browser/browser_handlers.py +++ b/backend/modules/browser/browser_handlers.py @@ -126,28 +126,15 @@ def get(self, dataset:str, region:str, ds_version:str=None): Returns: dict: information about the region and the genes found there """ - region = region.split('-') - - chrom = region[0] - start = None - stop = None - try: - if len(region) > 1: - start = int(region[1]) - if len(region) > 2: - stop = int(region[2]) - + chrom, start, stop = region.split('-') + start = int(start) + stop = int(stop) except ValueError: logging.error('GetRegion: unable to parse region ({})'.format(region)) - self.send_error(status_code=400) - self.set_user_msg('Unable to parse region', 'error') + self.send_error(status_code=400, reason='Unable to parse region') return - if not start: - start = 0 - if not stop: - stop = start ret = {'region':{'chrom': chrom, 'start': start, 'stop': stop, @@ -245,8 +232,7 @@ def get(self, dataset:str, variant:str, ds_version:str=None): if not variant: logging.error('Variant not found ({})'.format(orig_variant)) - self.send_error(status_code=404) - self.set_user_msg('Variant not found', 'error') + self.send_error(status_code=404, reason='Variant not found') return # Just get the information we need diff --git a/backend/modules/browser/tests/test_browser_handlers.py b/backend/modules/browser/tests/test_browser_handlers.py index f9e88f133..184d51bb5 100644 --- a/backend/modules/browser/tests/test_browser_handlers.py +++ b/backend/modules/browser/tests/test_browser_handlers.py @@ -109,16 +109,6 @@ def test_get_region(): 'geneName': 'PPARA'}]}} assert region == expected - region_def = '22' - response = requests.get('{}/api/datasets/{}/browser/region/{}'.format(BASE_URL, dataset, region_def)) - region = json.loads(response.text) - assert region == {'region': {'chrom': '22', 'start': 0, 'stop': 20}} - - region_def = '22-1000' - response = requests.get('{}/api/datasets/{}/browser/region/{}'.format(BASE_URL, dataset, region_def)) - region = json.loads(response.text) - assert region == {'region': {'chrom': '22', 'start': 980, 'stop': 1020}} - region_def = '22-16364870-16366200' response = requests.get('{}/api/datasets/{}/browser/region/{}'.format(BASE_URL, dataset, region_def)) region = json.loads(response.text) diff --git a/backend/modules/browser/utils.py b/backend/modules/browser/utils.py index fae3a6ceb..2418dd802 100644 --- a/backend/modules/browser/utils.py +++ b/backend/modules/browser/utils.py @@ -324,7 +324,14 @@ def get_variant_list(dataset:str, datatype:str, item:str, ds_version:str=None): if datatype == 'gene': variants = lookups.get_variants_in_gene(dataset, item, ds_version) elif datatype == 'region': - chrom, start, stop = item.split('-') + try: + chrom, start, stop = item.split('-') + start = int(start) + stop = int(stop) + except ValueError: + self.send_error(status_code=400, reason='Unable to parse region') + return + if is_region_too_large(start, stop): return {'variants': [], 'headers': [], 'region_too_large': True} variants = lookups.get_variants_in_region(dataset, chrom, start, stop, ds_version)