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, )
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 )
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
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
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
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
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
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
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
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, )