diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 12fcd876234448ac6bd5cd2cf38e317c4622eefd..8aabad3a6b01c67da2eb04e71c84847dd73be93c 100644 --- a/ippisite/ippidb/forms.py +++ b/ippisite/ippidb/forms.py @@ -1,7 +1,11 @@ from django.forms import ModelForm,modelformset_factory,formset_factory from django import forms from django.db import models +from django.core.exceptions import ValidationError +from django.core.validators import RegexValidator + from .models import Bibliography, Protein, ProteinDomainComplex, Ppi, PpiComplex +from .ws import pdb_entry_exists class IdForm(ModelForm): class Meta: @@ -23,8 +27,15 @@ class BibliographyForm(ModelForm): 'journal_name': forms.TextInput(attrs={'readonly':'readonly', 'class':'readonly'}), } +def validate_pdb_exists(value): + if not(pdb_entry_exists(value)): + raise ValidationError('PDB entry not found: %(value)s', params={'value': value}, code='invalid') + class PDBForm(forms.Form): - pdb_id = forms.CharField(label="PDB ID",max_length=4, widget=forms.TextInput(attrs={'placeholder': 'e.g 4HHB'})) + pdb_id = forms.CharField(label="PDB ID",max_length=4, widget=forms.TextInput(attrs={'placeholder': 'e.g 4HHB'}), required=True, validators=[ + RegexValidator('^[0-9][a-zA-Z0-9]{3}$', message='PDB ID must be 1 numeric + 3 alphanumeric characters'), + validate_pdb_exists + ]) PDBFormSet = formset_factory(PDBForm) formset=PDBFormSet()