Ejemplo n.º 1
0
def info(sample_set_id):
    sample_type = db.sample_set[request.vars["id"]].sample_type
    
    
    if sample_type == "patient" : 
        patient = db((db.patient.sample_set_id == request.vars["id"])).select()[0]
        name = vidjil_utils.anon_names(patient.id, patient.first_name, patient.last_name)
        return dict(name = name,
                    filename = name,
                    label = patient.id_label + " (" + str(patient.birth) + ")",
                    info = patient.info
                    )
    
    
    if sample_type == "run" : 
        run = db((db.run.sample_set_id == request.vars["id"])).select()[0]
        return dict(name = "run : " + run.name + " (" + str(run.run_date) + ")",
                    filename = "run : " + run.name + "_" + str(run.run_date),
                    label = run.id_label + " (" + str(run.run_date) + ")",
                    info = run.info
                    )
    
    return dict(name = "sample_set : " +db.sample_set[request.vars["id"]].sample_type,
                filename = "sample_set_" + request.vars["id"],
                label = "",
                info = ""
                )
Ejemplo n.º 2
0
Archivo: run.py Proyecto: vidjil/vidjil
def info():

    next_patient()
    patient = db.patient[request.vars["id"]]
    sample_set_id = patient.sample_set_id

    if request.vars["config_id"] and request.vars["config_id"] != "-1" and request.vars["config_id"] != "None":
        config_id = long(request.vars["config_id"])
        patient_name = vidjil_utils.anon_names(patient.id, patient.first_name, patient.last_name)
        config_name = db.config[request.vars["config_id"]].name

        fused = db((db.fused_file.sample_set_id == sample_set_id) & (db.fused_file.config_id == config_id))

        analysis = db(db.analysis_file.sample_set_id == sample_set_id).select(orderby=~db.analysis_file.analyze_date)

        config = True
        fused_count = fused.count()
        fused_file = fused.select()
        fused_filename = patient_name + "_" + config_name + ".data"
        analysis_count = len(analysis)
        analysis_file = analysis
        analysis_filename = patient_name + ".analysis"

    else:
        config_id = -1
        config = False
        fused_count = 0
        fused_file = ""
        fused_filename = ""
        analysis_count = 0
        analysis_file = ""
        analysis_filename = ""

    if config:
        query = []

        query2 = db(
            (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
            & (db.sample_set_membership.sample_set_id == db.patient.sample_set_id)
            & (db.patient.id == request.vars["id"])
        ).select(
            left=db.results_file.on(
                (db.results_file.sequence_file_id == db.sequence_file.id)
                & (db.results_file.config_id == str(config_id))
            ),
            orderby=db.sequence_file.id | ~db.results_file.run_date,
        )
        previous = -1
        for row in query2:
            if row.sequence_file.id != previous:
                query.append(row)
                previous = row.sequence_file.id

    else:

        query = db(
            (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
            & (db.sample_set_membership.sample_set_id == db.patient.sample_set_id)
            & (db.patient.id == request.vars["id"])
        ).select(
            left=db.results_file.on(
                (db.results_file.sequence_file_id == db.sequence_file.id)
                & (db.results_file.config_id == str(config_id))
            )
        )

    log.debug("patient (%s)" % request.vars["id"])
    if auth.can_view_patient(request.vars["id"]):
        return dict(
            query=query,
            patient=patient,
            birth=vidjil_utils.anon_birth(request.vars["id"], auth.user.id),
            config_id=config_id,
            fused_count=fused_count,
            fused_file=fused_file,
            fused_filename=fused_filename,
            analysis_count=analysis_count,
            analysis_file=analysis_file,
            analysis_filename=analysis_filename,
            config=config,
        )

    else:
        res = {"message": ACCESS_DENIED}
        log.error(res)
        return gluon.contrib.simplejson.dumps(res, separators=(",", ":"))
Ejemplo n.º 3
0
 def get_name(self, data, anon=None):
     return vidjil_utils.anon_names(data['sample_set_id'], data['first_name'], data['last_name'], anon)
Ejemplo n.º 4
0
def custom():
    start = time.time()

    if request.vars["config_id"] and request.vars["config_id"] != "-1" :
        config_id = long(request.vars["config_id"])
        config_name = db.config[request.vars["config_id"]].name
        config = True
        
    else:
        request.vars["config_id"] = -1
        config_id = -1
        config_name = None
        config = False
        
    if "custom_list" not in request.vars :
        request.vars["custom_list"] = []
    if type(request.vars["custom_list"]) is str :
        request.vars["custom_list"] = [request.vars["custom_list"]]
        
    myGroupBy = None
    helper = None
    if request.vars["id"] and auth.can_view_sample_set(request.vars["id"]):
        sample_set = db.sample_set[request.vars["id"]]
        factory = ModelFactory()
        helper = factory.get_instance(type=sample_set.sample_type)
        q = ((auth.vidjil_accessible_query(PermissionEnum.read_config.value, db.config))
                & (db.sample_set.id == request.vars["id"])
                & (db.sample_set_membership.sample_set_id == db.sample_set.id)
                & (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
                & (db.results_file.sequence_file_id==db.sequence_file.id)
                & (db.results_file.data_file != '')
                & (db.config.id==db.results_file.config_id)
            )
        
    else:
        q = ((auth.vidjil_accessible_query(PermissionEnum.read.value, db.patient)
                | auth.vidjil_accessible_query(PermissionEnum.read.value, db.run)
                | auth.vidjil_accessible_query(PermissionEnum.read.value, db.generic))
                & (auth.vidjil_accessible_query(PermissionEnum.read_config.value, db.config))
                & (db.sample_set_membership.sample_set_id == db.sample_set.id)
                & (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
                & (db.results_file.sequence_file_id==db.sequence_file.id)
                & (db.results_file.data_file != '')
                & (db.config.id==db.results_file.config_id)
            )
        myGroupBy = db.sequence_file.id|db.patient.id|db.run.id|db.generic.id|db.results_file.config_id

    query = db(q).select(
                db.patient.id, db.patient.info, db.patient.first_name, db.patient.last_name,
                db.run.id, db.run.info, db.run.name,
                db.generic.id, db.generic.info, db.generic.name,
                db.results_file.id, db.results_file.config_id, db.sequence_file.sampling_date,
                db.sequence_file.pcr, db.config.name, db.results_file.run_date, db.results_file.data_file, db.sequence_file.filename,
                db.sequence_file.data_file, db.sequence_file.id, db.sequence_file.info,
                db.sequence_file.size_file,
                left = [
                    db.patient.on(db.patient.sample_set_id == db.sample_set.id),
                    db.run.on(db.run.sample_set_id == db.sample_set.id),
                    db.generic.on(db.generic.sample_set_id == db.sample_set.id)
                    ],
                orderby = db.sequence_file.id|db.results_file.run_date,
                groupby = myGroupBy
            )

    ##filter
    if "filter" not in request.vars :
        request.vars["filter"] = ""
        
    for row in query :
        row.checked = False
        if (str(row.results_file.id) in request.vars["custom_list"]) :
            row.checked = True

        if row.patient.id is not None:
            row.names = vidjil_utils.anon_names(row.patient.id, row.patient.first_name, row.patient.last_name)
            info = row.patient.info
        elif row.run.id is not None:
            row.names = row.run.name
            info = row.run.info
        elif row.generic.id is not None:
            row.names = row.generic.name
            info = row.generic.info
        row.string = [row.names, row.sequence_file.filename, str(row.sequence_file.sampling_date), str(row.sequence_file.pcr), str(row.config.name), str(row.results_file.run_date), info]
    query = query.find(lambda row : ( vidjil_utils.advanced_filter(row.string,request.vars["filter"]) or row.checked) )

    
    if config :
        query = query.find(lambda row : ( row.results_file.config_id==config_id or (str(row.results_file.id) in request.vars["custom_list"])) )
    
    log.debug("sample_set/custom (%.3fs) %s" % (time.time()-start, request.vars["filter"]))

    return dict(query=query,
                config_id=config_id,
                config=config,
                helper=helper)
Ejemplo n.º 5
0
 def get_name(self, data, anon=None):
     return vidjil_utils.anon_names(data.id, data.first_name, data.last_name, anon)
Ejemplo n.º 6
0
Archivo: run.py Proyecto: tazjel/vidjil
def info():

    next_patient()
    patient = db.patient[request.vars["id"]]
    sample_set_id = patient.sample_set_id

    if request.vars["config_id"] and request.vars[
            "config_id"] != "-1" and request.vars["config_id"] != "None":
        config_id = long(request.vars["config_id"])
        patient_name = vidjil_utils.anon_names(patient.id, patient.first_name,
                                               patient.last_name)
        config_name = db.config[request.vars["config_id"]].name

        fused = db((db.fused_file.sample_set_id == sample_set_id)
                   & (db.fused_file.config_id == config_id))

        analysis = db(db.analysis_file.sample_set_id == sample_set_id).select(
            orderby=~db.analysis_file.analyze_date)

        config = True
        fused_count = fused.count()
        fused_file = fused.select()
        fused_filename = patient_name + "_" + config_name + ".data"
        analysis_count = len(analysis)
        analysis_file = analysis
        analysis_filename = patient_name + ".analysis"

    else:
        config_id = -1
        config = False
        fused_count = 0
        fused_file = ""
        fused_filename = ""
        analysis_count = 0
        analysis_file = ""
        analysis_filename = ""

    if config:
        query = []

        query2 = db(
            (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
            & (db.sample_set_membership.sample_set_id ==
               db.patient.sample_set_id)
            & (db.patient.id == request.vars["id"])).select(
                left=db.results_file.on(
                    (db.results_file.sequence_file_id == db.sequence_file.id)
                    & (db.results_file.config_id == str(config_id))),
                orderby=db.sequence_file.id | ~db.results_file.run_date)
        previous = -1
        for row in query2:
            if row.sequence_file.id != previous:
                query.append(row)
                previous = row.sequence_file.id

    else:

        query = db(
            (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
            & (db.sample_set_membership.sample_set_id ==
               db.patient.sample_set_id)
            & (db.patient.id == request.vars["id"])).select(
                left=db.results_file.on(
                    (db.results_file.sequence_file_id == db.sequence_file.id)
                    & (db.results_file.config_id == str(config_id))))

    log.debug('patient (%s)' % request.vars["id"])
    if (auth.can_view('patient', request.vars["id"])):
        return dict(query=query,
                    patient=patient,
                    birth=vidjil_utils.anon_birth(request.vars["id"],
                                                  auth.user.id),
                    config_id=config_id,
                    fused_count=fused_count,
                    fused_file=fused_file,
                    fused_filename=fused_filename,
                    analysis_count=analysis_count,
                    analysis_file=analysis_file,
                    analysis_filename=analysis_filename,
                    config=config)

    else:
        res = {"message": ACCESS_DENIED}
        log.error(res)
        return gluon.contrib.simplejson.dumps(res, separators=(',', ':'))
Ejemplo n.º 7
0
 def get_name(self, data, anon=None):
     return vidjil_utils.anon_names(data['sample_set_id'],
                                    data['first_name'], data['last_name'],
                                    anon)
Ejemplo n.º 8
0
def custom():
    start = time.time()

    if request.vars["config_id"] and request.vars["config_id"] != "-1" :
        config_id = long(request.vars["config_id"])
        config_name = db.config[request.vars["config_id"]].name
        config = True
        
    else:
        request.vars["config_id"] = -1
        config_id = -1
        config_name = None
        config = False
        
    if "custom_list" not in request.vars :
        request.vars["custom_list"] = []
    if type(request.vars["custom_list"]) is str :
        request.vars["custom_list"] = [request.vars["custom_list"]]
        
    myGroupBy = None
    if request.vars["id"] and auth.can_view_sample_set(request.vars["id"]):
        q = ((auth.vidjil_accessible_query(PermissionEnum.read_config.value, db.config))
                & (db.sample_set.id == request.vars["id"])
                & (db.sample_set_membership.sample_set_id == db.sample_set.id)
                & (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
                & (db.results_file.sequence_file_id==db.sequence_file.id)
                & (db.results_file.data_file != '')
                & (db.config.id==db.results_file.config_id)
            )
        
    else:
        q = ((auth.vidjil_accessible_query(PermissionEnum.read.value, db.patient)
                | auth.vidjil_accessible_query(PermissionEnum.read.value, db.run))
                & (auth.vidjil_accessible_query(PermissionEnum.read_config.value, db.config))
                & (db.sample_set_membership.sample_set_id == db.sample_set.id)
                & (db.sequence_file.id == db.sample_set_membership.sequence_file_id)
                & (db.results_file.sequence_file_id==db.sequence_file.id)
                & (db.results_file.data_file != '')
                & (db.config.id==db.results_file.config_id)
            )
        myGroupBy = db.sequence_file.id|db.patient.id|db.run.id|db.results_file.config_id

    query = db(q).select(
                db.patient.id, db.patient.info, db.patient.first_name, db.patient.last_name,
                db.run.id, db.run.info, db.run.name,
                db.results_file.id, db.results_file.config_id, db.sequence_file.sampling_date,
                db.sequence_file.pcr, db.config.name, db.results_file.run_date, db.results_file.data_file, db.sequence_file.filename,
                db.sequence_file.data_file, db.sequence_file.id, db.sequence_file.info,
                db.sequence_file.size_file,
                left = [
                    db.patient.on(db.patient.sample_set_id == db.sample_set.id),
                    db.run.on(db.run.sample_set_id == db.sample_set.id)
                    ],
                orderby = ~db.patient.id|db.sequence_file.id|db.results_file.run_date,
                groupby = myGroupBy
            )

    ##filter
    if "filter" not in request.vars :
        request.vars["filter"] = ""
        
    for row in query :
        row.checked = False
        if (str(row.results_file.id) in request.vars["custom_list"]) :
            row.checked = True

        if row.patient.id is not None:
            row.names = vidjil_utils.anon_names(row.patient.id, row.patient.first_name, row.patient.last_name)
            info = row.patient.info
        else:
            row.names = row.run.name
            info = row.run.info
        row.string = [row.names, row.sequence_file.filename, str(row.sequence_file.sampling_date), str(row.sequence_file.pcr), str(row.config.name), str(row.results_file.run_date), info]
    query = query.find(lambda row : ( vidjil_utils.advanced_filter(row.string,request.vars["filter"]) or row.checked) )

    
    if config :
        query = query.find(lambda row : ( row.results_file.config_id==config_id or (str(row.results_file.id) in request.vars["custom_list"])) )
    
    log.debug("sample_set/custom (%.3fs) %s" % (time.time()-start, request.vars["filter"]))

    return dict(query=query,
                config_id=config_id,
                config=config)