diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 77fb57d72d2f6ebde6b05459ca6e8485320d8870..6463079857073b64c28a551fbb2f528cdb1d90ac 100644 --- a/ippisite/ippidb/forms.py +++ b/ippisite/ippidb/forms.py @@ -291,7 +291,7 @@ class ComplexCompositionForm(forms.Form): ) 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): + nb_copy_partner=None, nb_copies_in_complex=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) @@ -315,11 +315,14 @@ class ComplexCompositionForm(forms.Form): 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['cc_nb'].widget.attrs['datalist'] = nb_copies_in_complex + if len(nb_copies_in_complex) == 1: + self.fields['cc_nb'].initial = next(iter(nb_copies_in_complex)) + self.fields['complex_type'].widget.choices = choices def full_clean(self): @@ -347,13 +350,14 @@ class ComplexCompositionBaseFormSet(forms.BaseFormSet): 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, nb_copy_bound=None, nb_per_pocket=None, - nb_copy_partner=None, *args, **kwargs): + nb_copy_partner=None, nb_copies_in_complex=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 + form_kwargs["nb_copies_in_complex"] = nb_copies_in_complex self.has_partner = has_partner self.has_bound = has_bound super().__init__(form_kwargs=form_kwargs, *args, **kwargs) @@ -369,7 +373,10 @@ ComplexCompositionFormSet = formset_factory( class PpiModelForm(ModelForm): - + pockets_nb = IntegerFieldDataList( + label=_('Total number of pockets in the complex'), + required=True, + ) family_name = CharFieldDataList( label = _("PPI Familly"), data_class = PpiFamily, @@ -404,11 +411,15 @@ class PpiModelForm(ModelForm): ), } - def __init__(self, symmetry=None,*args, **kwargs): + def __init__(self, symmetry=None, nb_pockets=None, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["diseases"].queryset=self.fields["diseases"].queryset.order_by(Upper("name")) self.fields["pdb_id"].widget.attrs["readonly"] = True self.fields["symmetry"].empty_choice = None + if nb_pockets is not None: + self.fields['pockets_nb'].widget.attrs['datalist'] = nb_pockets + if len(nb_pockets) == 1: + self.fields['pockets_nb'].initial = next(iter(nb_pockets)) if symmetry is not None: self.fields["symmetry"].queryset = symmetry if symmetry.count() == 1: diff --git a/ippisite/ippidb/views/contribute.py b/ippisite/ippidb/views/contribute.py index 9447c10aa48f9c9eb56a9060b84f04eb671f775c..70e5b9de1f3882b0cb2807648417fc6b2455b9f9 100644 --- a/ippisite/ippidb/views/contribute.py +++ b/ippisite/ippidb/views/contribute.py @@ -87,6 +87,8 @@ ARCHITECTURE = { nb_per_pocket=[1], has_partner=True, nb_copy_partner=[1], + nb_pockets=[1], + nb_copies_in_complex=[1], symmetry=['AS'] ), 'Inhib_Homo2merA2': dict( @@ -94,13 +96,17 @@ ARCHITECTURE = { nb_copy_bound=[1], nb_per_pocket=[1], has_partner=False, - symmetry=['C2','D2'] + nb_pockets=[1], + nb_copies_in_complex=[2], + symmetry=['C2', 'D2'] ), 'Inhib_Custom': dict( has_bound=True, nb_copy_bound=[], nb_per_pocket=[], has_partner=False, + nb_pockets=[], + nb_copies_in_complex=[], symmetry=[] ), 'Stab_Hetero2merAB': dict( @@ -108,6 +114,8 @@ ARCHITECTURE = { nb_copy_bound=[1], nb_per_pocket=[1], has_partner=False, + nb_pockets=[1], + nb_copies_in_complex=[1], symmetry=['AS'] ), 'Stab_Homo2merA2': dict( @@ -115,21 +123,27 @@ ARCHITECTURE = { nb_copy_bound=[2], nb_per_pocket=[2], has_partner=False, - symmetry=['C2','D2'] + nb_pockets=[1, 2], + nb_copies_in_complex=[1], + symmetry=['C2', 'D2'] ), 'Stab_HomoLike2mer': dict( has_bound=True, - nb_copy_bound=[1,2], + nb_copy_bound=[1, 2], nb_per_pocket=[1], has_partner=False, - symmetry=['C2','D2'] + nb_pockets=[2], + nb_copies_in_complex=[1], + symmetry=['C2', 'D2'] ), 'Stab_Homo3merA3': dict( has_bound=True, nb_copy_bound=[3], nb_per_pocket=[3], has_partner=False, - symmetry=['C3','D3'] + nb_pockets=[1], + nb_copies_in_complex=[1], + symmetry=['C3', 'D3'] ), 'Stab_Homo3merA2': dict( has_bound=True, @@ -137,34 +151,44 @@ ARCHITECTURE = { nb_per_pocket=[2], has_partner=True, nb_copy_partner=[1], - symmetry=['C3','D3'] + nb_pockets=[1], + nb_copies_in_complex=[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'] + nb_pockets=[1], + nb_copies_in_complex=[1], + 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'] + nb_pockets=[3, 6], + nb_copies_in_complex=[1], + symmetry=['C3', 'D3'] ), 'Stab_RingHomo5mer': dict( has_bound=True, nb_copy_bound=[5], nb_per_pocket=[2], has_partner=False, - symmetry=['C5','D5'] + nb_pockets=[5, 10], + nb_copies_in_complex=[1], + symmetry=['C5', 'D5'] ), 'Stab_Custom': dict( has_bound=True, nb_copy_bound=[], nb_per_pocket=[], has_partner=False, + nb_pockets=[], + nb_copies_in_complex=[], symmetry=[] ), } @@ -251,6 +275,7 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView): 'nb_copy_bound', 'nb_per_pocket', 'nb_copy_partner', + 'nb_copies_in_complex', ]: try: kwargs[k] = arch[k] @@ -261,6 +286,7 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView): self.storage.get_step_data('ProteinDomainComplexTypeForm') .get('ProteinDomainComplexTypeForm-complexType', "") ] + kwargs['nb_pockets']=arch['nb_pockets'] if len(arch["symmetry"]) != 0: kwargs["symmetry"] = models.Symmetry.objects.filter(code__in=arch["symmetry"]) elif step == 'ActivityDescriptionFormSet':