[Checkins] SVN: z3c.form/branches/adamg-objectwidget/src/z3c/form/ made setErrors go recursive over forms and widgets

Adam GROSZER agroszer at gmail.com
Tue Dec 23 09:46:50 EST 2008


Hello Brian,

darn, that's totally my fault.
I'll look into that... Any proposal what I should do?

Monday, December 22, 2008, 1:28:59 PM, you wrote:

BS> Apologies if this has come up before, but this change breaks backwards
BS> compatibility for and existing widget I have (error described below).

BS> Was the change to IWidget discussed anywhere?

BS> On Tue, Oct 14, 2008 at 12:30:08PM -0400, Adam Groszer wrote:
>> Log message for revision 92198:
>>   made setErrors go recursive over forms and widgets
>>   
>> 
>> Changed:
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/image.py
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/object.txt
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/field.py
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/form.py
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py
>>   U   z3c.form/branches/adamg-objectwidget/src/z3c/form/widget.py
>> 
>> -=-

BS> <snip>

>> Modified:
>> z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
>> ===================================================================
>> --- z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
>> 2008-10-14 15:22:29 UTC (rev 92197)
>> +++ z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
>> 2008-10-14 16:30:08 UTC (rev 92198)
>> @@ -404,7 +404,7 @@
>>          default=False,
>>          required=False)
>>  
>> -    def extract(default=NOVALUE):
>> +    def extract(default=NOVALUE, setErrors=True):
>>          """Extract the string value(s) of the widget from the form.
>>  
>>          The return value may be any Python construct, but is
>>          typically a
>> @@ -414,10 +414,12 @@
>>  
>>          If an error occurs during the extraction, the default value
>>          should be
>>          returned. Since this should never happen, if the widget is
>>          properly
>> -        designed and used, it is okay to not raise an error here,
>> since we do
>> +        designed and used, it is okay to NOT raise an error here,
>> since we do
>>          not want to crash the system during an inproper request.
>>  
>>          If there is no value to extract, the default is to be
>>          returned.
>> +
>> +        setErrors: needs to be passed on to possible sub-widgets
>>          """
>>  
>>      def update():
>> @@ -582,8 +584,11 @@
>>      def update():
>>          """Setup widgets."""
>>  
>> -    def extract():
>> +    def extract(setErrors=True):
>>          """Extract the values from the widgets and validate them.
>> +
>> +        setErrors: decides whether to set errors on self and on the
>> widgets
>> +                   also needs to be passed on to sub-widgets
>>          """
>>  
>>  
>> @@ -843,9 +848,11 @@
>>          mainly meant to be a hook for subclasses.
>>          '''
>>  
>> -    def extractData():
>> -        '''Extract the data of the form.'''
>> +    def extractData(setErrors=True):
>> +        '''Extract the data of the form.
>>  
>> +        setErrors: needs to be passed to extract() and to
>> sub-widgets'''
>> +
>>      def update():
>>          '''Update the form.'''
>>  
>> 

BS> <snip>

>> Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/widget.py
>> ===================================================================
>> --- z3c.form/branches/adamg-objectwidget/src/z3c/form/widget.py       2008-10-14 15:22:29 UTC (rev 92197)
>> +++ z3c.form/branches/adamg-objectwidget/src/z3c/form/widget.py       2008-10-14 16:30:08 UTC (rev 92198)
>> @@ -77,7 +77,9 @@
>>          lookForDefault = False
>>          # Step 1.1: If possible, get a value from the request
>>          if not self.ignoreRequest:
>> -            widget_value = self.extract()
>> +            #at this turn we do not need errors to be set on widgets
>> +            #errors will be set when extract gets called from form.extractData
>> +            widget_value = self.extract(setErrors=False)

BS> This raises:

BS>     TypeError: extract() got an unexpected keyword argument 'setErrors'

BS> For an existing widget that implements the extract method.

>>              if widget_value is not interfaces.NOVALUE:
>>                  # Once we found the value in the request, it takes precendence
>>                  # over everything and nothing else has to be done.
>> @@ -136,7 +138,7 @@
>>                  IPageTemplate, name=self.mode)
>>          return template(self)
>>  
>> -    def extract(self, default=interfaces.NOVALUE):
>> +    def extract(self, default=interfaces.NOVALUE, setErrors=True):
>>          """See z3c.form.interfaces.IWidget."""
>>          return self.request.get(self.name, default)
>>  
>> @@ -195,7 +197,7 @@
>>          self.updateTerms()
>>          super(SequenceWidget, self).update()
>>  
>> -    def extract(self, default=interfaces.NOVALUE):
>> +    def extract(self, default=interfaces.NOVALUE, setErrors=True):
>>          """See z3c.form.interfaces.IWidget."""
>>          if (self.name not in self.request and
>>              self.name+'-empty-marker' in self.request):
>> @@ -338,7 +340,7 @@
>>              self.updateWidgets()
>>          return property(get, set)
>>  
>> -    def extract(self, default=interfaces.NOVALUE):
>> +    def extract(self, default=interfaces.NOVALUE, setErrors=True):
>>          # This method is responsible to get the widgets value based on the
>>          # request and nothing else.
>>          # We have to setup the widgets for extract their values, because we
>> 
>> _______________________________________________
>> Checkins mailing list
>> Checkins at zope.org
>> http://mail.zope.org/mailman/listinfo/checkins



-- 
Best regards,
 Adam GROSZER                            mailto:agroszer at gmail.com
--
Quote of the day:
God may well be taken as a substitute for everything; but nothing can be taken as a substitute for God. 
- Anonymous 



More information about the Checkins mailing list