[Checkins] SVN: grokcore.component/trunk/src/grokcore/component/ merge goschtl-advanced-sitemanager branch

Jan Wijbrand Kolman cvs-admin at zope.org
Sun Apr 29 15:38:44 UTC 2012


Log message for revision 125399:
  merge goschtl-advanced-sitemanager branch

Changed:
  U   grokcore.component/trunk/src/grokcore/component/meta.py
  U   grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py
  U   grokcore.component/trunk/src/grokcore/component/util.py

-=-
Modified: grokcore.component/trunk/src/grokcore/component/meta.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/meta.py	2012-04-29 15:36:51 UTC (rev 125398)
+++ grokcore.component/trunk/src/grokcore/component/meta.py	2012-04-29 15:38:40 UTC (rev 125399)
@@ -22,6 +22,7 @@
 from zope import component, interface
 from martian.error import GrokError
 from zope.interface import implementedBy
+from grokcore.component import util
 
 def _provides(component, module=None, **data):
     martian.util.check_implements_one(component)
@@ -43,7 +44,7 @@
     def execute(self, factory, config, context, provides, name, **kw):
         config.action(
             discriminator=('adapter', context, provides, name),
-            callable=component.provideAdapter,
+            callable=util.provideAdapter,
             args=(factory, (context,), provides, name),
             )
         return True
@@ -63,7 +64,7 @@
 
         config.action(
             discriminator=('adapter', for_, provides, name),
-            callable=component.provideAdapter,
+            callable=util.provideAdapter,
             args=(factory, None, provides, name),
             )
         return True
@@ -78,7 +79,7 @@
     def execute(self, factory, config, context, provides, name, **kw):
         config.action(
             discriminator=None,
-            callable=component.provideSubscriptionAdapter,
+            callable=util.provideSubscriptionAdapter,
             args=(factory, (context,), provides),
             )
         return True
@@ -98,7 +99,7 @@
 
         config.action(
             discriminator=None,
-            callable=component.provideSubscriptionAdapter,
+            callable=util.provideSubscriptionAdapter,
             args=(factory, adapts, provides),
             )
         return True
@@ -122,7 +123,7 @@
 
         config.action(
             discriminator=('utility', provides, name),
-            callable=component.provideUtility,
+            callable=util.provideUtility,
             args=(factory, provides, name),
             )
         return True
@@ -149,7 +150,7 @@
             name = getattr(function, '__component_name__', u"")
             config.action(
                 discriminator=('adapter', interfaces, function.__implemented__, name),
-                callable=component.provideAdapter,
+                callable=util.provideAdapter,
                 args=(function, interfaces, function.__implemented__, name),
                 )
         return True
@@ -180,7 +181,7 @@
 
             config.action(
                 discriminator=('utility', provides, name),
-                callable=component.provideUtility,
+                callable=util.provideUtility,
                 args=(obj, provides, name),
                 )
 
@@ -202,7 +203,7 @@
 
             config.action(
                 discriminator=('adapter', adapts, provides, name),
-                callable=component.provideAdapter,
+                callable=util.provideAdapter,
                 args=(factory, adapts, provides, name),
                 )
 
@@ -227,17 +228,17 @@
             if provides is None:
                 config.action(
                     discriminator=None,
-                    callable=component.provideHandler,
+                    callable=util.provideHandler,
                     args=(factory, subscribed))
             else:
                 config.action(
                     discriminator=None,
-                    callable=component.provideSubscriptionAdapter,
+                    callable=util.provideSubscriptionAdapter,
                     args=(factory, subscribed, provides))
 
             for iface in subscribed:
                 config.action(
                     discriminator=None,
-                    callable=zope.component.interface.provideInterface,
+                    callable=util.provideInterface,
                     args=('', iface))
         return True

Modified: grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py	2012-04-29 15:36:51 UTC (rev 125398)
+++ grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py	2012-04-29 15:38:40 UTC (rev 125399)
@@ -1,5 +1,4 @@
 """
-
 If the grok.order directive is present with arguments, sorting will be
 done by the order specified.
 
@@ -13,7 +12,6 @@
    <...Second object at ...>,
    <...First object at ...>]
 
-
 You can use the key option:
 
   >>> from operator import itemgetter
@@ -24,7 +22,6 @@
    (2, <...Second object at ...>),
    (1, <...First object at ...>)]
 
-
 """
 
 import grokcore.component as grok

Modified: grokcore.component/trunk/src/grokcore/component/util.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/util.py	2012-04-29 15:36:51 UTC (rev 125398)
+++ grokcore.component/trunk/src/grokcore/component/util.py	2012-04-29 15:38:40 UTC (rev 125399)
@@ -13,6 +13,9 @@
 ##############################################################################
 """Grok utility functions.
 """
+import types
+import zope.component.hooks
+from zope.interface.interfaces import IInterface
 from grokcore.component import directive
 
 def _sort_key(component):
@@ -33,3 +36,107 @@
         sort_key = lambda item: _sort_key(key(item))
     return sorted(components, key=sort_key)
 
+
+def getSiteManager():
+    site = zope.component.hooks.getSite()
+    if site is None:
+        sm = zope.component.getGlobalSiteManager()
+    else:
+        sm = site.getSiteManager()
+    return sm
+
+
+def provideUtility(component, provides=None, name=u''):
+    sm = getSiteManager()
+    sm.registerUtility(component, provides, name, event=False)
+
+
+def provideAdapter(factory, adapts=None, provides=None, name=''):
+    sm = getSiteManager()
+    sm.registerAdapter(factory, adapts, provides, name, event=False)
+
+
+def provideSubscriptionAdapter(factory, adapts=None, provides=None):
+    sm = getSiteManager()
+    sm.registerSubscriptionAdapter(factory, adapts, provides, event=False)
+
+
+def provideHandler(factory, adapts=None):
+    sm = getSiteManager()
+    sm.registerHandler(factory, adapts, event=False)
+
+def provideInterface(id, interface, iface_type=None, info=''):
+    """register Interface with global site manager as utility
+
+    >>> gsm = zope.component.getGlobalSiteManager()
+
+    >>> from zope.interface import Interface
+    >>> from zope.interface.interfaces import IInterface
+    >>> from zope.component.tests import ITestType
+
+    >>> class I(Interface):
+    ...     pass
+    >>> IInterface.providedBy(I)
+    True
+    >>> ITestType.providedBy(I)
+    False
+    >>> interfaces = gsm.getUtilitiesFor(ITestType)
+    >>> list(interfaces)
+    []
+
+    # provide first interface type
+    >>> provideInterface('', I, ITestType)
+    >>> ITestType.providedBy(I)
+    True
+    >>> interfaces = list(gsm.getUtilitiesFor(ITestType))
+    >>> [name for (name, iface) in interfaces]
+    [u'zope.component.interface.I']
+    >>> [iface.__name__ for (name, iface) in interfaces]
+    ['I']
+
+    # provide second interface type
+    >>> class IOtherType(IInterface):
+    ...     pass
+    >>> provideInterface('', I, IOtherType)
+
+    >>> ITestType.providedBy(I)
+    True
+    >>> IOtherType.providedBy(I)
+    True
+    >>> interfaces = list(gsm.getUtilitiesFor(ITestType))
+    >>> [name for (name, iface) in interfaces]
+    [u'zope.component.interface.I']
+    >>> interfaces = list(gsm.getUtilitiesFor(IOtherType))
+    >>> [name for (name, iface) in interfaces]
+    [u'zope.component.interface.I']
+
+    >>> class I1(Interface):
+    ...     pass
+    >>> provideInterface('', I1)
+    >>> IInterface.providedBy(I1)
+    True
+    >>> ITestType.providedBy(I1)
+    False
+    >>> interfaces = list(gsm.getUtilitiesFor(ITestType))
+    >>> [name for (name, iface) in interfaces]
+    [u'zope.component.interface.I']
+    >>> [iface.__name__ for (name, iface) in interfaces]
+    ['I']
+    """
+    if not id:
+        id = "%s.%s" % (interface.__module__, interface.__name__)
+
+    if not IInterface.providedBy(interface):
+        if not isinstance(interface, (type, types.ClassType)):
+            raise TypeError(id, "is not an interface or class")
+        return
+
+    if iface_type is not None:
+        if not iface_type.extends(IInterface):
+            raise TypeError(iface_type, "is not an interface type")
+        alsoProvides(interface, iface_type)
+    else:
+        iface_type = IInterface
+
+    sm = getSiteManager()
+    sm.registerUtility(interface, iface_type, id, info)



More information about the checkins mailing list