From db3cee88d8e75b56dcba46dd02bf912166d76b9c Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Wed, 14 Aug 2019 18:27:25 +0200
Subject: [PATCH] filling ppc_copy_nb and ppp_copy_nb_per_p with values for
xlsx file of #33
---
ippisite/ippidb/forms.py | 49 ++++++++++++++++++++++-------
ippisite/ippidb/views/contribute.py | 39 +++++++++++++++++++++--
2 files changed, 74 insertions(+), 14 deletions(-)
diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py
index 346ea82a..303ec003 100644
--- a/ippisite/ippidb/forms.py
+++ b/ippisite/ippidb/forms.py
@@ -6,7 +6,7 @@ from collections import OrderedDict
from django import forms
from django.contrib import messages
-from django.core.validators import RegexValidator, MinValueValidator
+from django.core.validators import RegexValidator
from django.db.models.functions import Upper
from django.forms import ModelForm, modelformset_factory, formset_factory, inlineformset_factory
from django.utils.translation import ugettext_lazy as _, ugettext
@@ -252,29 +252,31 @@ class ComplexCompositionForm(forms.Form):
widget=forms.Select(attrs={'class': 'form-control'}),
empty_label="Unknown",
)
- ppc_copy_nb = forms.IntegerField(
+ # ppc_copy_nb is Complex>NbcopyP in the xlsx file of #33
+ ppc_copy_nb = IntegerFieldDataList(
label="Number of copies of the protein in the complex",
- initial=1,
required=True,
)
- cc_nb = forms.IntegerField(
+ # cc_nb is PPI>NbCopyComplex in the xlsx file of #33
+ cc_nb = IntegerFieldDataList(
label=_('cc_nb_verbose_name'),
- initial=1,
required=True,
)
- ppp_copy_nb_per_p = forms.IntegerField(
+ # ppp_copy_nb_per_p is Complex>NbPperPocket in the xlsx file of #33
+ ppp_copy_nb_per_p = IntegerFieldDataList(
label=_('ppp_copy_nb_per_p'),
required=False,
widget=forms.NumberInput(attrs={
'class': 'bound-complex-only',
'data-required': True,
}),
- validators=[
- MinValueValidator(1),
- ],
+ # validators=[
+ # MinValueValidator(1),
+ # ],
)
- def __init__(self, protein_ids=None, has_bound=False, has_partner=False, *args, **kwargs):
+ def __init__(self, protein_ids=None, has_bound=False, has_partner=False, nb_copy_bound=None, nb_per_pocket=None,
+ nb_copy_partner=None, *args, **kwargs):
super(ComplexCompositionForm, self).__init__(*args, **kwargs)
if protein_ids is not None:
self.fields['protein'].queryset = Protein.objects.filter(pk__in=protein_ids)
@@ -284,6 +286,25 @@ class ComplexCompositionForm(forms.Form):
choices.append(('Partner', 'Partner'), )
if has_bound:
choices.append(('Bound', 'Bound'), )
+
+ nb_copy = None
+ if nb_copy_bound is not None:
+ nb_copy = nb_copy_bound
+ if nb_copy_partner is not None:
+ if nb_copy is None:
+ nb_copy = nb_copy_partner
+ else:
+ nb_copy = itertools.chain(nb_copy, nb_copy_partner)
+ nb_copy = set(nb_copy)
+ self.fields['ppc_copy_nb'].widget.attrs['datalist'] = set(nb_copy)
+ if len(nb_copy) == 1:
+ self.fields['ppc_copy_nb'].initial = next(iter(nb_copy))
+
+ nb_per_pocket = set(nb_per_pocket)
+ self.fields['ppp_copy_nb_per_p'].widget.attrs['datalist'] = nb_per_pocket
+ if len(nb_per_pocket) == 1:
+ self.fields['ppp_copy_nb_per_p'].initial = next(iter(nb_per_pocket))
+
self.fields['complex_type'].widget.choices = choices
def full_clean(self):
@@ -310,10 +331,14 @@ class ComplexCompositionBaseFormSet(forms.BaseFormSet):
if self.has_bound and self.has_partner and len(complex_type_dict) < 2:
self._non_form_errors.append(_("You need at least one bound and one partner"))
- def __init__(self, has_bound=False, has_partner=False, form_kwargs=None, *args, **kwargs):
+ def __init__(self, has_bound=False, has_partner=False, form_kwargs=None, nb_copy_bound=None, nb_per_pocket=None,
+ nb_copy_partner=None, *args, **kwargs):
form_kwargs = form_kwargs or {}
form_kwargs["has_bound"] = has_bound
form_kwargs["has_partner"] = has_partner
+ form_kwargs["nb_copy_bound"] = nb_copy_bound
+ form_kwargs["nb_copy_partner"] = nb_copy_partner
+ form_kwargs["nb_per_pocket"] = nb_per_pocket
self.has_partner = has_partner
self.has_bound = has_bound
super().__init__(form_kwargs=form_kwargs, *args, **kwargs)
@@ -350,7 +375,7 @@ class PpiModelForm(ModelForm):
'family',
'family_name',
'symmetry',
- 'pockets_nb',
+ 'pockets_nb', # pockets_nb is Ppi.pockets_nb in the xlsx file of #33
'diseases',
# 'other_diseases',
)
diff --git a/ippisite/ippidb/views/contribute.py b/ippisite/ippidb/views/contribute.py
index c907c41b..9447c10a 100644
--- a/ippisite/ippidb/views/contribute.py
+++ b/ippisite/ippidb/views/contribute.py
@@ -83,61 +83,87 @@ TEMPLATES = {"IdForm": "IdForm.html",
ARCHITECTURE = {
'Inhib_Hetero2merAB': dict(
has_bound=True,
+ nb_copy_bound=[1],
+ nb_per_pocket=[1],
has_partner=True,
+ nb_copy_partner=[1],
symmetry=['AS']
),
'Inhib_Homo2merA2': dict(
has_bound=True,
+ nb_copy_bound=[1],
+ nb_per_pocket=[1],
has_partner=False,
symmetry=['C2','D2']
),
'Inhib_Custom': dict(
has_bound=True,
+ nb_copy_bound=[],
+ nb_per_pocket=[],
has_partner=False,
symmetry=[]
),
'Stab_Hetero2merAB': dict(
has_bound=True,
+ nb_copy_bound=[1],
+ nb_per_pocket=[1],
has_partner=False,
symmetry=['AS']
),
'Stab_Homo2merA2': dict(
has_bound=True,
+ nb_copy_bound=[2],
+ nb_per_pocket=[2],
has_partner=False,
symmetry=['C2','D2']
),
'Stab_HomoLike2mer': dict(
has_bound=True,
+ nb_copy_bound=[1,2],
+ nb_per_pocket=[1],
has_partner=False,
symmetry=['C2','D2']
),
'Stab_Homo3merA3': dict(
has_bound=True,
+ nb_copy_bound=[3],
+ nb_per_pocket=[3],
has_partner=False,
symmetry=['C3','D3']
),
'Stab_Homo3merA2': dict(
has_bound=True,
+ nb_copy_bound=[2],
+ nb_per_pocket=[2],
has_partner=True,
+ nb_copy_partner=[1],
symmetry=['C3','D3']
),
'Stab_Homo4merA4': dict(
has_bound=True,
+ nb_copy_bound=[4],
+ nb_per_pocket=[2],
has_partner=False,
symmetry=['C2','D2','C4','D4']
),
'Stab_RingHomo3mer': dict(
has_bound=True,
+ nb_copy_bound=[3],
+ nb_per_pocket=[2],
has_partner=False,
symmetry=['C3','D3']
),
'Stab_RingHomo5mer': dict(
has_bound=True,
+ nb_copy_bound=[5],
+ nb_per_pocket=[2],
has_partner=False,
symmetry=['C5','D5']
),
'Stab_Custom': dict(
has_bound=True,
+ nb_copy_bound=[],
+ nb_per_pocket=[],
has_partner=False,
symmetry=[]
),
@@ -219,8 +245,17 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
.get('ProteinDomainComplexTypeForm-complexType', "")
]
kwargs['form_kwargs'] = {'protein_ids': protein_ids}
- kwargs['has_bound'] = arch['has_bound']
- kwargs['has_partner'] = arch['has_partner']
+ for k in [
+ 'has_bound',
+ 'has_partner',
+ 'nb_copy_bound',
+ 'nb_per_pocket',
+ 'nb_copy_partner',
+ ]:
+ try:
+ kwargs[k] = arch[k]
+ except KeyError:
+ pass
elif step == 'PpiForm':
arch = ARCHITECTURE[
self.storage.get_step_data('ProteinDomainComplexTypeForm')
--
GitLab