예제 #1
0
파일: panel.py 프로젝트: AspirinCode/scout
def panel(panel, version, update_date, update_version):
    """
    Update a panel in the database
    """
    adapter = store

    # Check that the panel exists
    panel_obj = adapter.gene_panel(panel, version=version)

    if not panel_obj:
        LOG.warning("Panel %s (version %s) could not be found" % (panel, version))
        click.Abort()

    date_obj = None
    if update_date:
        try:
            date_obj = get_date(update_date)
        except Exception as err:
            LOG.warning(err)
            click.Abort()

    update_panel(
        adapter,
        panel,
        panel_version=panel_obj["version"],
        new_version=update_version,
        new_date=date_obj,
    )
예제 #2
0
def panel(context, panel, version, update_date, update_version):
    """
    Update a panel in the database
    """
    adapter = context.obj['adapter']
    
    #Check that the panel exists
    panel_obj = adapter.gene_panel(panel, version=version)
    # for panel_obj in adapter.panel_collection.find({'panel_name': 'CAN'}):
    #     print(panel_obj['panel_name'], panel_obj['version'])
    #
    # print(panel_obj)
    if not panel_obj:
        LOG.warning("Panel %s (version %s) could not be found" % (panel, version))
        context.abort()
    
    date_obj = None
    if update_date:
        try:
            date_obj = get_date(update_date)
        except Exception as err:
            LOG.warning(err)
            context.abort()

    updated_panel = update_panel(
        adapter, 
        panel, 
        panel_version=panel_obj['version'], 
        new_version=update_version, 
        new_date=date_obj
    )
예제 #3
0
def test_update_panel_version(panel_database, case_obj):
    adapter = panel_database
    adapter._add_case(case_obj)

    ## GIVEN an adapter with a case with gene panels
    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()

    case_id = case_obj['_id']

    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    panel = case_obj['panels'][0]

    panel_version = panel['version']
    panel_name = panel['panel_name']
    panel_id = panel['panel_id']

    new_panel_version = panel_version + 1

    ## WHEN updating the panel version

    updated_panel = update_panel(adapter, panel_name, panel_version,
                                 new_panel_version)

    ## THEN assert that the panel version was updated both in panel and case

    panel_obj = adapter.panel_collection.find_one({'_id': panel_id})

    assert panel_obj['version'] == new_panel_version

    case_obj = adapter.case_collection.find_one({'_id': case_id})

    for panel in case_obj['panels']:
        assert panel['version'] == new_panel_version
예제 #4
0
def test_update_panel_date(adapter, case_obj, testpanel_obj):
    adapter.case_collection.insert_one(case_obj)
    adapter.panel_collection.insert_one(testpanel_obj)

    ## GIVEN an adapter with a case with gene panels
    new_date_obj = get_date("2015-03-12")

    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()

    case_id = case_obj["_id"]

    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    case_panel = case_obj["panels"][0]

    panel_version = case_panel["version"]
    panel_name = case_panel["panel_name"]
    panel_id = case_panel["panel_id"]

    ## WHEN updating the panel version

    update_panel(adapter,
                 panel_name,
                 panel_version=None,
                 new_date=new_date_obj)

    ## THEN assert that the panel version was updated both in panel and case

    updated_panel_obj = adapter.panel_collection.find_one({
        "panel_name":
        panel_name,
        "version":
        panel_version
    })

    assert updated_panel_obj["date"] == new_date_obj

    case_obj = adapter.case_collection.find_one({"_id": case_id})

    for panel in case_obj["panels"]:
        assert panel["updated_at"] == new_date_obj
예제 #5
0
def test_update_panel_date(adapter, case_obj, dummypanel_obj):
    adapter.case_collection.insert_one(case_obj)
    adapter.panel_collection.insert_one(dummypanel_obj)

    ## GIVEN an adapter with a case with gene panels
    new_date_obj = get_date('2015-03-12')

    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()

    case_id = case_obj['_id']

    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    case_panel = case_obj['panels'][0]

    panel_version = case_panel['version']
    panel_name = case_panel['panel_name']
    panel_id = case_panel['panel_id']

    ## WHEN updating the panel version

    update_panel(adapter,
                 panel_name,
                 panel_version=None,
                 new_date=new_date_obj)

    ## THEN assert that the panel version was updated both in panel and case

    updated_panel_obj = adapter.panel_collection.find_one({
        'panel_name':
        panel_name,
        'version':
        panel_version
    })

    assert updated_panel_obj['date'] == new_date_obj

    case_obj = adapter.case_collection.find_one({'_id': case_id})

    for panel in case_obj['panels']:
        assert panel['updated_at'] == new_date_obj
예제 #6
0
def test_update_panel_version_multiple(adapter, case_obj, testpanel_obj):
    adapter.case_collection.insert_one(case_obj)
    adapter.panel_collection.insert_one(testpanel_obj)

    case_obj["_id"] = "test_2"
    # Add another case with same panels
    adapter.case_collection.insert_one(case_obj)

    ## GIVEN an adapter with a case with gene panels
    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()

    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    panel = case_obj["panels"][0]

    panel_version = panel["version"]
    panel_name = panel["panel_name"]
    panel_id = panel["panel_id"]

    new_panel_version = panel_version + 1

    ## WHEN updating the panel version

    update_panel(adapter, panel_name, panel_version, new_panel_version)

    ## THEN assert that the panel version was updated both in panel and case

    updated_panel_obj = adapter.panel_collection.find_one({
        "panel_name":
        panel_name,
        "version":
        new_panel_version
    })

    assert updated_panel_obj["version"] == new_panel_version

    for case_obj in adapter.case_collection.find():

        for panel in case_obj["panels"]:
            assert panel["version"] == new_panel_version
예제 #7
0
def test_update_panel_version(panel_database, case_obj):
    adapter = panel_database
    adapter._add_case(case_obj)
    
    ## GIVEN an adapter with a case with gene panels
    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()
    
    case_id = case_obj['_id']
    
    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    panel = case_obj['panels'][0]
    
    panel_version = panel['version']
    panel_name = panel['panel_name']
    panel_id = panel['panel_id']

    new_panel_version = panel_version + 1
    
    ## WHEN updating the panel version
    
    update_panel(adapter, panel_name, panel_version, new_panel_version)

    
    ## THEN assert that the panel version was updated for the panel object
    
    updated_panel_obj = adapter.panel_collection.find_one(
        {
            'panel_name': panel_name,
            'version': new_panel_version
        })
    
    
    assert updated_panel_obj['version'] == new_panel_version
    

    case_obj = adapter.case_collection.find_one({'_id': case_id})

    for panel in case_obj['panels']:
        assert panel['version'] == new_panel_version
예제 #8
0
def test_update_panel_version(adapter, case_obj, testpanel_obj):
    adapter.case_collection.insert_one(case_obj)
    adapter.panel_collection.insert_one(testpanel_obj)

    ## GIVEN an adapter with a case with gene panels
    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()
    assert case_obj
    assert panel_obj

    case_id = case_obj["_id"]

    # There is information about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    panel = case_obj["panels"][0]

    panel_version = panel["version"]
    panel_name = panel["panel_name"]
    panel_id = panel["panel_id"]

    new_panel_version = panel_version + 1

    ## WHEN updating the panel version
    update_panel(adapter, panel_name, panel_version, new_panel_version)

    ## THEN assert that the panel version was updated for the panel object
    updated_panel_obj = adapter.panel_collection.find_one({
        "panel_name":
        panel_name,
        "version":
        new_panel_version
    })

    assert updated_panel_obj["version"] == new_panel_version

    case_obj = adapter.case_collection.find_one({"_id": case_id})

    for panel in case_obj["panels"]:
        assert panel["version"] == new_panel_version
예제 #9
0
def test_update_panel_date(panel_database, case_obj):
    adapter = panel_database
    adapter._add_case(case_obj)
    
    ## GIVEN an adapter with a case with gene panels
    new_date_obj = get_date('2015-03-12')
    
    case_obj = adapter.case_collection.find_one()
    panel_obj = adapter.panel_collection.find_one()
    
    case_id = case_obj['_id']
    
    # There is infirmation about a panel both in the panel collection
    # and on the case object. This is fine until one starts to manipulate the objects
    case_panel = case_obj['panels'][0]
    
    panel_version = case_panel['version']
    panel_name = case_panel['panel_name']
    panel_id = case_panel['panel_id']

    ## WHEN updating the panel version
    
    update_panel(adapter, panel_name, panel_version=None, new_date=new_date_obj)
    
    ## THEN assert that the panel version was updated both in panel and case
    
    updated_panel_obj = adapter.panel_collection.find_one(
        {
            'panel_name': panel_name,
            'version': panel_version
        })
    
    assert updated_panel_obj['date'] == new_date_obj
    
    case_obj = adapter.case_collection.find_one({'_id': case_id})
    
    for panel in case_obj['panels']:
        assert panel['updated_at'] == new_date_obj
예제 #10
0
파일: panel.py 프로젝트: gmc-norr/scout
def panel(
    panel, version, update_date, update_version, add_maintainer, revoke_maintainer
):
    """
    Update a panel in the database
    """
    adapter = store

    # Check that the panel exists
    panel_obj = adapter.gene_panel(panel, version=version)

    if not panel_obj:
        LOG.warning("Panel %s (version %s) could not be found", panel, version)
        raise click.Abort()

    date_obj = None
    if update_date:
        try:
            date_obj = get_date(update_date)
        except Exception as err:
            LOG.warning(err)
            raise click.Abort()

    # Any mintainer updates?

    new_maintainer = None
    if add_maintainer:
        user_obj = adapter.user(user_id=add_maintainer)
        if not user_obj:
            # Check if maintainers exist in the user database
            LOG.warning(
                "Maintainer user id %s does not exist in user database", add_maintainer
            )

            raise click.Abort()

        new_maintainer = panel_obj.get("maintainer", [])
        if add_maintainer in new_maintainer:
            LOG.warning("User %s already in maintainer list.", add_maintainer)
            raise click.Abort()

        new_maintainer.append(add_maintainer)

    if revoke_maintainer:
        current_maintainers = panel_obj.get("maintainer", [])
        try:
            current_maintainers.remove(revoke_maintainer)
            new_maintainer = current_maintainers
        except ValueError:
            LOG.warning(
                "Maintainer user id %s is not a maintainer for panel %s. Current maintainers: %s",
                revoke_maintainer,
                panel,
                current_maintainers,
            )

    update_panel(
        adapter,
        panel,
        panel_version=panel_obj["version"],
        new_version=update_version,
        new_maintainer=new_maintainer,
        new_date=date_obj,
    )