def new_panel(store, institute_id, panel_name, display_name, csv_lines): """Create a new gene panel.""" institute_obj = store.institute(institute_id) if institute_obj is None: flash("{}: institute not found".format(institute_id)) return None panel_obj = store.gene_panel(panel_name) if panel_obj: flash("panel already exists: {} - {}".format( panel_obj['panel_name'], panel_obj['display_name'])) return None log.debug("parse genes from CSV input") try: new_genes = parse_genes(csv_lines) except SyntaxError as error: flash(error.args[0], 'danger') return None log.debug("build new gene panel") panel_data = build_panel( dict( panel_name=panel_name, institute=institute_obj['_id'], version=1.0, date=dt.datetime.now(), display_name=display_name, genes=new_genes, ), store) panel_obj = store.add_gene_panel(panel_data) return panel_obj
def test_build_panel(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) # panel_id and display_name contain leading and trailing whitespaces to test that the spaces are removed panel_info = { "panel_id": " panel1", "institute": "cust000", "date": datetime.now(), "display_name": "first panel ", "description": "first panel description", "genes": [{ "hgnc_id": 1 }], "version": 1.0, } ## WHEN building a gene panel panel_obj = build_panel(panel_info, adapter) ## THEN assert that the panel was given the right attributes and that the leading and trailing spaces were removed assert panel_obj["institute"] == panel_info["institute"] assert panel_obj["panel_name"] == "panel1" assert panel_obj["display_name"] == "first panel" assert len(panel_info["genes"]) == len(panel_obj["genes"])
def new_panel(store, institute_id, panel_name, display_name, csv_lines, description=None): """Create a new gene panel. Args: store(scout.adapter.MongoAdapter) institute_id(str) panel_name(str) display_name(str) csv_lines(iterable(str)): Stream with genes description(str) Returns: panel_id: the ID of the new panel document created or None """ institute_obj = store.institute(institute_id) if institute_obj is None: flash("{}: institute not found".format(institute_id)) return None panel_obj = store.gene_panel(panel_name) if panel_obj: flash("panel already exists: {} - {}".format(panel_obj['panel_name'], panel_obj['display_name'])) return None log.debug("parse genes from CSV input") try: new_genes = parse_genes(csv_lines) except SyntaxError as error: flash(error.args[0], 'danger') return None log.debug("build new gene panel") panel_id = None try: panel_data = build_panel(dict( panel_name=panel_name, institute=institute_obj['_id'], version=1.0, date=dt.datetime.now(), display_name=display_name, description=description, genes=new_genes, ), store) panel_id= store.add_gene_panel(panel_data) except Exception as err: log.error('An error occurred while adding the gene panel {}'.format(err)) return panel_id
def new_panel(store, institute_id, panel_name, display_name, csv_lines): """Create a new gene panel. Args: store(scout.adapter.MongoAdapter) institute_id(str) panel_name(str) display_name(str) csv_lines(iterable(str)): Stream with genes Returns: panel_id: the ID of the new panel document created or None """ institute_obj = store.institute(institute_id) if institute_obj is None: flash("{}: institute not found".format(institute_id)) return None panel_obj = store.gene_panel(panel_name) if panel_obj: flash("panel already exists: {} - {}".format(panel_obj['panel_name'], panel_obj['display_name'])) return None log.debug("parse genes from CSV input") try: new_genes = parse_genes(csv_lines) except SyntaxError as error: flash(error.args[0], 'danger') return None log.debug("build new gene panel") panel_id = None try: panel_data = build_panel(dict( panel_name=panel_name, institute=institute_obj['_id'], version=1.0, date=dt.datetime.now(), display_name=display_name, genes=new_genes, ), store) panel_id= store.add_gene_panel(panel_data) except Exception as err: log.error('An error occurred while adding the gene panel {}'.format(err)) return panel_id
def test_build_panel_no_date(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) ## WHEN building a gene panel without date panel_info = { 'panel_name': 'panel1', 'institute': 'cust000', 'display_name': 'first panel', 'genes': [{'hgnc_id':1}], 'version': 1.0, } ## THEN assert a KeyError was raised with pytest.raises(KeyError): panel_obj = build_panel(panel_info, adapter)
def test_build_panel_no_date(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) ## WHEN building a gene panel without date panel_info = { "panel_name": "panel1", "institute": "cust000", "display_name": "first panel", "genes": [{"hgnc_id": 1}], "version": 1.0, } ## THEN assert a KeyError was raised with pytest.raises(KeyError): panel_obj = build_panel(panel_info, adapter)
def test_build_panel_non_existing_insitute(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) assert adapter.institute('cust001') is None ## WHEN building a gene panel with wrong institute panel_info = { 'panel_name': 'panel1', 'institute': 'cust0001', 'date': datetime.now(), 'display_name': 'first panel', 'genes': [{'hgnc_id':1}], 'version': 1.0, } ## THEN assert that an IntegrityError is raised with pytest.raises(IntegrityError): panel_obj = build_panel(panel_info, adapter)
def test_build_panel_non_existing_insitute(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) assert adapter.institute("cust001") is None ## WHEN building a gene panel with wrong institute panel_info = { "panel_name": "panel1", "institute": "cust0001", "date": datetime.now(), "display_name": "first panel", "genes": [{"hgnc_id": 1}], "version": 1.0, } ## THEN assert that an IntegrityError is raised with pytest.raises(IntegrityError): panel_obj = build_panel(panel_info, adapter)
def test_build_panel(institute_database, test_gene): ## GIVEN a adapter with a gene and a institute adapter = institute_database adapter.load_hgnc_gene(test_gene) panel_info = { 'panel_id': 'panel1', 'institute': 'cust000', 'date': datetime.now(), 'display_name': 'first panel', 'description' : 'first panel description', 'genes': [{'hgnc_id':1}], 'version': 1.0, } ## WHEN building a gene panel panel_obj = build_panel(panel_info, adapter) ## THEN assert that the panel was given the right attributes assert panel_obj['institute'] == panel_info['institute'] assert len(panel_info['genes']) == len(panel_obj['genes'])
def test_build_panel_non_existing_gene(institute_database, institute_obj): """Test creating a panel by proving one gene that is not in database""" ### GIVEN a adapter with an institute and no genes adapter = institute_database assert adapter.hgnc_collection.find_one() is None ## WHEN building a gene panel with wrong institute panel_info = { "panel_name": "panel1", "institute": institute_obj["_id"], "date": datetime.now(), "display_name": "first panel", "genes": [{ "hgnc_id": 1 }], "version": 1.0, } ## THEN assert that an IntegrityError is raised with pytest.raises(IntegrityError): panel_obj = build_panel(panel_info, adapter)
def new_panel( store, institute_id, panel_name, display_name, csv_lines, maintainer=None, description=None, ): """Create a new gene panel. Args: store(scout.adapter.MongoAdapter) institute_id(str) panel_name(str) display_name(str) csv_lines(iterable(str)): Stream with genes maintainer(list(user._id)) description(str) Returns: panel_id: the ID of the new panel document created or None """ institute_obj = store.institute(institute_id) if institute_obj is None: flash("{}: institute not found".format(institute_id)) return None panel_obj = store.gene_panel(panel_name) if panel_obj: flash( "panel already exists: {} - {}".format( panel_obj["panel_name"], panel_obj["display_name"] ), "danger", ) return None LOG.debug("parse genes from CSV input") try: new_genes = parse_genes(csv_lines) except SyntaxError as error: flash(error.args[0], "danger") LOG.debug("Ooops!") return None LOG.debug("build new gene panel") panel_id = None try: panel_data = build_panel( dict( panel_name=panel_name, institute=institute_obj["_id"], version=1.0, maintainer=maintainer, date=dt.datetime.now(), display_name=display_name, description=description, genes=new_genes, hidden=False, ), store, ) panel_id = store.add_gene_panel(panel_data) except Exception as err: flash(str(err), "danger") return panel_id