From 8cc2539d94784c3d304df60184693efbaaae0210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr> Date: Sat, 9 Sep 2017 21:58:32 +0200 Subject: [PATCH] modify PDB ID form to validate format and PDB entry existence Former-commit-id: fb0ff3428b6b55c4e73c58b186cf72d48b83f4d4 --- ippisite/ippidb/forms.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 12fcd876..8aabad3a 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() -- GitLab