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

Brian Sutherland brian at vanguardistas.net
Mon Dec 22 07:28:59 EST 2008


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

Was the change to IWidget discussed anywhere?

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
> 
> -=-

<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.'''
>  
> 

<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)

This raises:

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

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

-- 
Brian Sutherland


More information about the Checkins mailing list