[Checkins] SVN: grok/branches/philikon-grokcore.component/ Move the base classes, decorators and grokkers out to grokcore.component.

Philipp von Weitershausen philikon at philikon.de
Wed Aug 22 13:00:24 EDT 2007


Log message for revision 79130:
  Move the base classes, decorators and grokkers out to grokcore.component.
  No tests yet. But grok tests still pass.
  

Changed:
  U   grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/__init__.py
  A   grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/components.py
  A   grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/decorators.py
  A   grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/grokkers.py
  U   grok/branches/philikon-grokcore.component/grokcore.component/setup.py
  U   grok/branches/philikon-grokcore.component/src/grok/__init__.py
  U   grok/branches/philikon-grokcore.component/src/grok/_grok.py
  U   grok/branches/philikon-grokcore.component/src/grok/components.py
  U   grok/branches/philikon-grokcore.component/src/grok/meta.py

-=-
Modified: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/__init__.py
===================================================================
--- grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/__init__.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/__init__.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -1,2 +1,18 @@
-# Make this directory a package
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Convenience imports
+"""
+from grokcore.component.components import Adapter, MultiAdapter, GlobalUtility
+from grokcore.component.decorators import subscribe, adapter, implementer
 

Added: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/components.py
===================================================================
--- grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/components.py	                        (rev 0)
+++ grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/components.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -0,0 +1,27 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Base classes for adapters, utlities, etc.
+"""
+class Adapter(object):
+
+    def __init__(self, context):
+        self.context = context
+
+
+class MultiAdapter(object):
+    pass
+
+
+class GlobalUtility(object):
+    pass


Property changes on: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/components.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/decorators.py
===================================================================
--- grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/decorators.py	                        (rev 0)
+++ grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/decorators.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -0,0 +1,66 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Decorators for subscribers, adapter factories, etc.
+"""
+import sys
+import types
+from zope.component._declaration import adapter as _adapter
+from zope.interface.declarations import implementer as _implementer
+from martian.util import frame_is_module
+from martian.error import GrokImportError
+
+class subscribe:
+
+    def __init__(self, *args):
+        self.subscribed = args
+
+    def __call__(self, function):
+        frame = sys._getframe(1)
+        if not frame_is_module(frame):
+            raise GrokImportError("@grok.subscribe can only be used on module "
+                                  "level.")
+
+        if not self.subscribed:
+            raise GrokImportError("@grok.subscribe requires at least one "
+                                  "argument.")
+
+        subscribers = frame.f_locals.get('__grok_subscribers__', None)
+        if subscribers is None:
+            frame.f_locals['__grok_subscribers__'] = subscribers = []
+        subscribers.append((function, self.subscribed))
+
+class adapter(_adapter):
+
+    def __init__(self, *interfaces):
+        # Override the z.c.adapter decorator to force sanity checking
+        # and have better error reporting.
+        if not interfaces:
+            raise GrokImportError(
+                "@grok.adapter requires at least one argument.")
+        if type(interfaces[0]) is types.FunctionType:
+            raise GrokImportError(
+                "@grok.adapter requires at least one argument.")
+        self.interfaces = interfaces
+
+class implementer(_implementer):
+
+    def __call__(self, ob):
+        # XXX we do not have function grokkers (yet) so we put the annotation
+        # on the module.
+        frame = sys._getframe(1)
+        implementers = frame.f_locals.get('__implementers__', None)
+        if implementers is None:
+            frame.f_locals['__implementers__'] = implementers = []
+        implementers.append(ob)
+        return _implementer.__call__(self, ob)


Property changes on: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/decorators.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/grokkers.py
===================================================================
--- grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/grokkers.py	                        (rev 0)
+++ grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/grokkers.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -0,0 +1,95 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Grokkers for adapters, utilities, subscribers, etc.
+"""
+import martian
+import zope.component.interface
+from martian import util
+from martian.error import GrokError
+from grokcore.component import Adapter, MultiAdapter, GlobalUtility
+
+
+def check_adapts(class_):
+    if zope.component.adaptedBy(class_) is None:
+        raise GrokError("%r must specify which contexts it adapts "
+                        "(use grok.adapts to specify)."
+                        % class_, class_)
+
+
+class AdapterGrokker(martian.ClassGrokker):
+    component_class = Adapter
+
+    def grok(self, name, factory, context, module_info, templates):
+        adapter_context = util.determine_class_context(factory, context)
+        provides = util.class_annotation(factory, 'grok.provides', None)
+        if provides is None:
+            util.check_implements_one(factory)
+        name = util.class_annotation(factory, 'grok.name', '')
+        zope.component.provideAdapter(factory, adapts=(adapter_context,),
+                                      provides=provides,
+                                      name=name)
+        return True
+
+
+class MultiAdapterGrokker(martian.ClassGrokker):
+    component_class = MultiAdapter
+
+    def grok(self, name, factory, context, module_info, templates):
+        provides = util.class_annotation(factory, 'grok.provides', None)
+        if provides is None:
+            util.check_implements_one(factory)
+        check_adapts(factory)
+        name = util.class_annotation(factory, 'grok.name', '')
+        zope.component.provideAdapter(factory, provides=provides, name=name)
+        return True
+
+
+class GlobalUtilityGrokker(martian.ClassGrokker):
+    component_class = GlobalUtility
+
+    def grok(self, name, factory, context, module_info, templates):
+        provides = util.class_annotation(factory, 'grok.provides', None)
+        if provides is None:
+            util.check_implements_one(factory)
+        name = util.class_annotation(factory, 'grok.name', '')
+        zope.component.provideUtility(factory(), provides=provides, name=name)
+        return True
+
+
+class SubscriberGrokker(martian.GlobalGrokker):
+
+    def grok(self, name, module, context, module_info, templates):
+        subscribers = module_info.getAnnotation('grok.subscribers', [])
+
+        for factory, subscribed in subscribers:
+            zope.component.provideHandler(factory, adapts=subscribed)
+            for iface in subscribed:
+                zope.component.interface.provideInterface('', iface)
+        return True
+
+
+class AdapterDecoratorGrokker(martian.GlobalGrokker):
+
+    def grok(self, name, module, context, module_info, templates):
+        implementers = module_info.getAnnotation('implementers', [])
+        for function in implementers:
+            interfaces = getattr(function, '__component_adapts__', None)
+            if interfaces is None:
+                # There's no explicit interfaces defined, so we assume the
+                # module context to be the thing adapted.
+                util.check_context(module_info.getModule(), context)
+                interfaces = (context, )
+            zope.component.provideAdapter(
+                function, adapts=interfaces, provides=function.__implemented__)
+        return True


Property changes on: grok/branches/philikon-grokcore.component/grokcore.component/grokcore/component/grokkers.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: grok/branches/philikon-grokcore.component/grokcore.component/setup.py
===================================================================
--- grok/branches/philikon-grokcore.component/grokcore.component/setup.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/grokcore.component/setup.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -32,5 +32,7 @@
     zip_safe=False,
     install_requires=['setuptools',
                       'martian',
+                      'zope.component',
+                      'zope.interface',
                       ],
 )

Modified: grok/branches/philikon-grokcore.component/src/grok/__init__.py
===================================================================
--- grok/branches/philikon-grokcore.component/src/grok/__init__.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/src/grok/__init__.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -30,9 +30,9 @@
     IContainerModifiedEvent, ContainerModifiedEvent)
 
 from martian import ClassGrokker, InstanceGrokker, GlobalGrokker
-from grok.components import Model, Adapter, MultiAdapter, View, XMLRPC, JSON
+from grok.components import Model, View, XMLRPC, JSON
 from grok.components import PageTemplate, PageTemplateFile, Container, Traverser
-from grok.components import Site, GlobalUtility, LocalUtility, Annotation
+from grok.components import Site, LocalUtility, Annotation
 from grok.components import Application, Form, AddForm, EditForm, DisplayForm
 from grok.components import Indexes
 from grok.components import Permission, Role
@@ -41,13 +41,13 @@
                             permissions, require, site)
 from grok._grok import do_grok as grok  # Avoid name clash within _grok
 from grok._grok import grok_component
-from grok._grok import SubscribeDecorator as subscribe
-from grok._grok import adapter, implementer
-from martian.error import GrokError, GrokImportError
-
 from grok.formlib import action, AutoFields, Fields
 from grok.util import url
 
+from grokcore.component import Adapter, MultiAdapter, GlobalUtility
+from grokcore.component import subscribe, adapter, implementer
+from martian.error import GrokError, GrokImportError
+
 # Our __init__ provides the grok API directly so using 'import grok' is enough.
 from grok.interfaces import IGrokAPI
 from zope.interface import moduleProvides

Modified: grok/branches/philikon-grokcore.component/src/grok/_grok.py
===================================================================
--- grok/branches/philikon-grokcore.component/src/grok/_grok.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/src/grok/_grok.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -13,27 +13,20 @@
 ##############################################################################
 """Grok
 """
-import os
-import sys
-import types
-
 from zope import component
-from zope import interface
-
 from zope.component.interfaces import IDefaultViewName
 from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.app.component.site import LocalSiteManager
 
 import martian
 from martian import scan
-from martian.error import GrokError, GrokImportError
-from martian.util import frame_is_module, determine_module_context
+from martian.error import GrokError
+from martian.util import determine_module_context
 
 import grok
+import grokcore.component.grokkers
+from grok import components, meta, templatereg
 
-from grok import components, meta
-from grok import templatereg
-
 _bootstrapped = False
 def bootstrap():
     component.provideAdapter(components.ModelTraverser)
@@ -53,6 +46,8 @@
 
     # now grok the grokkers
     martian.grok_module(scan.module_info_from_module(meta), the_module_grokker)
+    martian.grok_module(scan.module_info_from_module(grokcore.component.grokkers),
+                        the_module_grokker)
 
 def addSiteHandler(site, event):
     sitemanager = LocalSiteManager(site)
@@ -115,51 +110,3 @@
 the_module_grokker = martian.ModuleGrokker(the_multi_grokker,
                                            prepare=prepare_grok,
                                            finalize=finalize_grok)
-
-# decorators
-class SubscribeDecorator:
-
-    def __init__(self, *args):
-        self.subscribed = args
-
-    def __call__(self, function):
-        frame = sys._getframe(1)
-        if not frame_is_module(frame):
-            raise GrokImportError("@grok.subscribe can only be used on module "
-                                  "level.")
-
-        if not self.subscribed:
-            raise GrokImportError("@grok.subscribe requires at least one "
-                                  "argument.")
-
-        subscribers = frame.f_locals.get('__grok_subscribers__', None)
-        if subscribers is None:
-            frame.f_locals['__grok_subscribers__'] = subscribers = []
-        subscribers.append((function, self.subscribed))
-
-from zope.component._declaration import adapter as _adapter
-class adapter(_adapter):
-
-    def __init__(self, *interfaces):
-        # Override the z.c.adapter decorator to force sanity checking
-        # and have better error reporting.
-        if not interfaces:
-            raise GrokImportError(
-                "@grok.adapter requires at least one argument.")
-        if type(interfaces[0]) is types.FunctionType:
-            raise GrokImportError(
-                "@grok.adapter requires at least one argument.")
-        self.interfaces = interfaces
-
-from zope.interface.declarations import implementer as _implementer
-class implementer(_implementer):
-
-    def __call__(self, ob):
-        # XXX we do not have function grokkers (yet) so we put the annotation
-        # on the module.
-        frame = sys._getframe(1)
-        implementers = frame.f_locals.get('__implementers__', None)
-        if implementers is None:
-            frame.f_locals['__implementers__'] = implementers = []
-        implementers.append(ob)
-        return _implementer.__call__(self, ob)

Modified: grok/branches/philikon-grokcore.component/src/grok/components.py
===================================================================
--- grok/branches/philikon-grokcore.component/src/grok/components.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/src/grok/components.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -75,24 +75,10 @@
     interface.implements(interfaces.IApplication)
 
 
-class Adapter(object):
-
-    def __init__(self, context):
-        self.context = context
-
-
-class GlobalUtility(object):
-    pass
-
-
 class LocalUtility(Model):
     pass
 
 
-class MultiAdapter(object):
-    pass
-
-
 class Annotation(persistent.Persistent):
     pass
 

Modified: grok/branches/philikon-grokcore.component/src/grok/meta.py
===================================================================
--- grok/branches/philikon-grokcore.component/src/grok/meta.py	2007-08-22 16:56:38 UTC (rev 79129)
+++ grok/branches/philikon-grokcore.component/src/grok/meta.py	2007-08-22 17:00:24 UTC (rev 79130)
@@ -46,7 +46,7 @@
 
 import grok
 from grok import components, formlib
-from grok.util import check_adapts, get_default_permission, make_checker
+from grok.util import get_default_permission, make_checker
 
 
 class ModelGrokker(martian.ClassGrokker):
@@ -66,46 +66,6 @@
     component_class = grok.LocalUtility
 
 
-class AdapterGrokker(martian.ClassGrokker):
-    component_class = grok.Adapter
-
-    def grok(self, name, factory, context, module_info, templates):
-        adapter_context = util.determine_class_context(factory, context)
-        provides = util.class_annotation(factory, 'grok.provides', None)
-        if provides is None:
-            util.check_implements_one(factory)
-        name = util.class_annotation(factory, 'grok.name', '')
-        component.provideAdapter(factory, adapts=(adapter_context,),
-                                 provides=provides,
-                                 name=name)
-        return True
-
-
-class MultiAdapterGrokker(martian.ClassGrokker):
-    component_class = grok.MultiAdapter
-
-    def grok(self, name, factory, context, module_info, templates):
-        provides = util.class_annotation(factory, 'grok.provides', None)
-        if provides is None:
-            util.check_implements_one(factory)
-        check_adapts(factory)
-        name = util.class_annotation(factory, 'grok.name', '')
-        component.provideAdapter(factory, provides=provides, name=name)
-        return True
-
-
-class GlobalUtilityGrokker(martian.ClassGrokker):
-    component_class = grok.GlobalUtility
-
-    def grok(self, name, factory, context, module_info, templates):
-        provides = util.class_annotation(factory, 'grok.provides', None)
-        if provides is None:
-            util.check_implements_one(factory)
-        name = util.class_annotation(factory, 'grok.name', '')
-        component.provideUtility(factory(), provides=provides, name=name)
-        return True
-
-
 class XMLRPCGrokker(martian.ClassGrokker):
     component_class = grok.XMLRPC
 
@@ -287,34 +247,6 @@
         return True
 
 
-class SubscriberGrokker(martian.GlobalGrokker):
-
-    def grok(self, name, module, context, module_info, templates):
-        subscribers = module_info.getAnnotation('grok.subscribers', [])
-
-        for factory, subscribed in subscribers:
-            component.provideHandler(factory, adapts=subscribed)
-            for iface in subscribed:
-                zope.component.interface.provideInterface('', iface)
-        return True
-
-
-class AdapterDecoratorGrokker(martian.GlobalGrokker):
-
-    def grok(self, name, module, context, module_info, templates):
-        implementers = module_info.getAnnotation('implementers', [])
-        for function in implementers:
-            interfaces = getattr(function, '__component_adapts__', None)
-            if interfaces is None:
-                # There's no explicit interfaces defined, so we assume the
-                # module context to be the thing adapted.
-                util.check_context(module_info.getModule(), context)
-                interfaces = (context, )
-            component.provideAdapter(
-                function, adapts=interfaces, provides=function.__implemented__)
-        return True
-
-
 class StaticResourcesGrokker(martian.GlobalGrokker):
 
     def grok(self, name, module, context, module_info, templates):



More information about the Checkins mailing list