import os from Bio import SeqIO from django.http import JsonResponse from django.shortcuts import render from chart import tools def out_page(request, page): return render(request, f'/tools/{page}') def id_transform(request): file = request.FILES.get('file', None) to = request.POST.get("to", None) from_ = request.POST.get("from", None) if file is None: return JsonResponse({}) return JsonResponse({}) def blast(request): file = request.FILES.get('file', None) file1 = request.FILES.get('file1', None) id_ = request.POST.get("id", None) fl = request.POST.get("fl", None) if fl: file_path, file_id = tools.path_out("chart", name=id_ + "seq") tools.keep_file(file, file_path) return JsonResponse({}) else: file_path, file_id = tools.path_out("chart", name=id_) tools.keep_file(file1, file_path) outfmt = request.POST.get("outfmt", None) evalue = request.POST.get("evalue", None) num_descriptions = request.POST.get("num_descriptions", None) type = request.POST.get("type", None) os.system( f"makeblastdb -in {file_path} -dbtype {'prot' if type in ['blastx'] else 'nucl'} -parse_seqids -out db") os.system( f"{type} -query {file_path}seq -out {file_path}.blast -db db -outfmt {outfmt} -evalue {evalue} -num_descriptions {num_descriptions} -num_threads 8") return JsonResponse({"id": id_}) def gen_to_fa(request): file = request.FILES.get("file") file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) data = {"id": file_id} records = SeqIO.parse(file_path, "genbank") # 读入 SeqIO.write(records, f"{file_path}.fasta", "fasta") # 写出 return JsonResponse(data) def gff_to_gtf(request): file = request.FILES.get("file") file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) data = {"id": file_id} os.system(f"{tools.tools_path}/gffread {file_path} -T -o {file_path}.gtf") return JsonResponse(data) def orf(request): file = request.FILES.get("file", None) begin = request.POST.get("begin", None) end = request.POST.get("end", None) Cyclotype = request.POST.get("Cyclotype", None) Codons = request.POST.get("Codons", None) outfmt = request.POST.get("outfmt", None) file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) data = {"id": file_id} os.system( f"{tools.tools_path}/ORFfinder {file_path} -b {begin} -e {end} -c {'t' if Cyclotype == 'YES' else 'f'} -g {Codons} -outfmt {outfmt} -out {file_path}.txt") return JsonResponse(data) def basics(request): file = request.FILES.get("file", None) # Sequence_cleaning = request.POST.get("Sequence_cleaning", None) # 序列清洗 # Sequence_length = request.POST.get("Sequence_length", None) # 序列长度 # GC_content = request.POST.get("GC_content", None) # GC含量 # Sequence_flip = request.POST.get("Sequence_flip", None) # 序列翻转 # Reverse_complementarity = request.POST.get("Reverse_complementarity", None) # 反向互补 # Codon_preference = request.POST.get("Codon_preference", None) # 密码子偏好性 # Codon_frequency = request.POST.get("Codon_frequency", None) # 密码子频率 file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) josn = {} for i in request.POST.lists(): josn[i[0]] = i[1][0] print(josn) data = {"id": file_id} tools.Basics(file_path, josn).run() return JsonResponse(data) def pfam(request): file = request.FILES.get("file", None) b_dom = request.POST.get("b_dom", None) b_seq = request.POST.get("b_seq", None) e_dom = request.POST.get("e_dom", None) e_seq = request.POST.get("e_seq", None) align = request.POST.get("align", None) clan_overlap = request.POST.get("clan_overlap", None) file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) data = {"id": file_id} os.system( f"{tools.tools_path}/pfam_scan.pl -fasta {file_path} -b_dom {b_dom} -b_seq {b_seq} -e_dom {e_dom} -e_seq {e_seq} -align {align} -clan_overlap {clan_overlap} -dir {tools.tools_path}/pfam_db/ -out {file_path}.txt") return JsonResponse(data) def fastqc(request): file = request.FILES.get("file", None) format = request.POST.get("format", None) if format is None: format = "fastq" file_path, file_id = tools.path_out("chart") tools.keep_file(file, file_path) data = {"id": file_id} os.mkdir(f"{file_path[:-1]}") os.system( f"{tools.tools_path}/fastqc -o {file_path[:-1]} -f {format} {file_path}") os.system(f"7z a -t7z -r {file_id}.7z {file_path[:-1]}") return JsonResponse(data) def Differential_expression_analysis(request): if request.method == 'POST': files = request.FILES.getlist('files') file_path, file_id = tools.path_out("chart") for f in files: ty = (f.name).split(".")[-1] destination = open('%s/%s' % (file_path, ty), 'wb') for chunk in f.chunks(): destination.write(chunk) destination.close() os.system("") file_path, file_id = tools.path_out("chart") data = {"id": file_id} return JsonResponse(data)