This commit is contained in:
XXAY
2021-09-24 18:15:01 +08:00
parent 8908b88284
commit 5e7fb8f896
10 changed files with 596 additions and 166 deletions
+69 -3
View File
@@ -3,6 +3,8 @@ import random
import time import time
import pandas as pd import pandas as pd
from Bio import SeqIO
from Bio.SeqUtils import GC
from Simple_Drawing.settings import BASE_DIR from Simple_Drawing.settings import BASE_DIR
@@ -338,7 +340,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
for d in self.Basics[title]: for d in self.Basics[title]:
parameter = ChartParameter(d) parameter = ChartParameter(d)
if parameter.input_type in ["rgb","hex",'color_name']: if parameter.input_type in ["rgb", "hex", 'color_name']:
code += f"""{parameter.name}:{parameter.name}, code += f"""{parameter.name}:{parameter.name},
""" """
else: else:
@@ -349,7 +351,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
for d in self.Senior[title]: for d in self.Senior[title]:
parameter = ChartParameter(d) parameter = ChartParameter(d)
print(parameter.input_type) print(parameter.input_type)
if parameter.input_type in ["rgb", "hex",'color_name']: if parameter.input_type in ["rgb", "hex", 'color_name']:
code += f"""{parameter.name}:{parameter.name}, code += f"""{parameter.name}:{parameter.name},
""" """
else: else:
@@ -381,7 +383,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
} }
}); });
}) })
""" % (i, random_color(), fl,i) """ % (i, random_color(), fl, i)
return code return code
@@ -404,4 +406,68 @@ Treemap = {
} }
class Basics(object):
def __init__(self, file_path, args):
self.args = args
self.file_path = file_path
self.out_file = []
self.f = SeqIO.parse(file_path, "fasta") # 读取多条序列
def Sequence_cleaning(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.seq)}")
self.out_file.append(["Sequence_cleaning", temp])
def Sequence_length(self):
f = self.f
temp = []
for i in f:
temp.append(f"{i.id}\t{len(i)}")
self.out_file.append(["Sequence_length", temp])
def GC_content(self):
f = self.f
temp = []
for i in f:
CONTENT = GC(str(i.seq))
temp.append(f"{i.id}\t{CONTENT}")
self.out_file.append(["GC_content", temp])
def Sequence_flip(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.reverse_complement().seq)}")
self.out_file.append(["Sequence_flip", temp])
def Reverse_complementarity(self):
f = self.f
temp = []
for i in f:
temp.append(f">{i.id}\n{str(i.complement().seq)}")
self.out_file.append(["Reverse_complementarity", temp])
# def Codon_preference(self):
# f = self.f
# temp = []
# for i in f:
# temp.append(f">{i.id}\n{str(i.complement().seq)}")
# self.out_file.append({"Reverse_complementarity": temp})
def run(self):
for i in self.args.keys():
if self.args[i] == "YES":
eval(f"self.{self.args[i]}")()
data = ""
for i in self.out_file:
for j in i:
data += f"\n{'-' * 15}\n{j[0]}\n"
data += "\n".join(i[1])
with open(self.file_path, "w") as f:
f.write(data)
return data
-2
View File
@@ -7,7 +7,5 @@ urlpatterns = [
path('down', views.download), path('down', views.download),
url("(.*\.html$)", views.out_page), url("(.*\.html$)", views.out_page),
url('up_file', views.up_file), url('up_file', views.up_file),
url('tools$', views.tools),
url('tools$', views.tools),
url('(.*)_run', views.chart_run), url('(.*)_run', views.chart_run),
] ]
-16
View File
@@ -122,19 +122,3 @@ def chart_run(request, get_chart_sort):
return JsonResponse({"img": f"/static/img_eg/show_chart/{file_id}_{k}.png"}) return JsonResponse({"img": f"/static/img_eg/show_chart/{file_id}_{k}.png"})
def tools(request):
file = request.FILES.get("file", None) # 标题
mg = request.POST.get('mg', None)
data = ""
if file is None and mg is None:
return JsonResponse({"http": "内容为空"})
if file is None:
data = 反向互补序列(mg)
else:
p = file.read()
p.decode(encoding='utf-8')
data = 反向互补序列(p.decode(encoding='utf-8'))
file_path, file_id = path_out("tools")
keep_file(data, file_path, ui=1)
return JsonResponse({"work_id": file_id})
+122
View File
@@ -123,6 +123,7 @@
var form = layui.form; var form = layui.form;
var url_up = "{{ url }}" var url_up = "{{ url }}"
var upload = layui.upload var upload = layui.upload
var element = layui.element
// 页面跳转加载函数 // 页面跳转加载函数
@@ -164,6 +165,7 @@
temp = $('#main_show') temp = $('#main_show')
temp.empty() temp.empty()
temp.append(String.raw`{% include 'tools/Basics.html' %}`) temp.append(String.raw`{% include 'tools/Basics.html' %}`)
basics_run()
form.render(); form.render();
} }
@@ -172,6 +174,7 @@
temp = $('#main_show') temp = $('#main_show')
temp.empty() temp.empty()
temp.append(String.raw`{% include 'tools/pfam.html' %}`) temp.append(String.raw`{% include 'tools/pfam.html' %}`)
pfam_run()
form.render(); form.render();
@@ -183,6 +186,7 @@
temp = $('#main_show') temp = $('#main_show')
temp.empty() temp.empty()
temp.append(String.raw`{% include 'tools/Differential_expression_analysis.html' %}`) temp.append(String.raw`{% include 'tools/Differential_expression_analysis.html' %}`)
Differential_expression_analysis_run()
form.render(); form.render();
} }
@@ -338,6 +342,124 @@
; ;
}) })
} }
function pfam_run() {
layui.use(['upload'], function () {
var $ = layui.jquery
, layer = layui.layer;
upload.render({
elem: '#select_pfam'
, url: url_up + '/tools/' + "pfam"
, auto: false
, accept: 'file'
, data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
b_dom: document.getElementById("b_dom").value,
b_seq: document.getElementById("b_seq").value,
e_dom: document.getElementById("e_dom").value,
e_seq: document.getElementById("e_seq").value,
align: document.getElementById("align").value,
clan_overlap: document.getElementById("clan_overlap").value,
}
, before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(1); //上传loading
}
, bindAction: '#pfam_run'
, done: function (res, index) {
layer.closeAll('loading'); //关闭loading
ab = '<a href= "' + url_up + '/chart/down?file_id=' + res.id + "&file_downlode_type=txt&ee=1" + '">' + ' <button type="button" class="layui-btn">downlode</button></a>'
$("#down").append(ab)
}
, error: function (index, upload) {
layer.closeAll('loading'); //关闭loading
}
})
;
})
}
function Differential_expression_analysis_run() {
var uploadListIns = upload.render({
elem: '#testList'
, elemList: $('#demoList') //列表元素对象
, url: url_up + '/tools/' + "Differential_expression_analysis" //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
, accept: 'file'
, multiple: true
, number: 10
, auto: false
, bindAction: '#testListAction'
, choose: function (obj) {
var that = this;
var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
//读取本地文件
obj.preview(function (index, file, result) {
var tr = $(['<tr id="upload-' + index + '">'
, '<td>' + file.name + '</td>'
, '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
, '<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
, '<td>'
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">Re</button>'
, '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">del</button>'
, '</td>'
, '</tr>'].join(''));
//单个重传
tr.find('.demo-reload').on('click', function () {
obj.upload(index, file);
});
//删除
tr.find('.demo-delete').on('click', function () {
delete files[index]; //删除对应的文件
tr.remove();
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
});
that.elemList.append(tr);
element.render('progress'); //渲染新加的进度条组件
});
}
, data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
{#b_dom: document.getElementById("b_dom").value,#}
{#b_seq: document.getElementById("b_seq").value,#}
{#e_dom: document.getElementById("e_dom").value,#}
{#e_seq: document.getElementById("e_seq").value,#}
{#align: document.getElementById("align").value,#}
{#clan_overlap: document.getElementById("clan_overlap").value,#}
}
, done: function (res, index, upload) { //成功的回调
var that = this;
//if(res.code == 0){ //上传成功
var tr = that.elemList.find('tr#upload-' + index)
, tds = tr.children();
tds.eq(3).html(''); //清空操作
delete this.files[index]; //删除文件队列已经上传成功的文件
return;
//}
this.error(index, upload);
}
, allDone: function (obj) { //多文件上传完毕后的状态回调
console.log(obj)
}
, error: function (index, upload) { //错误回调
var that = this;
var tr = that.elemList.find('tr#upload-' + index)
, tds = tr.children();
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
}
, progress: function (n, elem, e, index) {
element.progress('progress-demo-' + index, n + '%');
}
});
}
</script> </script>
+17 -17
View File
@@ -9,7 +9,7 @@
<ul class="layui-tab-title"> <ul class="layui-tab-title">
{# 选项卡#} {# 选项卡#}
<li>orf</li> <li>Basics</li>
</ul> </ul>
<div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-content" style="height: 100px;">
<form class="layui-form" action=""> <form class="layui-form" action="">
@@ -69,22 +69,22 @@
</div> <!-- 开关-默认关 --> </div> <!-- 开关-默认关 -->
<div class="layui-form-item"> {# <div class="layui-form-item">#}
<label class="layui-form-label">Codon preference</label> {# <label class="layui-form-label">Codon preference</label>#}
<div class="layui-input-block"> {# <div class="layui-input-block">#}
<input type="checkbox" id="Codon_preference" name="close" lay-skin="switch" {# <input type="checkbox" id="Codon_preference" name="close" lay-skin="switch"#}
lay-text="ON|OFF"> {# lay-text="ON|OFF">#}
</div> {# </div>#}
</div> <!-- 开关-默认关 --> {# </div> <!-- 开关-默认关 -->#}
{##}
{##}
<div class="layui-form-item"> {# <div class="layui-form-item">#}
<label class="layui-form-label">Codon frequency</label> {# <label class="layui-form-label">Codon frequency</label>#}
<div class="layui-input-block"> {# <div class="layui-input-block">#}
<input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch" {# <input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch"#}
lay-text="ON|OFF"> {# lay-text="ON|OFF">#}
</div> {# </div>#}
</div> <!-- 开关-默认关 --> {# </div> <!-- 开关-默认关 -->#}
<div class="layui-form-item"> <div class="layui-form-item">
@@ -1,52 +1,84 @@
<div class='layui-row' style="margin: 50px"> <div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class='layui-col-md9'>
<h1 style="font-size: 50px">Differential expression analysis</h1>
</div>
</div> <div class="layui-panel">
<div style="padding: 20px 30px;">
<div class='layui-row' style="margin-top: 80px; margin-left: 80px"> {# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'> {# 选项卡#}
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> <li>Differential expression analysis</li>
<legend>counts文件</legend> </ul>
</fieldset> <div class="layui-tab-content" style="height: 100px;">
<div class="layui-btn-container" style="display: inline-block"> <form class="layui-form" action="">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button>
<div class="layui-upload-list" style="max-width: 1000px;">
<table class="layui-table">
<colgroup>
<col>
<col width="150">
<col width="260">
<col width="150">
</colgroup>
<thead>
<tr>
<th>name</th>
<th>size</th>
<th>Upload progress</th>
<th>operation</th>
</tr>
</thead>
<tbody id="demoList"></tbody>
</table>
</div>
<div id="down">
<button type="button" class="layui-btn" id="testListAction">run</button>
</div>
</div>
</form>
</div>
</div>
</div> </div>
</div>
</div>
<div class='layui-row' style="margin-left: 80px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>分组文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div> </div>
</div> </div>
<div class='layui-row' style="margin-left: 80px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>对比文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div>
</div> </div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'> <div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-btn-container"> <div class="layui-panel">
<button type="button" class="layui-btn" id="run">RUN</button> <div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">
Group file suffix is group<br>
The suffix of the statistics file is con<br>
The suffix of the comparison file is TXT<br>
</p>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
+130 -53
View File
@@ -1,67 +1,144 @@
<div class='layui-row' style="margin: 50px"> <div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class='layui-col-md9'>
<h1 style="font-size: 50px">GO 富集</h1>
</div>
</div> <div class="layui-panel">
<div style="padding: 20px 30px;">
<div class='layui-row' style="margin-top: 80px; margin-left: 80px"> {# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'> {# 选项卡#}
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> <li>GO</li>
<legend>数据库文件</legend> </ul>
</fieldset> <div class="layui-tab-content" style="height: 100px;">
<div class="layui-btn-container" style="display: inline-block"> <form class="layui-form" action="">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div> <div class="layui-form-item">
</div>
<div class='layui-row' style="margin-left: 80px"> <div class="layui-btn-container">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>差异表达文件</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
</div>
</div> <button type="button" class="layui-btn layui-btn-normal" id="select_orf">select file
</div> </button>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'> </div>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> </div>
<legend>参数</legend>
</fieldset> <div class="layui-form-item">
<div class="layui-form-item layui-form layui-form-pane" pane> <label class="layui-form-label">begin</label>
<label class="layui-form-label">logFC阈值</label> <div class="layui-input-inline">
<div class="layui-input-inline"> <input type="text" name="username" id="begin" lay-verify="number" placeholder="请输入"
<input type="text" name="logFC" id="logFC" lay-verify="required" placeholder="请输入" autocomplete="off" autocomplete="off" class="layui-input">
class="layui-input"> </div>
</div> </div>
<label class="layui-form-label">FDR阈值</label>
<div class="layui-input-inline"> <div class="layui-form-item">
<input type="text" name="FDR" id="FDR" lay-verify="required" placeholder="请输入" autocomplete="off" <label class="layui-form-label">end</label>
class="layui-input"> <div class="layui-input-inline">
</div> <input type="text" name="username" id="end" lay-verify="number" placeholder="请输入"
<label class="layui-form-label">GO分类</label> autocomplete="off" class="layui-input">
<div class="layui-input-inline"> </div>
<select name="GO_s"> </div>
<option value="BP" selected>BP</option>
<option value="CC">CC</option> <div class="layui-form-item">
<option value="MF" selected>MF</option> <label class="layui-form-label">Cyclotype</label>
<option value="ALL">ALL</option> <div class="layui-input-block">
</select> <input type="checkbox" id="Cyclotype" name="close" lay-skin="switch" lay-text="ON|OFF">
</div>
</div> <!-- 开关-默认关 -->
<div class="layui-form-item">
<label class="layui-form-label">Codons</label>
<div class="layui-input-block">
<select name="interest" id="Codons" lay-filter="aihao">
<option value="0" selected="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
</select>
</div>
</div> <!-- 单行选择框 -->
<div class="layui-form-item">
<label class="layui-form-label">outfmt</label>
<div class="layui-input-block">
<select name="interest" id="outfmt" lay-filter="aihao">
<option value="0" selected="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
</div> <!-- 单行选择框 -->
<div class="layui-form-item">
<div class="layui-btn-container">
<div id="down">
<button type="button" class="layui-btn" id="orf_run">run</button>
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
</div>
</div>
</div>
</form>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px"> </div>
<div class='layui-col-md9'>
<div class="layui-btn-container">
<button type="button" class="layui-btn" id="run">RUN</button> <div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">Convert standard gff format files to standard gtf
format</p>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
+116 -22
View File
@@ -1,34 +1,128 @@
<div class='layui-row' style="margin: 50px"> <div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class='layui-col-md3'>
<h1 style="font-size: 50px">Pfam</h1>
</div>
<div class='layui-col-md9'>
</div> <div class="layui-panel">
<div style="padding: 20px 30px;">
</div>
<div class='layui-row' style="margin-top: 80px; margin-left: 80px"> {# 选项#}
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<div class='layui-col-md9 layui-form-pane'> {# 选项卡#}
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> <li>pfam</li>
<legend>fasta文件</legend> </ul>
</fieldset> <div class="layui-tab-content" style="height: 100px;">
<div class="layui-btn-container" style="display: inline-block"> <form class="layui-form" action="">
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
<div class="layui-form-item">
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="select_pfam">select file
</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">clan_overlap</label>
<div class="layui-input-inline">
<input type="text" name="username" id="clan_overlap" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">align</label>
<div class="layui-input-inline">
<input type="text" name="username" id="align" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">e_seq</label>
<div class="layui-input-inline">
<input type="text" name="username" id="e_seq" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">e_dom</label>
<div class="layui-input-inline">
<input type="text" name="username" id="e_dom" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">b_seq</label>
<div class="layui-input-inline">
<input type="text" name="username" id="b_seq" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">b_dom</label>
<div class="layui-input-inline">
<input type="text" name="username" id="b_dom" placeholder="请输入"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-btn-container">
<div id="down">
<button type="button" class="layui-btn" id="pfam_run">run</button>
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
</div>
</div>
</div>
</form>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
<div class="layui-panel">
<div style="padding: 20px 30px;">
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
<ul class="layui-tab-title">
<li class="layui-this">function</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div style="margin-left: 30px;">
<p style="font-size: 20px">Convert standard gff format files to standard gtf
format</p>
</div>
</div>
</div>
</div>
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
<div class='layui-col-md9'>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>运行</legend>
</fieldset>
<div class="layui-btn-container">
<button type="button" class="layui-btn" id="run">RUN</button>
</div> </div>
</div> </div>
</div> </div>
+5 -1
View File
@@ -6,5 +6,9 @@ urlpatterns = [
url("(.*\.html$)", views.out_page), url("(.*\.html$)", views.out_page),
url("gen_to_fa", views.gen_to_fa), url("gen_to_fa", views.gen_to_fa),
url("gff_to_gtf", views.gff_to_gtf), url("gff_to_gtf", views.gff_to_gtf),
url("blast", views.blast) url("blast", views.blast),
url("orf", views.orf),
url("basics", views.basics),
url("pfam", views.pfam),
url("Differential_expression_analysis", views.Differential_expression_analysis)
] ]
+64 -11
View File
@@ -1,9 +1,10 @@
import os, time import os
from Bio import SeqIO
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import render from django.shortcuts import render
from chart import tools from chart import tools
from Bio import SeqIO
def out_page(request, page): def out_page(request, page):
@@ -43,15 +44,6 @@ def gff_to_gtf(request):
return JsonResponse(data) 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): def orf(request):
file = request.FILES.get("file", None) file = request.FILES.get("file", None)
begin = request.POST.get("begin", None) begin = request.POST.get("begin", None)
@@ -66,3 +58,64 @@ def orf(request):
os.system( 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") 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) 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.GET.lists():
if i[0] not in ['_', 'file', 'k']:
josn[i[0]] = i[1][0]
data = {"id": file_id}
tools.Basics(file_path, josn)
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}/db/ -out {file_path}.txt")
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()
file_path, file_id = tools.path_out("chart")
data = {"id": file_id}
return JsonResponse(data)