[Checkins] SVN: megrok.z3cform.base/trunk/src/megrok/z3cform/base/ added a decorator for button labels
Christian Klinger
cklinger at novareto.de
Tue Jun 1 09:51:26 EDT 2010
Log message for revision 112888:
added a decorator for button labels
Changed:
U megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py
U megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py
U megrok.z3cform.base/trunk/src/megrok/z3cform/base/tests/test_declarations.py
-=-
Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py 2010-06-01 13:28:28 UTC (rev 112887)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py 2010-06-01 13:51:26 UTC (rev 112888)
@@ -13,4 +13,4 @@
from components import *
from interfaces import IGrokForm, ICancelButton
from utils import apply_data_event, notify_changes, set_fields_data
-from declarations import validator, invariant, default_value
+from declarations import validator, invariant, default_value, button_label
Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py 2010-06-01 13:28:28 UTC (rev 112887)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py 2010-06-01 13:51:26 UTC (rev 112888)
@@ -9,6 +9,7 @@
from z3c.form.validator import WidgetValidatorDiscriminators
from z3c.form.interfaces import IValidator, IManagerValidator
from z3c.form.validator import WidgetsValidatorDiscriminators
+from z3c.form.button import ComputedButtonActionAttribute
class DecoratedInvariantsValidator(InvariantsValidator):
@@ -112,7 +113,7 @@
if adapters is None:
frame.f_locals['__form_value_adapters__'] = adapters = []
adapters.append(value_adapter)
-return ob
+ return ob
class default_value(_computed_value):
@@ -142,3 +143,52 @@
field=field,
widget=widget,
)
+
+
+class button_label(_computed_value):
+ """Decorator for functions providing a computed button label::
+
+ @button_label()
+ def get_widget(data):
+ return ...
+
+ The 'data' object has attributes form (view), request (layer), context,
+ button, and manager. These are also the possible discriminators that can
+ be passed to the decorator.
+ """
+
+ factory = ComputedButtonActionAttribute
+
+ def __init__(self,
+ content=None,
+ request=None,
+ form=None,
+ manager=None,
+ button=None,
+ view=None,
+ layer=None,
+ context=None):
+
+ if context and content:
+ raise TypeError(u"You cannot specify both 'content' and 'context' - one is an alias for the other")
+ elif context and not content:
+ content = context
+
+ if form and view:
+ raise TypeError(u"You cannot specify both 'view' and 'form' - one is an alias for the other")
+ elif view and not form:
+ form = view
+
+ if request and layer:
+ raise TypeError(u"You cannot specify both 'request' and 'layer' - one is an alias for the other")
+ elif layer and not request:
+ request = layer
+
+ super(button_label, self).__init__('title',
+ content=content,
+ request=request,
+ form=form,
+ manager=manager,
+ button=button,
+ )
+
Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/tests/test_declarations.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/tests/test_declarations.py 2010-06-01 13:28:28 UTC (rev 112887)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/tests/test_declarations.py 2010-06-01 13:51:26 UTC (rev 112888)
@@ -45,13 +45,27 @@
type="text" />
...
</form>
+
+Buttons
+-------
+
+ >>> request = TestRequest()
+ >>> view = component.getMultiAdapter((otto, request), name='buttons')
+ >>> view.updateForm()
+ >>> print view.render()
+ <form...
+ <input id="form-buttons-add" name="form.buttons.add"
+ class="submit-widget button-field" value="EGON"
+ type="submit" />
+ ...
+ </form>
"""
import grokcore.component as grok
from z3c.form import util
from zope.interface import Invalid
from zope import interface, schema
-from megrok.z3cform.base import Form, validator, invariant, default_value
+from megrok.z3cform.base import AddForm, Form, validator, invariant, default_value, button_label
from zope.schema.fieldproperty import FieldProperty
@@ -98,6 +112,15 @@
class ContextLess(Form):
ignoreContext = True
+
+class Buttons(AddForm):
+ ignoreContext = True
+
+ at button_label(form=Buttons)
+def get_widget(data):
+ return u"EGON"
+
+
def test_suite():
from zope.testing import doctest
from megrok.z3cform.base.tests import FunctionalLayer
More information about the checkins
mailing list