from .models import MD_LANG
from .models import FF_CHOICE
import json
+import urllib
+
class MultiWidgetBasic(forms.MultiWidget):
def __init__(self, count, attrs=None):
class TaskForm_min(forms.Form):
name = forms.CharField(max_length=20)
- file1 = forms.FileField(label='Upload a PDB file',
- help_text='continuous (without breaks) protein chains,use TER to divide chains')
-
+ file1 = forms.FileField(label='Upload a PDB file',required=False,
+ help_text='continuous (without breaks) protein chains,use TER to divide chains')
+ pdbid = forms.CharField(min_length=4,max_length=4,required=False,
+ widget=forms.TextInput(attrs={'size':4, 'maxlength':4, 'title':'PDB code'}),
+ label='or PDB code')
+
+ def clean(self):
+ cleaned_data = super(TaskForm_min, self).clean()
+
+ pdbid = cleaned_data.get("pdbid")
+ file1 = cleaned_data.get("file1")
+
+ if not pdbid and not file1:
+ msg = 'provide pdb file or pdb code'
+ self.add_error('file1', msg)
+
+ if pdbid:
+ test=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
+ if test.code != 200:
+ msg = 'wrong pdb code'
+ self.add_error('pdbid', msg)
+ test.close()
class TaskForm_min_a(forms.Form):
name = forms.CharField(max_length=20)
# return json.loads(self.ssbond)
unres_ff = models.CharField(max_length=20,choices=FF_CHOICE,default='E0LL2Y')
+ pdbcode = models.CharField(max_length=4,default='')
# minimization
min_choice = models.CharField(max_length=20,choices=MIN_CHOICE,default='minimize cart')
min_overlap = models.BooleanField(default=False)
<div class="col-xs-10">{{ task.myfile1 }}</div>
</li>
<li class="list-group-item task-item">
+ <div class="col-xs-10"> pdb code</div>
+ <div class="col-xs-10">{{ task.pdbcode }}</div>
+ </li>
+ <li class="list-group-item task-item">
<div class="col-xs-10"> unres_pdb</div>
<div class="col-xs-10">{{ task.min_unres_pdb }}</div>
</li>
{{ form.as_table }}
</table>
<button type="submit" class="save btn btn-default">Save & submit</button>
+ <button type="submit" value="example" name="_example" class="save btn btn-default">Load example data</button>
</form>
def add_min(request,task_id):
task = get_object_or_404(Task, id=task_id)
if request.method == 'POST':
+ if '_example' in request.POST:
+ data= {'name':task.name,'pdbid':'1BDD'}
+ form = TaskForm_min(initial=data)
+ else:
form = TaskForm_min(request.POST,request.FILES)
if form.is_valid():
task.name=form.cleaned_data["name"]
task.type="min"
- task.myfile1=form.cleaned_data["file1"]
+ pdbid=form.cleaned_data["pdbid"]
+
+ basename = str(task.owner)
+ suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
+ task.jobdirname = "_".join([basename, suffix])
+
+ if pdbid:
+ os.mkdir(task.jobdirname)
+ task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
+ task.jobdirname+'/plik.pdb')
+ task.pdbcode=pdbid
+ else:
+ task.myfile1=form.cleaned_data["file1"]
seq,task.ssbond=from_pdb(task.myfile1)
task.md_seq=""
task.md_seq=task.md_seq+seq[i:i+40]+" "
task.ready=True
- basename = str(task.owner)
- suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
- task.jobdirname = "_".join([basename, suffix])
task.save()
if is_lazy_user(request.user):