[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