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)
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)
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")
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"))
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"))
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]]
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]]
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}
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}
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}
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}
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")