diff --git a/backend/modules/browser/browser_handlers.py b/backend/modules/browser/browser_handlers.py index dcbf8b078..96c99e682 100644 --- a/backend/modules/browser/browser_handlers.py +++ b/backend/modules/browser/browser_handlers.py @@ -35,21 +35,23 @@ def get(self, dataset:str, datatype:str, item:str, ds_version:str=None, filter_t filter_type (str): type of filter to apply """ # ctrl.filterVariantsBy~ctrl.filterIncludeNonPass - filters = filter_type.split('~') dataset, ds_version = utils.parse_dataset(dataset, ds_version) filename = "{}_{}_{}.csv".format(dataset, datatype, item) self.set_header('Content-Type','text/csv') self.set_header('content-Disposition','attachement; filename={}'.format(filename)) data = utils.get_variant_list(dataset, datatype, item, ds_version) - logging.error(data) # filter variants based on what is shown - if filters[1] == 'false': - data = [variant for variant in data if variant['filter_string'] == 'PASS'] - if filters[0] == 'mislof': - data = [variant for variant in data if variant['major_consequence'] == 'missense'] - if 'lof' in filters[0]: - data = [variant for variant in data if 'LoF' in variant['filter']] + if filter_type: + filters = filter_type.split('~') + if filters[1] == 'false': + data['variants'] = [variant for variant in data['variants'] if variant['filter_string'] == 'PASS'] + if filters[0] == 'mislof': + data['variants'] = [variant for variant in data['variants'] + if variant['major_consequence'] == 'missense' + or 'LoF' in variant['flags']] + elif 'lof' in filters[0]: + data['variants'] = [variant for variant in data['variants'] if 'LoF' in variant['flags']] # Write header self.write(','.join([h[1] for h in data['headers']]) + '\n') diff --git a/backend/modules/browser/tests/test_browser_handlers.py b/backend/modules/browser/tests/test_browser_handlers.py index 1bbeef398..b26d0e123 100644 --- a/backend/modules/browser/tests/test_browser_handlers.py +++ b/backend/modules/browser/tests/test_browser_handlers.py @@ -29,7 +29,21 @@ def test_download(): data_type = 'transcript' data_item = 'ENST00000438441' response = requests.get('{}/api/dataset/{}/browser/download/{}/{}'.format(BASE_URL, dataset, data_type, data_item)) + assert len(response.text.split('\n')) == 180 # header + 178 + \n + response = requests.get('{}/api/dataset/{}/browser/download/{}/{}/filter/all~false'.format(BASE_URL, dataset, data_type, data_item)) + import logging + logging.error(response.text.split('\n')) + assert len(response.text.split('\n')) == 8 + response = requests.get('{}/api/dataset/{}/browser/download/{}/{}/filter/all~true'.format(BASE_URL, dataset, data_type, data_item)) assert len(response.text.split('\n')) == 180 + response = requests.get('{}/api/dataset/{}/browser/download/{}/{}/filter/mislof~true'.format(BASE_URL, dataset, data_type, data_item)) + assert len(response.text.split('\n')) == 2 + data_type = 'region' + data_item = '22-29450622-29465622' + response = requests.get('{}/api/dataset/{}/browser/download/{}/{}/filter/mislof~false'.format(BASE_URL, dataset, data_type, data_item)) + assert len(response.text.split('\n')) == 3 + response = requests.get('{}/api/dataset/{}/browser/download/{}/{}/filter/lof~false'.format(BASE_URL, dataset, data_type, data_item)) + assert len(response.text.split('\n')) == 3 def test_get_coverage():