[Checkins] SVN: megrok.z3cform.base/trunk/ fixed WidgetTemplateGrokker and added support for groups

Danilo Botelho cvs-admin at zope.org
Fri Jun 22 18:44:16 UTC 2012


Log message for revision 127040:
  fixed WidgetTemplateGrokker and added support for groups

Changed:
  U   megrok.z3cform.base/trunk/docs/HISTORY.txt
  U   megrok.z3cform.base/trunk/setup.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/components.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/directives.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/interfaces.py
  U   megrok.z3cform.base/trunk/src/megrok/z3cform/base/meta.py

-=-
Modified: megrok.z3cform.base/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform.base/trunk/docs/HISTORY.txt	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/docs/HISTORY.txt	2012-06-22 18:44:13 UTC (rev 127040)
@@ -1,13 +1,18 @@
 Changelog
 =========
 
-0.4 (unreleased)
+0.4 (2012-06-22)
 ----------------
 
 * Added decorators for validator, invariant and default_value.
-  The idea of these decoraters is from plone.directives.form.
+  The idea of these decorators is from plone.directives.form.
 
+* Added support for Groups (z3c.form.group) [danilobotelho]
 
+* Fixed WidgetTemplateGrokker [danilobotelho]
+
+* Added HIDDEN_MODE to __init__.py [danilobotelho]
+
 0.3 (2010-02-11)
 ----------------
 

Modified: megrok.z3cform.base/trunk/setup.py
===================================================================
--- megrok.z3cform.base/trunk/setup.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/setup.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -15,6 +15,7 @@
     'z3c.form >= 2.1',
     'megrok.layout >= 0.9',
     'megrok.pagetemplate >= 0.3',
+    'rwproperty',
     ]
 
 test_requires = install_requires + ['grok >= 1.0', 'zope.app.testing']

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/__init__.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -5,7 +5,7 @@
 from z3c.form.form import extends, applyChanges
 from z3c.form.widget import FieldWidget
 from z3c.form.field import Field, Fields, FieldWidgets
-from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, NOVALUE
+from z3c.form.interfaces import DISPLAY_MODE, INPUT_MODE, HIDDEN_MODE, NOVALUE
 from z3c.form.interfaces import IFieldWidget, IFormLayer, IDataManager
 
 # Public interface

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/components.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/components.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/components.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -1,18 +1,19 @@
 # -*- coding: utf-8 -*-
 
-import megrok.layout
-import grokcore.view as grok
+from operator import itemgetter
+from rwproperty import getproperty, setproperty
 
 from zope import interface
 from zope import component
 from zope.publisher.publish import mapply
 from zope.pagetemplate.interfaces import IPageTemplate
+from z3c.form import form, group
 
-from z3c.form import form
-from z3c.form.interfaces import IFormLayer
+import megrok.layout
+import grokcore.view as grok
 
 from megrok.z3cform.base import Fields
-from megrok.z3cform.base.interfaces import IGrokForm
+from megrok.z3cform.base.interfaces import IGrokForm, IGroup, IGroupForm
 from grokcore.view.interfaces import ITemplate as IGrokTemplate
 
 
@@ -38,7 +39,7 @@
         self.__name__ = self.__view_name__
         self.static = component.queryAdapter(
             self.request, interface.Interface,
-            name = self.module_info.package_dotted_name)
+            name=self.module_info.package_dotted_name)
 
     def update(self):
         """Subclasses can override this method just like on regular
@@ -71,7 +72,6 @@
                             (self, self.request), IPageTemplate)
         return self._render_template()
 
-
     def __call__(self):
         mapply(self.update, (), self.request)
         if self.request.response.getStatus() in (302, 303):
@@ -130,6 +130,48 @@
     grok.baseclass()
 
 
+class BaseGroupForm(group.GroupForm):
+    grok.implements(IGroupForm)
+    grok.baseclass()
+
+    _groups = None
+
+    @getproperty
+    def groups(self):
+        if self._groups is not None:
+            return self._groups
+        return list(map(itemgetter(1), component.getAdapters(
+            (self.context, self.request, self), IGroup)))
+
+    @setproperty
+    def groups(self, value):
+        self._groups = value
+
+
+class GroupForm(GrokForm, BaseGroupForm, form.Form, grok.View):
+    """Normal z3c form with grouping capabilities
+    """
+    grok.baseclass()
+
+
+class AddGroupForm(GrokForm, BaseGroupForm, form.AddForm, grok.View):
+    """z3c add form.
+    """
+    grok.baseclass()
+
+
+class EditGroupForm(GrokForm, BaseGroupForm, form.EditForm, grok.View):
+    """z3c edit form.
+    """
+    grok.baseclass()
+
+
+class DisplayGroupForm(GrokForm, BaseGroupForm, form.DisplayForm, grok.View):
+    """z3c display form.
+    """
+    grok.baseclass()
+
+
 class PageForm(PageGrokForm, form.Form, megrok.layout.Page):
     """Normal z3c form with megrok.layout support.
     """
@@ -163,10 +205,53 @@
     grok.baseclass()
 
 
+class PageGroupForm(PageGrokForm, BaseGroupForm, form.Form,
+                    megrok.layout.Page):
+    """Normal z3c form with megrok.layout support.
+    """
+    grok.baseclass()
+
+
+class PageAddGroupForm(PageGrokForm, BaseGroupForm,
+                       form.AddForm, megrok.layout.Page):
+    """z3c add form with megrok.layout support.
+    """
+    grok.baseclass()
+
+    def _render_template(self):
+        assert not (self.template is None)
+        if self._finishedAdd:
+            self.request.response.redirect(self.nextURL())
+            return ""
+        if IGrokTemplate.providedBy(self.template):
+            return super(GrokForm, self)._render_template()
+        return self.template(self)
+
+
+class PageEditGroupForm(PageGrokForm, BaseGroupForm,
+                   form.EditForm, megrok.layout.Page):
+    """z3c edit form with megrok.layout support.
+    """
+    grok.baseclass()
+
+
+class PageDisplayGroupForm(PageGrokForm, BaseGroupForm,
+                           form.DisplayForm, megrok.layout.Page):
+    """z3c display form with megrok.layout support.
+    """
+    grok.baseclass()
+
+
 class WidgetTemplate(object):
     pass
 
 
+class Group(group.Group):
+    grok.implements(IGroup)
+
+
 __all__ = ("Form", "AddForm", "EditForm", "DisplayForm",
-           "WidgetTemplate", "PageForm", "PageAddForm",
-           "PageEditForm", "PageDisplayForm")
+           "GroupForm", "AddGroupForm", "EditGroupForm", "DisplayGroupForm",
+           "PageForm", "PageAddForm", "PageEditForm", "PageDisplayForm",
+           "PageGroupForm", "PageAddGroupForm", "PageEditGroupForm",
+           "PageDisplayGroupForm", "Group", "WidgetTemplate", )

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/declarations.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -29,7 +29,7 @@
 
 
 class invariant(object):
-    """Decorator for functions to be registered as validator for invairants
+    """Decorator for functions to be registered as validator for invariants
     """
 
     def __init__(self, **kw):

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/directives.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/directives.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/directives.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -1,5 +1,4 @@
 import martian
-from martian import validateInterfaceOrClass
 from z3c.form import interfaces
 
 

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/interfaces.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/interfaces.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/interfaces.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
 
+from zope.interface import Interface
 from z3c.form.interfaces import IButtonForm, IHandlerForm, IButton
 
 
@@ -9,9 +10,17 @@
     """
 
 
+class IGroupForm(IGrokForm):
+    pass
+
+
 class ICancelButton(IButton):
     """A button to cancel a form.
     """
 
 
-__all__ = ("IGrokForm", "ICancelButton")
+class IGroup(Interface):
+    pass
+
+
+__all__ = ("IGrokForm", "ICancelButton", "IGroup", "IGroupForm")

Modified: megrok.z3cform.base/trunk/src/megrok/z3cform/base/meta.py
===================================================================
--- megrok.z3cform.base/trunk/src/megrok/z3cform/base/meta.py	2012-06-22 18:44:03 UTC (rev 127039)
+++ megrok.z3cform.base/trunk/src/megrok/z3cform/base/meta.py	2012-06-22 18:44:13 UTC (rev 127040)
@@ -1,21 +1,24 @@
+import os.path
+
+from zope.interface import Interface
+from zope.interface.interfaces import IInterface
+from zope import component
+from zope.component.zcml import adapter
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from z3c.form import field
+from z3c.form.zcml import widgetTemplateDirective
+
 import martian
-import os.path
 import grokcore.view
 import grokcore.component
 import grokcore.viewlet
-
-from z3c.form import field
-from martian.error import GrokError
-from zope.interface import Interface
-from zope.component.zcml import adapter
-from megrok.z3cform.base import directives
-from megrok.z3cform.base import components
-from zope.interface.interfaces import IInterface
 from grokcore.view.meta.views import ViewGrokker, default_view_name
-from z3c.form.zcml import widgetTemplateDirective
 from grokcore.formlib.formlib import most_specialized_interfaces
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
+from megrok.z3cform.base import directives, components
+from megrok.z3cform.base.interfaces import IGroup
+
+
 def get_auto_fields(context):
     """Get the form fields for context.
     This methods is the same than for formlib implementation, but use
@@ -45,7 +48,6 @@
         if isinstance(form.fields, components.DefaultFields):
             form.fields = get_auto_fields(context)
 
-
         return True
 
 
@@ -68,14 +70,14 @@
     def execute(self, factory, config, context, layer,
                 template, view, field, widget, mode, **kw):
         template_path = os.path.split(factory.module_info.path)[0]
-        template = os.path.join(template_path, template)
+        template = os.path.join(template_path, template[1])
         widgetTemplateDirective(config, template, context, layer,
                     view=view, field=field, widget=widget, mode=mode)
         return True
 
 
 class ValidatorAdapterGrokker(martian.GlobalGrokker):
-    
+
     def grok(self, name, module, module_info, config, **kw):
         # context = grokcore.component.context.bind().get(module=module)
         adapters = module_info.getAnnotation('form.validator_adapters', [])
@@ -84,8 +86,9 @@
             )
         return True
 
+
 class ValueAdapterGrokker(martian.GlobalGrokker):
-    
+
     def grok(self, name, module, module_info, config, **kw):
         # context = grokcore.component.context.bind().get(module=module)
         adapters = module_info.getAnnotation('form.value_adapters', [])
@@ -96,3 +99,22 @@
             )
         return True
 
+
+class GroupGrokker(martian.ClassGrokker):
+    martian.priority(990)
+    martian.component(components.Group)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.viewlet.view)
+
+    def execute(self, factory, config, layer, context, view, name):
+        for_ = (context, layer, view)
+        provides = IGroup
+
+        config.action(
+            discriminator=('adapter', for_, provides, name),
+            callable=component.provideAdapter,
+            args=(factory, for_, provides, name),
+            )
+        return True



More information about the checkins mailing list