[Checkins] SVN: z3c.form/trunk/ Initialize the field widget manager

Adam GROSZER agroszer at gmail.com
Mon Sep 17 13:27:58 UTC 2012


Hello,

I'd do:

Index: src/z3c/form/form.py
===================================================================
--- src/z3c/form/form.py	(revision 127851)
+++ src/z3c/form/form.py	(working copy)
@@ -121,10 +121,12 @@
          '''See interfaces.IForm'''
          return self.context

-    def updateWidgets(self):
+    def updateWidgets(self, prefix=None):
          '''See interfaces.IForm'''
          self.widgets = zope.component.getMultiAdapter(
              (self, self.request, self.getContent()), interfaces.IWidgets)
+        if prefix is not None:
+            self.widgets.prefix = prefix
          self.widgets.mode = self.mode
          self.widgets.ignoreContext = self.ignoreContext
          self.widgets.ignoreRequest = self.ignoreRequest

of course with some tests added.


On 09/12/2012 03:35 PM, Roger wrote:
> Hi Marlthe
>
> Your commit is incompatilbe with many different concepts.
>
> For example:
> If you have a form which injects an interface with directlyProvides
> into the form. And this interface is responsible for adapt other
> widgets, this will break because the new widgets don't get
> adapted anymore during the updatWidgets call.
>
> Even more bad, you can't call update for force to switch to new
> widgets because this involves widget value extraction and this
> could badly fail if your form switched to other widgets based
> on action handling.
>
> What is the reason that you moved the widget setup from
> updateWidgets to form.update() call?
>
> Probably we can find another concept for your usecase?
>
> Regards
> Roger Ineichen
> _____________________________
> END OF MESSAGE>
>
>> Betreff: [Checkins] SVN: z3c.form/trunk/ Initialize the field widget
> manager in the
>> update-step, such that the widget update step is only responsible for
> actually updating
>> the widgets. The change is required to support the situation where you
> want to
>> change the co
>>
>> Log message for revision 127831:
>>    Initialize the field widget manager in the update-step, such that the
> widget update
>> step is only responsible for actually updating the widgets. The change is
> required to
>> support the situation where you want to change the common widget prefix
> (which
>> defaults to 'widgets.').
>>
>> Changed:
>>    U   z3c.form/trunk/CHANGES.txt
>>    U   z3c.form/trunk/src/z3c/form/form.py
>>    U   z3c.form/trunk/src/z3c/form/group.py
>>
>> -=-
>> Modified: z3c.form/trunk/CHANGES.txt
>> ================================================================
>> ===
>> --- z3c.form/trunk/CHANGES.txt	2012-09-12 10:17:42 UTC (rev 127830)
>> +++ z3c.form/trunk/CHANGES.txt	2012-09-12 11:52:05 UTC (rev 127831)
>> @@ -2,6 +2,16 @@
>>   CHANGES
>>   =======
>>
>> +In next release ...
>> +
>> +- Initialize widgets in ``update`` step. The ``updateWidgets`` method
>> +  is now responsible only for actually updating the widgets.
>> +
>> +  This allows updating the common widgets prefix before the individual
>> +  widgets are updated, useful for situations where neither a form, nor
>> +  a widgets prefix is desired.
>> +
>> +
>>   2.8.3 (unreleased)
>>   ------------------
>>
>>
>> Modified: z3c.form/trunk/src/z3c/form/form.py
>> ================================================================
>> ===
>> --- z3c.form/trunk/src/z3c/form/form.py	2012-09-12 10:17:42 UTC (rev
> 127830)
>> +++ z3c.form/trunk/src/z3c/form/form.py	2012-09-12 11:52:05 UTC (rev
> 127831)
>> @@ -126,8 +126,6 @@
>>
>>       def updateWidgets(self):
>>           '''See interfaces.IForm'''
>> -        self.widgets = zope.component.getMultiAdapter(
>> -            (self, self.request, self.getContent()), interfaces.IWidgets)
>>           self.widgets.mode = self.mode
>>           self.widgets.ignoreContext = self.ignoreContext
>>           self.widgets.ignoreRequest = self.ignoreRequest
>> @@ -148,6 +146,8 @@
>>
>>       def update(self):
>>           '''See interfaces.IForm'''
>> +        self.widgets = zope.component.getMultiAdapter(
>> +            (self, self.request, self.getContent()), interfaces.IWidgets)
>>           self.updateWidgets()
>>
>>       def render(self):
>>
>> Modified: z3c.form/trunk/src/z3c/form/group.py
>> ================================================================
>> ===
>> --- z3c.form/trunk/src/z3c/form/group.py	2012-09-12 10:17:42 UTC (rev
> 127830)
>> +++ z3c.form/trunk/src/z3c/form/group.py	2012-09-12 11:52:05 UTC (rev
>> 127831)
>> @@ -34,8 +34,6 @@
>>
>>       def updateWidgets(self):
>>           '''See interfaces.IForm'''
>> -        self.widgets = zope.component.getMultiAdapter(
>> -            (self, self.request, self.getContent()), interfaces.IWidgets)
>>           for attrName in ('mode', 'ignoreRequest', 'ignoreContext',
>>                            'ignoreReadonly'):
>>               value = getattr(self.parentForm.widgets, attrName)
>> @@ -44,7 +42,7 @@
>>
>>       def update(self):
>>           '''See interfaces.IForm'''
>> -        self.updateWidgets()
>> +        super(Group, self).update()
>>           groups = []
>>           for groupClass in self.groups:
>>               # only instantiate the groupClass if it hasn't already
>> @@ -121,9 +119,10 @@
>>
>>           return changed
>>
>> -    def update(self):
>> +    def updateWidgets(self):
>>           '''See interfaces.IForm'''
>> -        self.updateWidgets()
>> +        super(GroupForm, self).updateWidgets()
>> +
>>           groups = []
>>           for groupClass in self.groups:
>>               # only instantiate the groupClass if it hasn't already
>> @@ -135,7 +134,3 @@
>>               group.update()
>>               groups.append(group)
>>           self.groups = tuple(groups)
>> -        self.updateActions()
>> -        self.actions.execute()
>> -        if self.refreshActions:
>> -            self.updateActions()
>>
>> _______________________________________________
>> checkins mailing list
>> checkins at zope.org
>> https://mail.zope.org/mailman/listinfo/checkins
>
>
>


-- 
Best regards,
  Adam GROSZER
--
Quote of the day:
The soldiers fight, and the kings are heroes.
- Jewish Proverb


More information about the checkins mailing list