Пример #1
0
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"))
Пример #2
0
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'))
Пример #3
0
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
Пример #4
0
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