def update_panels(context, mongodb, username, password, authdb, host, port, loglevel, config):
    """scout: manage interactions with a scout instance."""
    coloredlogs.install(level=loglevel)

    LOG.info("Running scout version %s", __version__)
    LOG.debug("Debug logging enabled.")

    mongo_config = {}
    cli_config = {}
    if config:
        LOG.debug("Use config file %s", config)
        with open(config, 'r') as in_handle:
            cli_config = yaml.load(in_handle, Loader=yaml.FullLoader)

    mongo_config['mongodb'] = (mongodb or cli_config.get('mongodb') or 'scout')

    mongo_config['host'] = (host or cli_config.get('host') or 'localhost')
    mongo_config['port'] = (port or cli_config.get('port') or 27017)
    mongo_config['username'] = username or cli_config.get('username')
    mongo_config['password'] = password or cli_config.get('password')
    mongo_config['authdb'] = authdb or cli_config.get('authdb') or mongo_config['mongodb']
    mongo_config['omim_api_key'] = cli_config.get('omim_api_key')

    LOG.info("Setting database name to %s", mongo_config['mongodb'])
    LOG.debug("Setting host to %s", mongo_config['host'])
    LOG.debug("Setting port to %s", mongo_config['port'])

    valid_connection = check_connection(
        host=mongo_config['host'],
        port=mongo_config['port'],
        username=mongo_config['username'],
        password=mongo_config['password'],
        authdb=mongo_config['authdb'],
    )

    LOG.info("Test if mongod is running")
    if not valid_connection:
        LOG.warning("Connection could not be established")
        context.abort()

    try:
        client = get_connection(**mongo_config)
    except ConnectionFailure:
        context.abort()

    database = client[mongo_config['mongodb']]

    LOG.info("Setting up a mongo adapter")
    mongo_config['client'] = client
    adapter = MongoAdapter(database)

    requests = []

    for case_obj in adapter.case_collection.find():
        # pp(case_obj)

        gene_to_panels = adapter.gene_to_panels(case_obj)

        variants = adapter.variant_collection.find({
            'case_id': case_obj['_id'],
            'category': 'snv',
            'variant_type': 'clinical',
        })

        for variant_obj in variants:

            panel_names = set()
            for hgnc_id in variant_obj['hgnc_ids']:
                gene_panels = gene_to_panels.get(hgnc_id, set())
                panel_names = panel_names.union(gene_panels)

            if panel_names:
                operation = pymongo.UpdateOne(
                    {'_id': variant_obj['_id']},
                    {
                        '$set': {
                            'panels': list(panel_names)
                        }
                    })
                requests.append(operation)

            if len(requests) > 5000:
                adapter.variant_collection.bulk_write(requests, ordered=False)
                requests = []

        if requests:
            adapter.variant_collection.bulk_write(requests, ordered=False)
            requests = []
예제 #2
0
def update_panels(context, mongodb, username, password, authdb, host, port,
                  loglevel, config):
    """scout: manage interactions with a scout instance."""
    coloredlogs.install(level=loglevel)

    LOG.info("Running scout version %s", __version__)
    LOG.debug("Debug logging enabled.")

    mongo_config = {}
    cli_config = {}
    if config:
        LOG.debug("Use config file %s", config)
        with open(config, "r") as in_handle:
            cli_config = yaml.load(in_handle, Loader=yaml.FullLoader)

    mongo_config["mongodb"] = mongodb or cli_config.get("mongodb") or "scout"

    mongo_config["host"] = host or cli_config.get("host") or "localhost"
    mongo_config["port"] = port or cli_config.get("port") or 27017
    mongo_config["username"] = username or cli_config.get("username")
    mongo_config["password"] = password or cli_config.get("password")
    mongo_config["authdb"] = (authdb or cli_config.get("authdb")
                              or mongo_config["mongodb"])
    mongo_config["omim_api_key"] = cli_config.get("omim_api_key")

    LOG.info("Setting database name to %s", mongo_config["mongodb"])
    LOG.debug("Setting host to %s", mongo_config["host"])
    LOG.debug("Setting port to %s", mongo_config["port"])

    valid_connection = check_connection(
        host=mongo_config["host"],
        port=mongo_config["port"],
        username=mongo_config["username"],
        password=mongo_config["password"],
        authdb=mongo_config["authdb"],
    )

    LOG.info("Test if mongod is running")
    if not valid_connection:
        LOG.warning("Connection could not be established")
        context.abort()

    try:
        client = get_connection(**mongo_config)
    except ConnectionFailure:
        context.abort()

    database = client[mongo_config["mongodb"]]

    LOG.info("Setting up a mongo adapter")
    mongo_config["client"] = client
    adapter = MongoAdapter(database)

    requests = []

    for case_obj in adapter.case_collection.find():
        # pp(case_obj)

        gene_to_panels = adapter.gene_to_panels(case_obj)

        variants = adapter.variant_collection.find({
            "case_id": case_obj["_id"],
            "category": "snv",
            "variant_type": "clinical"
        })

        for variant_obj in variants:

            panel_names = set()
            for hgnc_id in variant_obj["hgnc_ids"]:
                gene_panels = gene_to_panels.get(hgnc_id, set())
                panel_names = panel_names.union(gene_panels)

            if panel_names:
                operation = pymongo.UpdateOne(
                    {"_id": variant_obj["_id"]},
                    {"$set": {
                        "panels": list(panel_names)
                    }})
                requests.append(operation)

            if len(requests) > 5000:
                adapter.variant_collection.bulk_write(requests, ordered=False)
                requests = []

        if requests:
            adapter.variant_collection.bulk_write(requests, ordered=False)
            requests = []
예제 #3
0
def update_panels(context, mongodb, username, password, authdb, host, port,
                  loglevel, config):
    """scout: manage interactions with a scout instance."""
    coloredlogs.install(level=loglevel)

    LOG.info("Running scout version %s", __version__)
    LOG.debug("Debug logging enabled.")

    mongo_config = {}
    cli_config = {}
    if config:
        LOG.debug("Use config file %s", config)
        with open(config, 'r') as in_handle:
            cli_config = yaml.load(in_handle)

    mongo_config['mongodb'] = (mongodb or cli_config.get('mongodb') or 'scout')

    mongo_config['host'] = (host or cli_config.get('host') or 'localhost')
    mongo_config['port'] = (port or cli_config.get('port') or 27017)
    mongo_config['username'] = username or cli_config.get('username')
    mongo_config['password'] = password or cli_config.get('password')
    mongo_config['authdb'] = authdb or cli_config.get(
        'authdb') or mongo_config['mongodb']
    mongo_config['omim_api_key'] = cli_config.get('omim_api_key')

    LOG.info("Setting database name to %s", mongo_config['mongodb'])
    LOG.debug("Setting host to %s", mongo_config['host'])
    LOG.debug("Setting port to %s", mongo_config['port'])

    valid_connection = check_connection(
        host=mongo_config['host'],
        port=mongo_config['port'],
        username=mongo_config['username'],
        password=mongo_config['password'],
        authdb=mongo_config['authdb'],
    )

    LOG.info("Test if mongod is running")
    if not valid_connection:
        LOG.warning("Connection could not be established")
        context.abort()

    try:
        client = get_connection(**mongo_config)
    except ConnectionFailure:
        context.abort()

    database = client[mongo_config['mongodb']]

    LOG.info("Setting up a mongo adapter")
    mongo_config['client'] = client
    adapter = MongoAdapter(database)

    requests = []

    for case_obj in adapter.case_collection.find():
        # pp(case_obj)

        gene_to_panels = adapter.gene_to_panels(case_obj)

        variants = adapter.variant_collection.find({
            'case_id': case_obj['_id'],
            'category': 'snv',
            'variant_type': 'clinical',
        })

        for variant_obj in variants:

            panel_names = set()
            for hgnc_id in variant_obj['hgnc_ids']:
                gene_panels = gene_to_panels.get(hgnc_id, set())
                panel_names = panel_names.union(gene_panels)

            if panel_names:
                operation = pymongo.UpdateOne(
                    {'_id': variant_obj['_id']},
                    {'$set': {
                        'panels': list(panel_names)
                    }})
                requests.append(operation)

            if len(requests) > 5000:
                adapter.variant_collection.bulk_write(requests, ordered=False)
                requests = []

        if requests:
            adapter.variant_collection.bulk_write(requests, ordered=False)
            requests = []