예제 #1
0
def commence_file_io(job_id):

    print "DEBUG?? ", "{0}".format(cfront_settings.get("debug_mode", False))

    if v: print "commencing file io"

    job = Session.query(Job).get(job_id)
    Session.add(job)

    if len(job.good_spacers) == 0 or job.genome_name != 'hg19':
        job.files_failed = True
        job.date_failed = datetime.datetime.utcnow()
        return

    write_f4(job_id)
    write_f5_f6(job_id)

    if len([f for f in job.files if f["ready"] == False]) == 0:
        job.files_ready = True
        job.date_completed = datetime.datetime.utcnow()
    else:
        job.files_failed = True

    try:
        if job.email_complete:
            if (not cfront_settings.get("debug_mode",
                                        False)) and cfront_settings.get(
                                            "mails_on_completion", False):
                mail.mail_completed_job(None, job)
    except mail.MailError as m:
        print "writing mail on complete failed for job {0}".format(job.id)
예제 #2
0
def commence_file_io(job_id):

    print "DEBUG?? ", "{0}".format( cfront_settings.get("debug_mode",False))

    if v: print "commencing file io"

    job = Session.query(Job).get(job_id)    
    Session.add(job)
    
    if  len(job.good_spacers) == 0 or job.genome_name != 'hg19':
        job.files_failed = True
        job.date_failed = datetime.datetime.utcnow()
        return 

    write_f4(job_id)
    write_f5_f6(job_id)
    
    if len([f for f in job.files if f["ready"] == False]) == 0:
        job.files_ready = True
        job.date_completed = datetime.datetime.utcnow()
    else:
        job.files_failed = True

    
    try:
        if job.email_complete:
            if (not cfront_settings.get("debug_mode",False)) and cfront_settings.get("mails_on_completion",False):
                mail.mail_completed_job(None, job)
    except mail.MailError as m:
        print "writing mail on complete failed for job {0}".format(job.id)
예제 #3
0
def init_env(p):
    global redis_key
    env = bootstrap(p)
    redis_key = "cfront-{0}:job:hits".format("dev" if cfront_settings.get("debug_mode",False) else "prod")


    redis_key = "cfront-{0}:job:hits".format("dev" if cfront_settings.get("debug_mode",False) else "prod")
예제 #4
0
    def __init__(self, request):
        print cfront_settings.get("maintenance_mode", False)
        if "job_key" in request.matchdict:
            set_request_job(request)

        if cfront_settings.get("maintenance_mode", False):
            if not "sorry" in request.url:
                raise exc.HTTPFound(request.route_url("maintainance"))
예제 #5
0
 def __init__(self,request):
     print  cfront_settings.get("maintenance_mode", False)
     if "job_key" in request.matchdict:
         set_request_job(request)
         
     
     if cfront_settings.get("maintenance_mode", False):
         if not "sorry" in request.url:
             raise exc.HTTPFound(request.route_url("maintainance")) 
예제 #6
0
def spacer_retrieve_regions(request):
    import twobitreader
    spacer_id = request.matchdict['spacer_id']
    spacer= Session.query(Spacer).get(spacer_id)
    genome = spacer.job.genome_name
    genome_root = cfront_settings.get("gfport_root")
    genome_path = os.path.join(genome_root,"{0}.2bit".format(spacer.job.genome_name))
    print genome_path
    print "CHECK THIS CODE!!"
    tbf = twobitreader.TwoBitFile(genome_path)
    hits = spacer.hits
    return [{"sequence":tbf.get(h.chr)[h.start:h.start+100]} for h in hits[:100]]
예제 #7
0
def spacer_retrieve_regions(request):
    import twobitreader
    spacer_id = request.matchdict['spacer_id']
    spacer = Session.query(Spacer).get(spacer_id)
    genome = spacer.job.genome_name
    genome_root = cfront_settings.get("gfport_root")
    genome_path = os.path.join(genome_root,
                               "{0}.2bit".format(spacer.job.genome_name))
    print genome_path
    print "CHECK THIS CODE!!"
    tbf = twobitreader.TwoBitFile(genome_path)
    hits = spacer.hits
    return [{
        "sequence": tbf.get(h.chr)[h.start:h.start + 100]
    } for h in hits[:100]]
예제 #8
0
def job_post_new(request):
    sequence = request.params["query"].upper()
    sequence = re.sub("\s","",sequence)

    if cfront_settings.get("debug_mode",False): print sequence
    
    if re.compile("[^AGTCN]").search(sequence) is not None:
            return {"status":"error",
                    "message":"Ambiguous or invalid characters found in input sequene.",
                    "matches":None,
                    "job_key":None}
    if len(sequence)<23 or len(sequence) > 250 :
        return {"status":"error",
                "message":"Sequence length not within allowed range (23 - 250bp)",
                "matches":None,
                "job_key":None}

    genome = request.params.get("genome","hg19")
    matches = webserver_db.check_genome(sequence,genome)
    infos = webserver_db.compute_spacers(sequence)

    if cfront_settings.get("debug_mode",False): print "lmatches: {0}".format(len(matches))
    if cfront_settings.get("debug_mode",False): print "linfos: {0}".format(len(infos))

    print request.params.get("inputRadios")
    if ( request.params.get("inputRadios",None) == "unique_genomic" ) and len(matches) == 0:
        raise JobERR(Job.ERR_NOGENOME,None)
    if request.params.get("inputRadios",None) == "unique_genomic" and len(matches) > 1:
        raise JobERR(Job.ERR_MULTIPLE_GENOME,None)
    elif len(infos) == 0:
        raise JobERR(Job.NOSPACERS,None)
    else:
        
    
        params = dict(date_submitted = datetime.datetime.utcnow(),
                      sequence = sequence,
                      name = request.params["name"],
                      email = request.params["email"],
                      genome = Job.GENOMES[genome],
                      query_type = request.params.get("inputRadios"))

        if len(matches) > 0:
            params.update(dict(chr=matches[0]["tName"],
                               start=matches[0]["tStart"],
                               strand=1 if matches[0]["strand"] == "+" else -1))
        if "key" in request.params:
            params["key"] = request.params.get("key")

        job = Job(**params)

        Session.add(job)

    for spacer_info in infos:
        Session.add(Spacer(job = job,**spacer_info))
            
    job.computed_spacers = True
    Session.flush()
    mail.mail_new_job(request,job)
        
    return {"status":"success",
                "message":None,
                "job_key":job.key}
예제 #9
0
def job_from_spacers(request):
    spacer_lines = request.params["query"].strip().splitlines()
    spacer_row_lists = [re.compile("\s+").split(l.strip()) for l in spacer_lines]
    spacers = [dict(sequence = rl[0].upper(),
                    strand_input = rl[2] if len(rl) > 2 else "+",
                    name = rl[1] if len(rl) > 1 else None) for rl in spacer_row_lists]
    
    #checks input for strand and sequence
    for i,s in enumerate(spacers):
        if s["strand_input"] == "+":
            s["strand"] = 1
        elif s["strand_input"] == "-":
            s["strand"] = -1
        else:
            raise JobERR(Job.ERR_BADINPUT + "unrecognized character for strand ({0})".format(s["strand_input"]),None)
        
        strand = s["strand"]
        seq = s["sequence"]
        if s["strand"] == 1:
            if len(seq) != 23 or (seq[-2:] != "AG" and seq[-2:] != "GG"):
                   raise JobERR(Job.ERR_BADINPUT + " no forward strand guide found in sequence {0}: {1}"\
                                .format(i,s["sequence"]),None)
        else:
            if len(seq) != 23 or (seq[:2] != "CT" and seq[:2] != "CC"):
                   raise JobERR(Job.ERR_BADINPUT + " no reverse strand guide found in sequence {0}: {1}"\
                                .format(i,s["sequence"]),None)
                         
                   

    job_sequence = ""
    spacer_infos = []
    for i,s in enumerate(spacers):
        job_sequence += "NN"
        si = dict(name = s["name"],
                  sequence = s["sequence"],
                  position = len(job_sequence),
                  strand = s["strand"])
        if len(s["sequence"]) != 23:
            raise JobERR(Job.BADSPACER_LENGTH,None)
        spacer_infos.append(si)
        job_sequence += si["sequence"]
        job_sequence += "NN"
    

    if cfront_settings.get("debug_mode",False): print job_sequence

    
    if re.compile("[^AGTCN]").search(job_sequence) is not None:
            return {"status":"error",
                    "message":"Ambiguous or invalid characters found in input sequene.",
                    "matches":None,
                    "job_key":None}
    if len(job_sequence) > 500 :
        return {"status":"error",
                "message":"Sequence length not within allowed range (23 - 500bp)",
                "matches":None,
                "job_key":None}
    
    print "GENOME: {0}".format(request.params.get("genome","hg19"))
    
        
    if len(spacer_infos) == 0:
        raise JobERR(Job.NOSPACERS,None)
    else:
        params = dict(date_submitted = datetime.datetime.utcnow(),
                      sequence = job_sequence,
                      genome = Job.GENOMES[request.params.get("genome","hg19")],
                      name = request.params["name"],
                      email = request.params["email"],
                      twostrand = False,
                      query_type = "guides_list")

        if "key" in request.params:
            params["key"] = request.params.get("key")

        job = Job(**params)

        Session.add(job)

    for spacer_info in spacer_infos:
        Session.add(Spacer(job = job,**spacer_info))
            
    job.computed_spacers = True
    Session.flush()
    mail.mail_new_job(request,job)
        
    return {"status":"success",
                "message":None,
                "job_key":job.key}
예제 #10
0
def job_post_new(request):
    sequence = request.params["query"].upper()
    sequence = re.sub("\s", "", sequence)

    if cfront_settings.get("debug_mode", False): print sequence

    if re.compile("[^AGTCN]").search(sequence) is not None:
        return {
            "status": "error",
            "message":
            "Ambiguous or invalid characters found in input sequene.",
            "matches": None,
            "job_key": None
        }
    if len(sequence) < 23 or len(sequence) > 250:
        return {
            "status": "error",
            "message": "Sequence length not within allowed range (23 - 250bp)",
            "matches": None,
            "job_key": None
        }

    genome = request.params.get("genome", "hg19")
    matches = webserver_db.check_genome(sequence, genome)
    infos = webserver_db.compute_spacers(sequence)

    if cfront_settings.get("debug_mode", False):
        print "lmatches: {0}".format(len(matches))
    if cfront_settings.get("debug_mode", False):
        print "linfos: {0}".format(len(infos))

    print request.params.get("inputRadios")
    if (request.params.get("inputRadios", None)
            == "unique_genomic") and len(matches) == 0:
        raise JobERR(Job.ERR_NOGENOME, None)
    if request.params.get("inputRadios",
                          None) == "unique_genomic" and len(matches) > 1:
        raise JobERR(Job.ERR_MULTIPLE_GENOME, None)
    elif len(infos) == 0:
        raise JobERR(Job.NOSPACERS, None)
    else:

        params = dict(date_submitted=datetime.datetime.utcnow(),
                      sequence=sequence,
                      name=request.params["name"],
                      email=request.params["email"],
                      genome=Job.GENOMES[genome],
                      query_type=request.params.get("inputRadios"))

        if len(matches) > 0:
            params.update(
                dict(chr=matches[0]["tName"],
                     start=matches[0]["tStart"],
                     strand=1 if matches[0]["strand"] == "+" else -1))
        if "key" in request.params:
            params["key"] = request.params.get("key")

        job = Job(**params)

        Session.add(job)

    for spacer_info in infos:
        Session.add(Spacer(job=job, **spacer_info))

    job.computed_spacers = True
    Session.flush()
    mail.mail_new_job(request, job)

    return {"status": "success", "message": None, "job_key": job.key}
예제 #11
0
def job_from_spacers(request):
    spacer_lines = request.params["query"].strip().splitlines()
    spacer_row_lists = [
        re.compile("\s+").split(l.strip()) for l in spacer_lines
    ]
    spacers = [
        dict(sequence=rl[0].upper(),
             strand_input=rl[2] if len(rl) > 2 else "+",
             name=rl[1] if len(rl) > 1 else None) for rl in spacer_row_lists
    ]

    #checks input for strand and sequence
    for i, s in enumerate(spacers):
        if s["strand_input"] == "+":
            s["strand"] = 1
        elif s["strand_input"] == "-":
            s["strand"] = -1
        else:
            raise JobERR(
                Job.ERR_BADINPUT +
                "unrecognized character for strand ({0})".format(
                    s["strand_input"]), None)

        strand = s["strand"]
        seq = s["sequence"]
        if s["strand"] == 1:
            if len(seq) != 23 or (seq[-2:] != "AG" and seq[-2:] != "GG"):
                raise JobERR(Job.ERR_BADINPUT + " no forward strand guide found in sequence {0}: {1}"\
                             .format(i,s["sequence"]),None)
        else:
            if len(seq) != 23 or (seq[:2] != "CT" and seq[:2] != "CC"):
                raise JobERR(Job.ERR_BADINPUT + " no reverse strand guide found in sequence {0}: {1}"\
                             .format(i,s["sequence"]),None)

    job_sequence = ""
    spacer_infos = []
    for i, s in enumerate(spacers):
        job_sequence += "NN"
        si = dict(name=s["name"],
                  sequence=s["sequence"],
                  position=len(job_sequence),
                  strand=s["strand"])
        if len(s["sequence"]) != 23:
            raise JobERR(Job.BADSPACER_LENGTH, None)
        spacer_infos.append(si)
        job_sequence += si["sequence"]
        job_sequence += "NN"

    if cfront_settings.get("debug_mode", False): print job_sequence

    if re.compile("[^AGTCN]").search(job_sequence) is not None:
        return {
            "status": "error",
            "message":
            "Ambiguous or invalid characters found in input sequene.",
            "matches": None,
            "job_key": None
        }
    if len(job_sequence) > 500:
        return {
            "status": "error",
            "message": "Sequence length not within allowed range (23 - 500bp)",
            "matches": None,
            "job_key": None
        }

    print "GENOME: {0}".format(request.params.get("genome", "hg19"))

    if len(spacer_infos) == 0:
        raise JobERR(Job.NOSPACERS, None)
    else:
        params = dict(date_submitted=datetime.datetime.utcnow(),
                      sequence=job_sequence,
                      genome=Job.GENOMES[request.params.get("genome", "hg19")],
                      name=request.params["name"],
                      email=request.params["email"],
                      twostrand=False,
                      query_type="guides_list")

        if "key" in request.params:
            params["key"] = request.params.get("key")

        job = Job(**params)

        Session.add(job)

    for spacer_info in spacer_infos:
        Session.add(Spacer(job=job, **spacer_info))

    job.computed_spacers = True
    Session.flush()
    mail.mail_new_job(request, job)

    return {"status": "success", "message": None, "job_key": job.key}
예제 #12
0
def init_env(p):
    global redis_key
    env = bootstrap(p)
    redis_key = "cfront-{0}:job:hits".format("dev" if cfront_settings.get("debug_mode",False) else "prod")