[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