Exemplo n.º 1
0
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
Exemplo n.º 2
0
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"])
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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'])
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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