[Checkins] SVN: five.grok/trunk/ Make formlib support optional.

Sylvain Viollow cvs-admin at zope.org
Wed May 2 08:41:51 UTC 2012


Log message for revision 125565:
  Make formlib support optional.
  
  

Changed:
  U   five.grok/trunk/buildout.cfg
  U   five.grok/trunk/docs/HISTORY.txt
  U   five.grok/trunk/setup.py
  U   five.grok/trunk/src/five/grok/__init__.py
  U   five.grok/trunk/src/five/grok/components.py
  U   five.grok/trunk/src/five/grok/configure.zcml
  U   five.grok/trunk/src/five/grok/interfaces.py
  U   five.grok/trunk/src/five/grok/meta.py
  U   five.grok/trunk/src/five/grok/meta.zcml

-=-
Modified: five.grok/trunk/buildout.cfg
===================================================================
--- five.grok/trunk/buildout.cfg	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/buildout.cfg	2012-05-02 08:41:47 UTC (rev 125565)
@@ -11,12 +11,12 @@
 
 [versions]
 plone.recipe.zope2instance =
-grokcore.annotation = 1.2
-grokcore.component = 2.4
-grokcore.formlib = 1.8
-grokcore.security = 1.5
-grokcore.site = 1.5
-grokcore.view = 2.6.1
+grokcore.annotation = 1.3
+grokcore.component = 2.5
+grokcore.formlib = 1.9
+grokcore.security = 1.6
+grokcore.site = 1.6.1
+grokcore.view = 2.7
 grokcore.viewlet = 1.9
 five.localsitemanager = 2.0.5
 five.formlib = 1.0.4
@@ -46,5 +46,6 @@
 
 [test]
 recipe = zc.recipe.testrunner
-eggs = ${instance:eggs}
+eggs =
+    five.grok [test]
 defaults = ['-m', 'five.grok', '--tests-pattern', '^f?tests$', '-v']

Modified: five.grok/trunk/docs/HISTORY.txt
===================================================================
--- five.grok/trunk/docs/HISTORY.txt	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/docs/HISTORY.txt	2012-05-02 08:41:47 UTC (rev 125565)
@@ -1,11 +1,15 @@
 Changelog
 =========
 
-1.4.0 (unreleased)
+1.3.1 (unreleased)
 ------------------
 
-- ...
+- Make formlib support optional. This is not included by default. If
+  you whish to use formlib, you need to include the extra ``form`` for
+  ``five.grok``. Example::
 
+  five.grok [form] >= 1.3.1
+
 1.3.0 (2011-11-07)
 ------------------
 

Modified: five.grok/trunk/setup.py
===================================================================
--- five.grok/trunk/setup.py	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/setup.py	2012-05-02 08:41:47 UTC (rev 125565)
@@ -3,6 +3,14 @@
 
 version = '1.4.0dev'
 
+form_requires = [
+    'grokcore.formlib >= 1.4',
+    'five.formlib',
+    'zope.formlib',
+    ]
+test_requires = form_requires + [
+    ]
+
 setup(name='five.grok',
       version=version,
       description="Grok-like layer for Zope 2",
@@ -30,12 +38,10 @@
         'setuptools',
         'martian',
         'Zope2>=2.13',
-        'five.formlib',
         'five.localsitemanager > 2.0dev',
         'grokcore.annotation',
-        'grokcore.component',
-        'grokcore.formlib >= 1.4',
-        'grokcore.security',
+        'grokcore.component >= 2.5',
+        'grokcore.security [role] >= 1.6.1',
         'grokcore.site',
         'grokcore.view >= 1.12.1',
         'grokcore.viewlet >= 1.3',
@@ -43,11 +49,13 @@
         'zope.component',
         'zope.container',
         'zope.contentprovider',
-        'zope.formlib',
         'zope.interface',
         'zope.location',
         'zope.pagetemplate',
         'zope.publisher',
         'zope.traversing',
         ],
+      extras_require={
+        'form': form_requires,
+        'test': form_requires},
       )

Modified: five.grok/trunk/src/five/grok/__init__.py
===================================================================
--- five.grok/trunk/src/five/grok/__init__.py	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/__init__.py	2012-05-02 08:41:47 UTC (rev 125565)
@@ -18,13 +18,9 @@
 from grokcore.site import *
 from grokcore.view import *
 from grokcore.viewlet import *
-from grokcore.formlib import *
 
 from five.grok.components import Model, Container, Site, LocalUtility
-from five.grok.components import Form, AddForm
-from five.grok.components import EditForm, DisplayForm
 from five.grok.components import View, ViewletManager
-from five.grok.formlib import AutoFields
 
 
 # Override the one from grokcore.view so that we get Zope 2 semantics
@@ -35,5 +31,11 @@
 from five.grok.components import ZopeTwoDirectoryResource as DirectoryResource
 
 # Only export public API
-from five.grok.interfaces import IFiveGrokAPI
+from five.grok.interfaces import IFiveGrokAPI, HAVE_FORMLIB
+if HAVE_FORMLIB:
+    from grokcore.formlib import *
+    from five.grok.components import Form, AddForm
+    from five.grok.components import EditForm, DisplayForm
+    from five.grok.formlib import AutoFields
+
 __all__ = list(IFiveGrokAPI)

Modified: five.grok/trunk/src/five/grok/components.py
===================================================================
--- five.grok/trunk/src/five/grok/components.py	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/components.py	2012-05-02 08:41:47 UTC (rev 125565)
@@ -21,17 +21,14 @@
 from zope.location.interfaces import IPossibleSite
 from zope import interface
 
-from five.formlib import formbase
-
 from grokcore.component.interfaces import IContext
-from grokcore.formlib.components import GrokForm as BaseGrokForm
-from grokcore.formlib.components import default_display_template, \
-    default_form_template
 from grokcore.view.components import PageTemplate
 from grokcore.viewlet.components import ViewletManager as BaseViewletManager
 from grokcore.site.components import BaseSite
 import grokcore.view
 
+from five.grok.interfaces import HAVE_FORMLIB
+
 from Products.Five.browser.pagetemplatefile import ViewMapper
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
 from Products.Five.browser.pagetemplatefile import getEngine
@@ -175,51 +172,58 @@
         return resource
 
 
-# forms from formlib
 
-class GrokForm(BaseGrokForm):
+# Viewlet / Viewlet Manager
 
-    def __init__(self, *args):
-        super(GrokForm, self).__init__(*args)
-        self.__name__ = self.__view_name__
 
+class ViewletManager(BaseViewletManager, ZopeTwoBaseViewletManager):
 
-class Form(GrokForm, formbase.PageForm, View):
     martian.baseclass()
-    template = default_form_template
 
+    def filter(self, viewlets):
+        # XXX Need Zope 2 filter
+        return ZopeTwoBaseViewletManager.filter(self, viewlets)
 
-class AddForm(GrokForm, formbase.AddForm, View):
-    martian.baseclass()
-    template = default_form_template
+    def __getitem__(self, key):
+        # XXX Need Zope 2 __getitem__
+        return ZopeTwoBaseViewletManager.__getitem__(self, key)
 
+if HAVE_FORMLIB:
+    from five.formlib import formbase
+    from grokcore.formlib.components import GrokForm as BaseGrokForm
+    from grokcore.formlib.components import default_display_template, \
+        default_form_template
 
-class EditForm(GrokForm, formbase.EditForm, View):
-    martian.baseclass()
-    template = default_form_template
+    # forms from formlib
 
-    # grokcore.formlib defines empty actions since 1.1. Restore save
-    # option here.
-    actions = formbase.EditForm.actions
+    class GrokForm(BaseGrokForm):
 
+        def __init__(self, *args):
+            super(GrokForm, self).__init__(*args)
+            self.__name__ = self.__view_name__
 
-class DisplayForm(GrokForm, formbase.DisplayForm, View):
-    martian.baseclass()
-    template = default_display_template
 
+    class Form(GrokForm, formbase.PageForm, View):
+        martian.baseclass()
+        template = default_form_template
 
-# Viewlet / Viewlet Manager
 
+    class AddForm(GrokForm, formbase.AddForm, View):
+        martian.baseclass()
+        template = default_form_template
 
-class ViewletManager(BaseViewletManager, ZopeTwoBaseViewletManager):
 
-    martian.baseclass()
+    class EditForm(GrokForm, formbase.EditForm, View):
+        martian.baseclass()
+        template = default_form_template
 
-    def filter(self, viewlets):
-        # XXX Need Zope 2 filter
-        return ZopeTwoBaseViewletManager.filter(self, viewlets)
+        # grokcore.formlib defines empty actions since 1.1. Restore save
+        # option here.
+        actions = formbase.EditForm.actions
 
-    def __getitem__(self, key):
-        # XXX Need Zope 2 __getitem__
-        return ZopeTwoBaseViewletManager.__getitem__(self, key)
 
+    class DisplayForm(GrokForm, formbase.DisplayForm, View):
+        martian.baseclass()
+        template = default_display_template
+
+

Modified: five.grok/trunk/src/five/grok/configure.zcml
===================================================================
--- five.grok/trunk/src/five/grok/configure.zcml	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/configure.zcml	2012-05-02 08:41:47 UTC (rev 125565)
@@ -11,7 +11,8 @@
   <include package="Products.Five" />
   <include package="five.grok" file="meta.zcml" />
 
-  <include package="five.formlib" />
+  <include package="five.formlib"
+           zcml:condition="installed five.formlib" />
   <include package="five.localsitemanager" />
   <include package="grokcore.annotation" />
   <include package="grokcore.view" />

Modified: five.grok/trunk/src/five/grok/interfaces.py
===================================================================
--- five.grok/trunk/src/five/grok/interfaces.py	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/interfaces.py	2012-05-02 08:41:47 UTC (rev 125565)
@@ -18,9 +18,20 @@
 import grokcore.site.interfaces
 import grokcore.view.interfaces
 import grokcore.viewlet.interfaces
-import grokcore.formlib.interfaces
 
+try:
+    from grokcore.formlib.interfaces import IGrokcoreFormlibAPI
 
+    HAVE_FORMLIB = True
+except ImportError:
+    from zope.interface import Interface
+
+    class IGrokcoreFormlibAPI(Interface):
+        """Empty FormlibAPI
+        """
+    HAVE_FORMLIB = False
+
+
 class IFiveGrokView(grokcore.view.interfaces.IGrokView):
     """A five.grok view is a specific implementation of a
     grokcore.view.View.
@@ -33,6 +44,6 @@
                    grokcore.site.interfaces.IGrokcoreSiteAPI,
                    grokcore.view.interfaces.IGrokcoreViewAPI,
                    grokcore.viewlet.interfaces.IGrokcoreViewletAPI,
-                   grokcore.formlib.interfaces.IGrokcoreFormlibAPI):
+                   IGrokcoreFormlibAPI):
     """Official five.grok API.
     """

Modified: five.grok/trunk/src/five/grok/meta.py
===================================================================
--- five.grok/trunk/src/five/grok/meta.py	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/meta.py	2012-05-02 08:41:47 UTC (rev 125565)
@@ -12,10 +12,11 @@
 #
 ##############################################################################
 
-from five.grok import components, formlib
+from five.grok import components
 from grokcore.view.meta.directoryresource import _get_resource_path
-from zope import interface, component
+from zope import interface
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
 import five.grok
 import grokcore.component
 import grokcore.security
@@ -26,19 +27,22 @@
 from App.class_init import InitializeClass as initializeClass
 
 
-class FormGrokker(martian.ClassGrokker):
-    martian.component(components.GrokForm)
-    martian.directive(grokcore.component.context)
-    martian.priority(800)       # Must be run before real formlib grokker.
+if components.HAVE_FORMLIB:
+    from five.grok import formlib
 
-    def execute(self, factory, config, context, **kw):
-        # Set up form_fields from context class if they haven't been
-        # configured manually already using our version of get_auto_fields
-        if getattr(factory, 'form_fields', None) is None:
-            factory.form_fields = formlib.get_auto_fields(context)
-        return True
+    class FormGrokker(martian.ClassGrokker):
+        martian.component(components.GrokForm)
+        martian.directive(grokcore.component.context)
+        martian.priority(800)       # Must be run before real formlib grokker.
 
+        def execute(self, factory, config, context, **kw):
+            # Set up form_fields from context class if they haven't been
+            # configured manually already using our version of get_auto_fields
+            if getattr(factory, 'form_fields', None) is None:
+                factory.form_fields = formlib.get_auto_fields(context)
+            return True
 
+
 class ViewSecurityGrokker(martian.ClassGrokker):
     martian.component(five.grok.View)
     martian.directive(grokcore.security.require, name='permission')
@@ -71,7 +75,7 @@
 
     config.action(
         discriminator=('adapter', adapts, provides, name),
-        callable=component.provideAdapter,
+        callable=grokcore.component.util.provideAdapter,
         args=(resource_factory, adapts, provides, name),
         )
     return True

Modified: five.grok/trunk/src/five/grok/meta.zcml
===================================================================
--- five.grok/trunk/src/five/grok/meta.zcml	2012-05-02 08:41:20 UTC (rev 125564)
+++ five.grok/trunk/src/five/grok/meta.zcml	2012-05-02 08:41:47 UTC (rev 125565)
@@ -1,6 +1,6 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
-    xmlns:meta="http://namespaces.zope.org/meta"
+    xmlns:zcml="http://namespaces.zope.org/zcml"
     xmlns:grok="http://namespaces.zope.org/grok">
 
   <include package="grokcore.component" file="meta.zcml" />
@@ -11,8 +11,10 @@
   <!-- Load minimal support of grokcore.view, views + templates  -->
   <include package="grokcore.view" file="meta-minimal.zcml" />
   <include package="grokcore.viewlet" file="meta.zcml" />
-  <include package="grokcore.formlib" file="meta.zcml" />
 
+  <include package="grokcore.formlib" file="meta.zcml"
+           zcml:condition="installed grokcore.formlib" />
+
   <!-- Include skin support as well -->
   <grok:grok package="grokcore.view.meta.skin" />
 



More information about the checkins mailing list