Пример #1
0
def gemini_case_obj(gemini_db_path):
    """Return a case object extracted from gemini database"""
    _case = get_cases(gemini_db_path, variant_mode='gemini')[0]
    yield _case
Пример #2
0
def gemini_sv_case_obj(gemini_sv_db_path):
    """Return a case object extracted from gemini database"""
    _case = get_cases(gemini_sv_db_path, variant_mode='gemini')[0]
    _case['variant_type'] = 'sv'
    yield _case
Пример #3
0
def view(ctx, host, port, debug, pattern, family_file, family_type,
         variant_source, root, no_browser, phenomizer):
    """Visualize DNA variant resources.

    1. Look for variant source(s) to visualize and inst. the right plugin
    """
    root = root or ctx.obj.get('root') or os.path.expanduser("~/.puzzle")
    phenomizer_auth = phenomizer or ctx.obj.get('phenomizer_auth')
    BaseConfig.PHENOMIZER_AUTH = True if ctx.obj.get('phenomizer_auth') else False
    BaseConfig.STORE_ENABLED = True

    if variant_source is None:
        logger.info("Root directory is: {}".format(root))

        db_path = os.path.join(root, 'puzzle_db.sqlite3')
        logger.info("db path is: {}".format(db_path))
        if not os.path.exists(db_path):
            logger.warn("database not initialized, run 'puzzle init'")
            ctx.abort()

        if os.path.isfile(root):
            logger.error("'root' can't be a file")
            ctx.abort()

        store = SqlStore(db_path, phenomizer_auth=phenomizer_auth)
        for case_obj in store.cases():
            if case_obj.variant_mode == 'gemini':
                if not GEMINI:
                    logger.error("Need to have gemini instaled to view gemini database")
                    ctx.abort()
                    
    
    else:
        logger.info("Using in memory database")
        store = SqlStore('sqlite:///:memory:', phenomizer_auth=phenomizer_auth)
        store.set_up()
        cases = []
        if os.path.isfile(variant_source):        
            file_type = get_file_type(variant_source)
            #Test if gemini is installed
            if file_type == 'unknown':
                logger.error("File has to be vcf or gemini db")
                ctx.abort()
            elif file_type == 'gemini':
                #Check if gemini is installed
                if not GEMINI:
                    logger.error("Need to have gemini installed to use gemini plugin")
                    ctx.abort()
            variant_type = get_variant_type(variant_source)
            cases = get_cases(
                variant_source=variant_source,
                case_lines=family_file, 
                case_type=family_type, 
                variant_type=variant_type, 
                variant_mode=file_type
            )
        else: 
            for file in path(variant_source).walkfiles(pattern):
                file_type = get_file_type(file)
                if file_type != 'unknown':
                    variant_type = get_variant_type(file)
                    #Test if gemini is installed
                    if file_type == 'gemini':
                        if not GEMINI:
                            logger.error("Need to have gemini installed to use gemini plugin")
                            ctx.abort()
                    
                    for case in get_cases(
                        variant_source=file,
                        case_type=family_type, 
                        variant_type=variant_type, 
                        variant_mode=file_type):
                        
                        cases.append(case)
                
        
        for case_obj in cases:
            if store.case(case_obj.case_id) is not None:
                logger.warn("{} already exists in the database"
                            .format(case_obj.case_id))
                continue

            # extract case information
            logger.debug("adding case: {}".format(case_obj.case_id))
            store.add_case(case_obj, vtype=case_obj.variant_type, mode=case_obj.variant_mode)

    logger.debug("Plugin setup was succesfull")

    BaseConfig.PUZZLE_BACKEND = store
    BaseConfig.UPLOAD_DIR = os.path.join(root, 'resources')

    app = create_app(config_obj=BaseConfig)
    
    if not (no_browser or debug):
        webbrowser.open_new_tab("http://{}:{}".format(host, port))
    
    app.run(host=host, port=port, debug=debug)
Пример #4
0
def case_obj(ped_lines):
    """Return a test case object with individuals."""
    _case = get_cases('tests/fixtures/hapmap.vcf', case_lines=ped_lines)[0]
    yield _case
Пример #5
0
def load(ctx, variant_source, family_file, family_type, root):
    """
    Load a variant source into the database.

    If no database was found run puzzle init first.

    1. VCF: If a vcf file is used it can be loaded with a ped file
    2. GEMINI: Ped information will be retreived from the gemini db
    """
    root = root or ctx.obj.get('root') or os.path.expanduser("~/.puzzle")

    if os.path.isfile(root):
        logger.error("'root' can't be a file")
        ctx.abort()

    logger.info("Root directory is: {}".format(root))

    db_path = os.path.join(root, 'puzzle_db.sqlite3')
    logger.info("db path is: {}".format(db_path))
    
    if not os.path.exists(db_path):
        logger.warn("database not initialized, run 'puzzle init'")
        ctx.abort()


    if not os.path.isfile(variant_source):
        logger.error("Variant source has to be a file")
        ctx.abort()
    
    mode = get_file_type(variant_source)
    if mode == 'unknown':
        logger.error("Unknown file type")
        ctx.abort()
    #Test if gemini is installed
    elif mode == 'gemini':
        logger.debug("Initialzing GEMINI plugin")
        if not GEMINI:
            logger.error("Need to have gemini installed to use gemini plugin")
            ctx.abort()

    logger.debug('Set puzzle backend to {0}'.format(mode))
    
    variant_type = get_variant_type(variant_source)
    logger.debug('Set variant type to {0}'.format(variant_type))
    
    cases = get_cases(
        variant_source=variant_source,
        case_lines=family_file, 
        case_type=family_type, 
        variant_type=variant_type, 
        variant_mode=mode
    )
    
    if len(cases) == 0:
        logger.warning("No cases found")
        ctx.abort()

    logger.info("Initializing sqlite plugin")
    store = SqlStore(db_path)

    for case_obj in cases:
        if store.case(case_obj.case_id) is not None:
            logger.warn("{} already exists in the database"
                        .format(case_obj.case_id))
            continue
        # extract case information
        logger.debug("adding case: {} to puzzle db".format(case_obj.case_id))
        store.add_case(case_obj, vtype=variant_type, mode=mode)
Пример #6
0
def gemini_sv_case_obj(gemini_sv_db_path):
    """Return a case object extracted from gemini database"""
    _case = get_cases(gemini_sv_db_path, variant_mode='gemini')[0]
    _case['variant_type'] = 'sv'
    yield _case
Пример #7
0
def gemini_case_obj(gemini_db_path):
    """Return a case object extracted from gemini database"""
    _case = get_cases(gemini_db_path, variant_mode='gemini')[0]
    yield _case
Пример #8
0
def case_obj(ped_lines):
    """Return a test case object with individuals."""
    _case = get_cases('tests/fixtures/hapmap.vcf', case_lines=ped_lines)[0]
    yield _case
Пример #9
0
def view(ctx, host, port, debug, pattern, family_file, family_type,
         variant_source, root, no_browser, phenomizer):
    """Visualize DNA variant resources.

    1. Look for variant source(s) to visualize and inst. the right plugin
    """
    main_loop = (not debug) or (os.environ.get('WERKZEUG_RUN_MAIN') == 'true')
    root = root or ctx.obj.get('root') or os.path.expanduser("~/.puzzle")
    phenomizer_auth = phenomizer or ctx.obj.get('phenomizer_auth')
    BaseConfig.PHENOMIZER_AUTH = True if ctx.obj.get(
        'phenomizer_auth') else False
    BaseConfig.STORE_ENABLED = True

    if variant_source is None:
        logger.info("Root directory is: {}".format(root))

        db_path = os.path.join(root, 'puzzle_db.sqlite3')
        logger.info("db path is: {}".format(db_path))
        if not os.path.exists(db_path):
            logger.warn("database not initialized, run 'puzzle init'")
            ctx.abort()

        if os.path.isfile(root):
            logger.error("'root' can't be a file")
            ctx.abort()

        store = SqlStore(db_path, phenomizer_auth=phenomizer_auth)
        for case_obj in store.cases():
            if case_obj.variant_mode == 'gemini':
                if not GEMINI:
                    logger.error(
                        "Need to have gemini instaled to view gemini database")
                    ctx.abort()

    else:
        logger.info("Using in memory database")
        tmpdir = tempfile.mkdtemp()
        tmpdb = os.path.join(tmpdir, 'puzzle.sqlite3')
        logger.info("building database: {}".format(tmpdb))
        store = SqlStore("sqlite:///{}".format(tmpdb),
                         phenomizer_auth=phenomizer_auth)
        if main_loop:
            store.set_up()
            cases = []
            if os.path.isfile(variant_source):
                file_type = get_file_type(variant_source)
                #Test if gemini is installed
                if file_type == 'unknown':
                    logger.error("File has to be vcf or gemini db")
                    ctx.abort()
                elif file_type == 'gemini':
                    #Check if gemini is installed
                    if not GEMINI:
                        logger.error(
                            "Need to have gemini installed to use gemini plugin"
                        )
                        ctx.abort()
                variant_type = get_variant_type(variant_source)
                cases = get_cases(variant_source=variant_source,
                                  case_lines=family_file,
                                  case_type=family_type,
                                  variant_type=variant_type,
                                  variant_mode=file_type)
            else:
                for file in path(variant_source).walkfiles(pattern):
                    file_type = get_file_type(file)
                    if file_type != 'unknown':
                        variant_type = get_variant_type(file)
                        #Test if gemini is installed
                        if file_type == 'gemini':
                            if not GEMINI:
                                logger.error(
                                    "Need to have gemini installed to use gemini plugin"
                                )
                                ctx.abort()

                        for case in get_cases(variant_source=file,
                                              case_type=family_type,
                                              variant_type=variant_type,
                                              variant_mode=file_type):

                            cases.append(case)

            for case_obj in cases:
                if store.case(case_obj.case_id) is not None:
                    logger.warn("{} already exists in the database".format(
                        case_obj.case_id))
                    continue

                # extract case information
                logger.debug("adding case: {}".format(case_obj.case_id))
                store.add_case(case_obj,
                               vtype=case_obj.variant_type,
                               mode=case_obj.variant_mode)

    logger.debug("Plugin setup was succesfull")
    BaseConfig.PUZZLE_BACKEND = store
    BaseConfig.UPLOAD_DIR = os.path.join(root, 'resources')

    app = create_app(config_obj=BaseConfig)

    if no_browser is False:
        webbrowser.open_new_tab("http://{}:{}".format(host, port))

    app.run(host=host, port=port, debug=debug)