[Checkins] SVN: z3c.form/trunk/src/z3c/form/ refactor: moving setErrors to property instead of method parameter
Adam Groszer
agroszer at gmail.com
Sun Jan 4 11:56:32 EST 2009
Log message for revision 94501:
refactor: moving setErrors to property instead of method parameter
Changed:
U z3c.form/trunk/src/z3c/form/browser/image.py
U z3c.form/trunk/src/z3c/form/field.py
U z3c.form/trunk/src/z3c/form/field.txt
U z3c.form/trunk/src/z3c/form/form.py
U z3c.form/trunk/src/z3c/form/interfaces.py
U z3c.form/trunk/src/z3c/form/object.py
U z3c.form/trunk/src/z3c/form/widget.py
-=-
Modified: z3c.form/trunk/src/z3c/form/browser/image.py
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/image.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/browser/image.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -34,7 +34,7 @@
src = FieldProperty(IHTMLImageWidget['src'])
klass = u'image-widget'
- def extract(self, default=interfaces.NOVALUE, setErrors=True):
+ def extract(self, default=interfaces.NOVALUE):
"""See z3c.form.interfaces.IWidget."""
if self.name + '.x' not in self.request:
return default
Modified: z3c.form/trunk/src/z3c/form/field.py
===================================================================
--- z3c.form/trunk/src/z3c/form/field.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/field.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -182,6 +182,7 @@
ignoreContext = False
ignoreRequest = False
ignoreReadonly = False
+ setErrors = True
def __init__(self, form, request, content):
super(FieldWidgets, self).__init__()
@@ -273,7 +274,7 @@
self._data[shortName] = widget
zope.location.locate(widget, self, shortName)
- def extract(self, setErrors=True):
+ def extract(self):
"""See interfaces.IWidgets"""
data = {}
errors = ()
@@ -282,7 +283,8 @@
continue
value = widget.field.missing_value
try:
- raw = widget.extract(setErrors=setErrors)
+ widget.setErrors = self.setErrors
+ raw = widget.extract()
if raw is not interfaces.NOVALUE:
value = interfaces.IDataConverter(widget).toFieldValue(raw)
zope.component.getMultiAdapter(
@@ -298,7 +300,7 @@
(error, self.request, widget, widget.field,
self.form, self.content), interfaces.IErrorViewSnippet)
view.update()
- if setErrors:
+ if self.setErrors:
widget.error = view
errors += (view,)
else:
@@ -310,6 +312,6 @@
interfaces.IErrorViewSnippet)
view.update()
errors += (view,)
- if setErrors:
+ if self.setErrors:
self.errors = errors
return data, errors
Modified: z3c.form/trunk/src/z3c/form/field.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/field.txt 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/field.txt 2009-01-04 16:56:31 UTC (rev 94501)
@@ -733,10 +733,11 @@
>>> manager.ignoreContext = True
>>> manager.update()
-When calling the ``extract()`` method with the `setErrors` flag turned off, we
-still get the same result from the method call, ...
+We have to set the setErrors property to False before calling extract,
+we still get the same result from the method call, ...
- >>> manager.extract(setErrors=False)
+ >>> manager.setErrors = False
+ >>> manager.extract()
({'firstName': u'Stephan'}, (<ErrorViewSnippet for RequiredMissing>,))
but there are no side effects on the manager and the widgets:
Modified: z3c.form/trunk/src/z3c/form/form.py
===================================================================
--- z3c.form/trunk/src/z3c/form/form.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/form.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -132,7 +132,8 @@
def extractData(self, setErrors=True):
'''See interfaces.IForm'''
- return self.widgets.extract(setErrors=setErrors)
+ self.widgets.setErrors = setErrors
+ return self.widgets.extract()
def update(self):
'''See interfaces.IForm'''
Modified: z3c.form/trunk/src/z3c/form/interfaces.py
===================================================================
--- z3c.form/trunk/src/z3c/form/interfaces.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/interfaces.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -418,7 +418,15 @@
default=False,
required=False)
- def extract(default=NOVALUE, setErrors=True):
+ #ugly thing to remove setErrors parameter from extract
+ setErrors = zope.schema.Bool(
+ title=_('Set errors'),
+ description=_('A flag, when set, the widget sets error messages '
+ 'on calling extract().'),
+ default=True,
+ required=False)
+
+ def extract(default=NOVALUE):
"""Extract the string value(s) of the widget from the form.
The return value may be any Python construct, but is typically a
@@ -432,8 +440,6 @@
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():
@@ -595,14 +601,19 @@
default=False,
required=True)
+ #ugly thing to remove setErrors parameter from extract
+ setErrors = zope.schema.Bool(
+ title=_('Set errors'),
+ description=_('A flag, when set, the contained widgets set error '
+ 'messages on calling extract().'),
+ default=True,
+ required=False)
+
def update():
"""Setup widgets."""
- def extract(setErrors=True):
+ def extract():
"""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
"""
Modified: z3c.form/trunk/src/z3c/form/object.py
===================================================================
--- z3c.form/trunk/src/z3c/form/object.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/object.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -44,6 +44,11 @@
self.request = request
self.__parent__ = parentWidget
self.parentForm = parentWidget.form
+ self.ignoreContext = self.__parent__.ignoreContext
+ self.ignoreRequest = self.__parent__.ignoreRequest
+ if interfaces.IFormAware.providedBy(self.__parent__):
+ self.ignoreReadonly = self.parentForm.ignoreReadonly
+ self.prefix = self.__parent__.name
def _validate(self):
for widget in self.widgets.values():
@@ -71,36 +76,16 @@
def setupFields(self):
self.fields = Fields(self.__parent__.field.schema)
- def update(self, ignoreContext=None, setErrors=True):
+ def update(self):
if self.__parent__.field is None:
raise ValueError("%r .field is None, that's a blocking point" % self.__parent__)
#update stuff from parent to be sure
self.mode = self.__parent__.mode
- if ignoreContext is not None:
- self.ignoreContext = ignoreContext
- else:
- self.ignoreContext = self.__parent__.ignoreContext
- self.ignoreRequest = self.__parent__.ignoreRequest
- if interfaces.IFormAware.providedBy(self.__parent__):
- self.ignoreReadonly = self.parentForm.ignoreReadonly
- #prefix = ''
- #if self.parentForm:
- # prefix = util.expandPrefix(self.parentForm.prefix) + \
- # util.expandPrefix(self.parentForm.widgets.prefix)
- #
- #self.prefix = prefix+self.__parent__.field.__name__
-
- self.prefix = self.__parent__.name
-
self.setupFields()
super(ObjectSubForm, self).update()
- if setErrors:
- #hmmm, do we need this here? seems to be over-validated
- self._validate()
-
def getContent(self):
return self.__parent__._value
@@ -211,12 +196,13 @@
def updateWidgets(self, setErrors=True):
if self._value is not interfaces.NOVALUE:
self._getForm(self._value)
- ignore = None
else:
self._getForm(None)
- ignore = True
+ self.subform.ignoreContext = True
- self.subform.update(ignore, setErrors=setErrors)
+ self.subform.update()
+ if setErrors:
+ self.subform._validate()
def update(self):
#very-very-nasty: skip raising exceptions in extract while we're updating
@@ -253,7 +239,8 @@
def get(self):
#value (get) cannot raise an exception, then we return insane values
try:
- return self.extract(setErrors=True)
+ self.setErrors=True
+ return self.extract()
except MultipleErrors:
value = {}
for name in zope.schema.getFieldNames(self.field.schema):
@@ -272,11 +259,11 @@
return property(get, set)
- def extract(self, default=interfaces.NOVALUE, setErrors=True):
+ def extract(self, default=interfaces.NOVALUE):
if self.name+'-empty-marker' in self.request:
self.updateWidgets(setErrors=False)
- value, errors = self.subform.extractData(setErrors=setErrors)
+ value, errors = self.subform.extractData(setErrors=self.setErrors)
if errors:
#very-very-nasty: skip raising exceptions in extract
@@ -306,13 +293,15 @@
######## make dummy objects providing a given interface to support
######## discriminating on field.schema
-class DummyObject(object):
- zope.interface.implements(zope.interface.Interface)
-
def makeDummyObject(iface):
- dummy = DummyObject()
if iface is not None:
- zope.interface.directlyProvides(dummy, iface)
+ class DummyObject(object):
+ zope.interface.implements(iface)
+ else:
+ class DummyObject(object):
+ zope.interface.implements(zope.interface.Interface)
+
+ dummy = DummyObject()
return dummy
######## special template factory that takes the field.schema into account
Modified: z3c.form/trunk/src/z3c/form/widget.py
===================================================================
--- z3c.form/trunk/src/z3c/form/widget.py 2009-01-04 15:44:48 UTC (rev 94500)
+++ z3c.form/trunk/src/z3c/form/widget.py 2009-01-04 16:56:31 UTC (rev 94501)
@@ -52,6 +52,7 @@
value = FieldProperty(interfaces.IWidget['value'])
template = None
ignoreRequest = FieldProperty(interfaces.IWidget['ignoreRequest'])
+ setErrors = FieldProperty(interfaces.IWidget['setErrors'])
# The following attributes are for convenience. They are declared in
# extensions to the simple widget.
@@ -79,7 +80,8 @@
if not self.ignoreRequest:
#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)
+ self.setErrors = False
+ widget_value = self.extract()
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.
@@ -138,7 +140,7 @@
IPageTemplate, name=self.mode)
return template(self)
- def extract(self, default=interfaces.NOVALUE, setErrors=True):
+ def extract(self, default=interfaces.NOVALUE):
"""See z3c.form.interfaces.IWidget."""
return self.request.get(self.name, default)
@@ -197,7 +199,7 @@
self.updateTerms()
super(SequenceWidget, self).update()
- def extract(self, default=interfaces.NOVALUE, setErrors=True):
+ def extract(self, default=interfaces.NOVALUE):
"""See z3c.form.interfaces.IWidget."""
if (self.name not in self.request and
self.name+'-empty-marker' in self.request):
@@ -353,7 +355,7 @@
self.updateWidgets()
return property(get, set)
- def extract(self, default=interfaces.NOVALUE, setErrors=True):
+ def extract(self, default=interfaces.NOVALUE):
# 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
More information about the Checkins
mailing list