def genome_uploader(request): if request.user.is_authenticated(): if request.user.is_staff == True: if request.POST.has_key("species") and request.POST.has_key("genbank_id"): organism_name = request.POST["species"] genbank_id = request.POST["genbank_id"] if request.FILES.has_key("genbank_file"): uploaded_file = request.FILES["genbank_file"] genbank_file = GenomeUpload(genbank_file=uploaded_file, name=uploaded_file.name) genbank_file.save() try: organism_exists = True organism = Organism.objects.get(species=organism_name) except ObjectDoesNotExist: organism_exists = False next_id = Organism.objects.order_by("-organism_id")[0].organism_id + 1 organism = Organism( organism_id=next_id, abbreviation="M. " + organism_name, genus="Mycoplasma", species=organism_name, common_name="Mycoplasma " + organism_name, ) organism.save() landmark = Landmark(name=genbank_id, organism_id=organism.organism_id) landmark.save() error = process_genome_file(genbank_file, organism, genbank_id, request, organism_exists) if error[0]: error_code = "0" landmark.delete() organism.delete() else: error_code = "1" error_msg = error_code + "," + str(error[1]) return HttpResponse(error_msg) else: return HttpResponse("-1") else: return HttpResponse("0") else: return HttpResponseRedirect(reverse("mycoplasma_home.views.home")) else: return HttpResponseRedirect(reverse("mycoplasma_home.views.home"))
def genome_uploader(request): if (request.user.is_authenticated()): if (request.user.is_staff == True): if (request.POST.has_key('species') and request.POST.has_key('genbank_id')): organism_name = request.POST['species'] genbank_id = request.POST['genbank_id'] if (request.FILES.has_key('genbank_file')): uploaded_file = request.FILES['genbank_file'] genbank_file = GenomeUpload(genbank_file=uploaded_file, name=uploaded_file.name) genbank_file.save() try: organism_exists = True organism = Organism.objects.get(species=organism_name) except ObjectDoesNotExist: organism_exists = False next_id = Organism.objects.order_by( '-organism_id')[0].organism_id + 1 organism = Organism(organism_id=next_id, abbreviation="M. " + organism_name, genus="Mycoplasma", species=organism_name, common_name="Mycoplasma " + organism_name) organism.save() landmark = Landmark(name=genbank_id, organism_id=organism.organism_id) landmark.save() error = process_genome_file(genbank_file, organism, genbank_id, request, organism_exists) if error[0]: error_code = '0' landmark.delete() organism.delete() else: error_code = '1' error_msg = error_code + "," + str(error[1]) return HttpResponse(error_msg) else: return HttpResponse('-1') else: return HttpResponse('0') else: return HttpResponseRedirect(reverse('mycoplasma_home.views.home')) else: return HttpResponseRedirect(reverse('mycoplasma_home.views.home'))
def process_genome_file(genbank_file, organism, genbank_id, request, organism_exists): error = (False, "", 0) if (request.session.get(organism.species, None) == None): request.session[organism.species] = '0' session_index = 0 session_array = ['0'] else: request.session[organism] = request.session[organism.species] + ',0' session_index = len(request.session[organism.species].split(',')) - 1 session_array = request.session[organism.species].split(',') static_root_absolute = settings.STATICFILES_DIRS[0] media_root_absolute = settings.MEDIA_ROOT + "/genbank_files/" extension_place = genbank_file.name.rfind(".") file_extension = genbank_file.name[extension_place + 1:] gff_name = media_root_absolute + genbank_file.name if (file_extension == "gbk"): args = [ "bp_genbank2gff3.pl", "-noCDS", media_root_absolute + genbank_file.name, "--outdir", media_root_absolute ] error = run_subproc(args, 0, request, session_array, session_index, organism) gff_name = media_root_absolute + genbank_file.name + ".gff" # remove the genbank file to deal with the gff only os.system("rm " + media_root_absolute + genbank_file.name) genbank_file.delete() elif (file_extension == "gff"): gff_name = media_root_absolute + genbank_file.name genbank_file.delete() else: error = ( True, "Please enter a genbank or gff file with the extension .gff or .gbk", 0) gff_name = media_root_absolute + genbank_file.name ''' if (not error[0]): if(os.getenv("GMOD_ROOT") == None): os.putenv("GMOD_ROOT", "/usr/local/gmod/") args = ["gmod_gff3_preprocessor.pl","--outfile", gff_name, "--gfffile", gff_name] error = run_subproc(args, 2, request, session_array, session_index, organism.species) ''' if (not error[0]): '''args = ["python", static_root_absolute + "/python_scripts/prepGFFGO.py", "--file", gff_name, "--outfile", gff_name + ".sorted.colored", "--accession", genbank_id] error = run_subproc(args, 3, request, session_array, session_index, organism.species) ''' gffRewriter = GFFRewriter(filename=gff_name, outfile=gff_name + ".sorted.prepared", accession=genbank_id) gffRewriter.addUnknownCvTerms({ 'user': settings.DATABASES['chado']['USER'], 'password': settings.DATABASES['chado']['PASSWORD'], 'db': settings.DATABASES['chado']['NAME'] }) gffRewriter.addColor({ 'user': settings.DATABASES['chado']['USER'], 'password': settings.DATABASES['chado']['PASSWORD'], 'db': 'MyGO' }) error = gffRewriter.getError(3) if (not error[0]): organism_name = organism.species # need to upload to a temporary organism to maintain database integrity if (organism_exists): organism_name += "_temp" next_id = Organism.objects.order_by( '-organism_id')[0].organism_id + 1 temp_organism = Organism(organism_id=next_id, abbreviation="M. " + organism_name, genus="Mycoplasma", species=organism_name, common_name="Mycoplasma " + organism_name) temp_organism.save() args = [ "gmod_bulk_load_gff3.pl", "--organism", "Mycoplasma " + organism_name, "--gfffile", gff_name + ".sorted.prepared", "--dbname", settings.DATABASES['chado']['NAME'], "--dbuser", settings.DATABASES['chado']['USER'], "--dbpass", settings.DATABASES['chado']['PASSWORD'], "--random_tmp_dir" ] error = run_subproc(args, 4, request, session_array, session_index, organism.species) if (not error[0] and organism_exists): # since there was no error in the upload, we remove the old organism and accept the new organism replace_name = organism.species organism.delete() temp_organism.update(species=replace_name) temp_organism.save() # the gff file should be deleted no matter what #os.system("rm " + gff_name) #os.system("rm " + gff_name + ".sorted") #os.system("rm " + gff_name + ".sorted.fasta") #os.system("rm " + gff_name + ".sorted.colored") # set the status of the upload process to 5 session_array[session_index] = '5' request.session[organism.species] = ",".join(session_array) if (not error[0]): if (not organism_exists): error = create_new_gbrowse_entry(organism.species, genbank_id) # set the status of the upload process to 6 session_array[session_index] = '6' request.session[organism.species] = ",".join(session_array) return error
def process_genome_file(genbank_file, organism, genbank_id, request, organism_exists): error = (False, "", 0) if request.session.get(organism.species, None) == None: request.session[organism.species] = "0" session_index = 0 session_array = ["0"] else: request.session[organism] = request.session[organism.species] + ",0" session_index = len(request.session[organism.species].split(",")) - 1 session_array = request.session[organism.species].split(",") static_root_absolute = settings.STATICFILES_DIRS[0] media_root_absolute = settings.MEDIA_ROOT + "/genbank_files/" extension_place = genbank_file.name.rfind(".") file_extension = genbank_file.name[extension_place + 1 :] gff_name = media_root_absolute + genbank_file.name if file_extension == "gbk": args = [ "bp_genbank2gff3.pl", "-noCDS", media_root_absolute + genbank_file.name, "--outdir", media_root_absolute, ] error = run_subproc(args, 0, request, session_array, session_index, organism) gff_name = media_root_absolute + genbank_file.name + ".gff" # remove the genbank file to deal with the gff only os.system("rm " + media_root_absolute + genbank_file.name) genbank_file.delete() elif file_extension == "gff": gff_name = media_root_absolute + genbank_file.name genbank_file.delete() else: error = (True, "Please enter a genbank or gff file with the extension .gff or .gbk", 0) gff_name = media_root_absolute + genbank_file.name """ if (not error[0]): if(os.getenv("GMOD_ROOT") == None): os.putenv("GMOD_ROOT", "/usr/local/gmod/") args = ["gmod_gff3_preprocessor.pl","--outfile", gff_name, "--gfffile", gff_name] error = run_subproc(args, 2, request, session_array, session_index, organism.species) """ if not error[0]: """args = ["python", static_root_absolute + "/python_scripts/prepGFFGO.py", "--file", gff_name, "--outfile", gff_name + ".sorted.colored", "--accession", genbank_id] error = run_subproc(args, 3, request, session_array, session_index, organism.species) """ gffRewriter = GFFRewriter(filename=gff_name, outfile=gff_name + ".sorted.prepared", accession=genbank_id) gffRewriter.addUnknownCvTerms( { "user": settings.DATABASES["chado"]["USER"], "password": settings.DATABASES["chado"]["PASSWORD"], "db": settings.DATABASES["chado"]["NAME"], } ) gffRewriter.addColor( { "user": settings.DATABASES["chado"]["USER"], "password": settings.DATABASES["chado"]["PASSWORD"], "db": "MyGO", } ) error = gffRewriter.getError(3) if not error[0]: organism_name = organism.species # need to upload to a temporary organism to maintain database integrity if organism_exists: organism_name += "_temp" next_id = Organism.objects.order_by("-organism_id")[0].organism_id + 1 temp_organism = Organism( organism_id=next_id, abbreviation="M. " + organism_name, genus="Mycoplasma", species=organism_name, common_name="Mycoplasma " + organism_name, ) temp_organism.save() args = [ "gmod_bulk_load_gff3.pl", "--organism", "Mycoplasma " + organism_name, "--gfffile", gff_name + ".sorted.prepared", "--dbname", settings.DATABASES["chado"]["NAME"], "--dbuser", settings.DATABASES["chado"]["USER"], "--dbpass", settings.DATABASES["chado"]["PASSWORD"], "--random_tmp_dir", ] error = run_subproc(args, 4, request, session_array, session_index, organism.species) if not error[0] and organism_exists: # since there was no error in the upload, we remove the old organism and accept the new organism replace_name = organism.species organism.delete() temp_organism.update(species=replace_name) temp_organism.save() # the gff file should be deleted no matter what # os.system("rm " + gff_name) # os.system("rm " + gff_name + ".sorted") # os.system("rm " + gff_name + ".sorted.fasta") # os.system("rm " + gff_name + ".sorted.colored") # set the status of the upload process to 5 session_array[session_index] = "5" request.session[organism.species] = ",".join(session_array) if not error[0]: if not organism_exists: error = create_new_gbrowse_entry(organism.species, genbank_id) # set the status of the upload process to 6 session_array[session_index] = "6" request.session[organism.species] = ",".join(session_array) return error