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