#!/usr/bin/python
import web # ๊ธฐ๋ณธ์ผ๋ก ๋ถ๋ฌ์์ค์ผํ๋ค.
import kang
file_fa = 'Creinhardtii_281_v5.0.fa'
dicHD2seq = kang.Fasta2dic(file_fa)
### ์ํ๋๋๋ก ๋ณ์๋ฅผ ๋ง๋ค๋ ๋ญ ๋ง๋ค๋ ์ ์ํด๋์ ์ ์๋ค.
urls = ('/', 'index') # ์ด ์น์ฑ์ ๋ฃจํธ (/) ๋ก ์ ์ํ๋ฉด index๋ผ๋ ํด๋ ์ค๋ก ๊ฐ๋ผ. ์๋ด์.
render = web.template.render('templates/') # ํ
ํ๋ฆฟ์ด๋ผ๋ ํด๋์์ html์ฐพ์์ ์ฝ๋ฉ๋ ๋ด์ญ์ ์ด์ค๋ผ.
# ๋ด๊ฐ ์ํ๋ ์ด๋ค ํจ์๋ ๋ค ๋ฃ์ด๋ ์ ์๋ค.
def get_chopped(strin):
window = 50
out_list = []
for i in range(len(strin)/window+1):
try:
out_list.append(strin[(i)*50:(i+1)*50])
except IndexError:
out_list.append(strin[(i)*50:])
return out_list
# ์๋ด์๊ฐ ๋ฃจํธ๋ก ๋ค์ด์ค๋ฉด ๋ค์์ index๋ก ์๋ดํ๋ค.
class index:
# form api, ์ด ํผ์ html์์์ renderํจ์์ ์ํด์ html๋ชจ์์ผ๋ก ์์์ ์ธ์๋๋ค.
form = web.form.Form(
web.form.Textbox('chromosome',web.form.notnull, description="Chromosome number"),
web.form.Textbox('left',web.form.notnull, description="Left postion"),
web.form.Textbox('right',web.form.notnull, description="Right postion"),
web.form.Button('Submit'),
)
# GET์ด๋ผ๋๊ฒ์ ์นํ์ด์ง๊ฐ ์ด๋ฆฌ๊ณ ๋ฐ๋ก ๋ณด์ด๋ ๊ฒ, ์ฝ๊ธฐ์ ํด๋นํ๋ค.
def GET(self):
chromosome_list = set(dicHD2seq.keys())
# form์ ๊ฐ์ ธ์จ๋ค.
form = self.form()
# render์ ์ ์ธ๋ templates ํด๋๋ก ๊ฐ์ index.html์ ๋ก๋ฉ, ์ด๋ chromosome_list, form ์ด๋ผ๋ ๋ณ์๋ค์ ๋๊ฒจ์ค๋ค.
return render.index(chromosome_list,form)
# POST๋ ์ฌ์ฉ์๊ฐ ์ด๋ค ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ์น์๋ฒ๊ฐ ์ด๋ป๊ฒ๋ ๋ฐ์ํ๋ ํจ์
def POST(self):
# ๊ฐ์ด form์ ๋ถ๋ฌ์ด, ์์์ GET์์ ๋ฐ์ด๋ฃ์ form์ ๋ณด๊ฐ ๊ทธ๋๋ก ๋ค์ด๊ฐ๋๋ฏ.
form = self.form()
# ํผ์ด ๊ฑฐ์ง๊ฐ์ผ๋ฉด ๋ค์ ๋ฐ์ผ๋ผ.
if not form.validates():
return render.index(form)
# ํผ์์ ๋ฐ์ ๊ฐ๋ค์ ์ฌ์ด ๋ณ์๋ก ์ผ๋จ ๋ค ๋ฐ๊พธ์
chromosome = form.d.chromosome
left = int(form.d.left)-1
right = int(form.d.right)
# ํผ์์ ๋ฐ์ ๊ฐ๋ค์ ์ฐ๋ฆฌ db์์ ๋ถ๋ฌ์ค์
seq = dicHD2seq[chromosome][left:right]
seqs = get_chopped(seq)
# showseq.html์ ๋ก๋ฉ, seqs, form ๋ณ์๋ฅผ ๋ฐ์ด์ค๋ค.
return render.showseq(seqs, form)
# ์ฑ์ด ์คํ๋๋ฉด ์๋ฒ์์ฃผ
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
#<!--index.html-->
<!--์์์ ํ์ด์ ์ฝ๋์์ index.html๋ก ๋ฐ์ด์ฃผ๋ ๋ณ์๋ฅผ ๋ฐ๋ ๊ฒ์ผ๋ก ์์-->
$def with (chromosome_list,form)
<!--์๋ฌด๋ ๊ฒ ์ ๋ชฉ์ ์จ์ค๋ค. ๋ค์์ ํฐ์ ๋ชฉ์ ๋ฐ์์ฃผ๋ ํ
๊ทธ-->
<h1> Chlamydomonas reinhardtii sequence extractor </h1>
<!--post๋ฅผ ํด์ค๋ค.๋ฐ์์จ form์ ๋ ๋ ํจ์๋ฅผ ์ ์ฉ์์ผ์ ํ๋ฉด์ ํ
์คํธ ๋ฐ์ค๋ฅผ ๋ฟ๋ ค์ค๋ค.-->
<form action="" method="post">
$:form.render()
</form>
<!--ํ
์คํธ ๋ฐ์ค์ ๋ญ ์จ๋ฃ์ ์ ์๋์ง์ ๋ํ ์ค๋ช
-->
<h1>Use following chromosomes</h1>
<!--๋ค์๊ณผ ๊ฐ์ด html์์์๋ ํ์ด์ ๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋ค ํ
์ผ๋ก indent์ค์ผํจ-->
<code>
$for chromosome in chromosome_list:
$chromosome
</code>
<!--showseq.html-->
<!--ํ์ด์ ์ฝ๋์์ ๋ฐ์ด์ค seqs, form์ ๋ฐ๋๋ค-->
$def with (seqs,form)
<FIELDSET stype="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 0px; LINE-HEIGHT: 20pt; WIDTH: 400px; PADDING TOP: 0px; TEXT-ALIGN: "left" border="0">
<LEGEND style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">
[requested sequence]
</LEGEND>
<!--๋ฐ์์จ seqs๋ฆฌ์คํธ๋ฅผ html์ ๋ฟ๋ฆฐ๋ค.-->
<pre>
$for seq in seqs:
$seq
</pre>
</FIELDSET>
<form action="" method="post">
$:form.render()
</form>