[Checkins] SVN: Sandbox/faassen/grokcore.site/trunk/s Weed out a lot of tests we don't need, and make the tests work.

Martijn Faassen faassen at infrae.com
Fri Oct 17 14:47:41 EDT 2008


Log message for revision 92342:
  Weed out a lot of tests we don't need, and make the tests work.
  

Changed:
  U   Sandbox/faassen/grokcore.site/trunk/setup.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/__init__.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/components.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/configure.zcml
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/directive.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftesting.zcml
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/catalog/
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/site/site.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/test_grok_functional.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local_override.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/public.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/subclass.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/interfaces.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.zcml
  A   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/testing.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/test_grok.py
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany.py
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany2.py
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone.py
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone2.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany_fixture.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2_fixture.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone_fixture.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class_fixture.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive_fixture.py
  U   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/publicnoncontainer.py
  D   Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/utility.py

-=-
Modified: Sandbox/faassen/grokcore.site/trunk/setup.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/setup.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/setup.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -32,6 +32,11 @@
     include_package_data=True,
     zip_safe=False,
     install_requires=['setuptools',
+                      'zope.app.component',
                       'grokcore.component',
+
+                      # for ftests:
+                      # TODO move these to extra_requires?
+                      'zope.app.zcmlfiles',
                       ],
 )

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/__init__.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/__init__.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/__init__.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -13,7 +13,10 @@
 ##############################################################################
 
 from grokcore.site.directive import local_utility
+from grokcore.component import provides
 from grokcore.site.components import Site, LocalUtility
 
+import grokcore.site.testing
+
 from grokcore.site.interfaces import IGrokcoreSiteAPI
 __all__ = list(IGrokcoreSiteAPI)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/components.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/components.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/components.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -18,22 +18,13 @@
 from persistent import Persistent
 
 from zope.interface import implements
+
 from zope.app.component.site import SiteManagerContainer,  LocalSiteManager
 
-from zope.app.container.interfaces import IObjectAddedEvent
 from zope.app.container.contained import Contained
 
 class Site(SiteManagerContainer):
     pass
 
- at grokcore.component.subscribe(Site, IObjectAddedEvent)
-def addSiteHandler(site, event):
-    sitemanager = LocalSiteManager(site)
-    # LocalSiteManager creates the 'default' folder in its __init__.
-    # It's not needed anymore in new versions of Zope 3, therefore we
-    # remove it
-    del sitemanager['default']
-    site.setSiteManager(sitemanager)
-
 class LocalUtility(Contained, Persistent):
     implements(IContext)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/configure.zcml
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/configure.zcml	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/configure.zcml	2008-10-17 18:47:39 UTC (rev 92342)
@@ -3,13 +3,8 @@
     xmlns:browser="http://namespaces.zope.org/browser"
     xmlns:grok="http://namespaces.zope.org/grok">
 
-  <include package="zope.securitypolicy" file="meta.zcml" />
-  <include package="zope.app.zcmlfiles" file="meta.zcml" />
-  <include package="grokcore.component" file="meta.zcml" />
+  <include package="." file="meta.zcml" />
 
-  <include package="zope.securitypolicy" />
+  <grok:grok package=".subscriber" />
 
-  <securityPolicy
-      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
-
 </configure>

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/directive.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/directive.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/directive.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -15,8 +15,9 @@
 """
 
 import grokcore.component
-import grokcore.site
 
+from grokcore.site.components import LocalUtility
+
 from zope import interface
 from zope.interface.interfaces import IInterface
 
@@ -38,9 +39,8 @@
             provides = grokcore.component.provides.bind().get(factory)
 
         if provides is None:
-            if util.check_subclass(factory, grokcore.site.LocalUtility):
-                baseInterfaces = interface.implementedBy(
-                    grokcore.site.LocalUtility)
+            if util.check_subclass(factory, LocalUtility):
+                baseInterfaces = interface.implementedBy(LocalUtility)
                 utilityInterfaces = interface.implementedBy(factory)
                 provides = list(utilityInterfaces - baseInterfaces)
 

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftesting.zcml
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftesting.zcml	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftesting.zcml	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,35 +1,16 @@
 <configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:grok="http://namespaces.zope.org/grok"
-   i18n_domain="grok"
-   package="grok"
+   xmlns:browser="http://namespaces.zope.org/browser"
+   i18n_domain="grokcore.site"
+   package="grokcore.site"
    >
 
-  <include package="grok" />
-  <grok:grok package="grok.ftests" />
+  <include package="zope.app.zcmlfiles" file="meta.zcml" />
+  <include package="grokcore.site" file="meta.zcml" />
 
-  <securityPolicy
-      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
-      />
+  <include package="zope.app.zcmlfiles" />
+  <include package="grokcore.site" />
+  <grok:grok package="grokcore.site.ftests" />
 
-  <unauthenticatedPrincipal
-      id="zope.anybody"
-      title="Unauthenticated User"
-      />
-  <grant
-      permission="zope.View"
-      principal="zope.anybody"
-      />
-
-  <principal
-      id="zope.mgr"
-      title="Manager"
-      login="mgr"
-      password="mgrpw"
-      />
-
-  <role id="zope.Manager" title="Site Manager" />
-  <grantAll role="zope.Manager" />
-  <grant role="zope.Manager" principal="zope.mgr" />
-
 </configure>

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/site/site.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/site/site.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/site/site.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -34,16 +34,18 @@
   >>> ISite.providedBy(herd)
   True
 """
-import grok
+import grokcore.site
+from persistent import Persistent
+from zope.app.container.btree import BTreeContainer
 
-class Mammoth(grok.Model, grok.Site):
+class Mammoth(grokcore.site.Site):
     pass
 
-class Herd(grok.Container, grok.Site):
+class Herd(grokcore.site.Site):
     pass
 
-class NonSite(grok.Model):
+class NonSite(Persistent):
     pass
 
-class NonSiteContainer(grok.Container):
+class NonSiteContainer(BTreeContainer):
     pass

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/test_grok_functional.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/test_grok_functional.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/test_grok_functional.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,14 +1,15 @@
 import re
 import unittest
-import grok
 import os.path
 
+import grokcore.site
+
 from pkg_resources import resource_listdir
 from zope.testing import doctest, renormalizing
 from zope.app.testing.functional import (HTTPCaller, getRootFolder,
                                          FunctionalTestSetup, sync, ZCMLLayer)
 
-ftesting_zcml = os.path.join(os.path.dirname(grok.__file__), 'ftesting.zcml')
+ftesting_zcml = os.path.join(os.path.dirname(grokcore.site.__file__), 'ftesting.zcml')
 GrokFunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'GrokFunctionalLayer',
                                 allow_teardown=True)
 
@@ -51,7 +52,7 @@
         if filename == '__init__.py':
             continue
 
-        dottedname = 'grok.ftests.%s.%s' % (name, filename[:-3])
+        dottedname = 'grokcore.site.ftests.%s.%s' % (name, filename[:-3])
         test = doctest.DocTestSuite(
             dottedname, setUp=setUp, tearDown=tearDown,
             checker=checker,
@@ -70,8 +71,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    for name in ['xmlrpc', 'traversal', 'form', 'url', 'security',
-                 'utility', 'catalog', 'site', 'rest', 'viewlet']:
+    for name in ['utility', 'site']:
         suite.addTest(suiteFromPackage(name))
     return suite
 

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -57,39 +57,39 @@
   >>> component.getUtility(IFireplace)
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IFireplace>, '')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IFireplace>, '')
 
   >>> component.getUtility(IClub)
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IClub>, '')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IClub>, '')
 
   >>> component.getUtility(IClub, name='spiky')
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IClub>, 'spiky')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IClub>, 'spiky')
 
   >>> component.getUtility(IMammoth)
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IMammoth>, '')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IMammoth>, '')
 
   >>> component.getUtility(IMammoth, name='tiger')
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IMammoth>, 'tiger')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IMammoth>, 'tiger')
 
   >>> component.getUtility(IPainting, name='blackandwhite')
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IPainting>, 'blackandwhite')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IPainting>, 'blackandwhite')
 
   >>> component.getUtility(IPainting, name='color')
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.local.IPainting>, 'color')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.local.IPainting>, 'color')
 """
-import grok
+import grokcore.site
 from zope import interface
 import persistent
 
@@ -105,37 +105,37 @@
 class IMammoth(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
 
 class Club(object):
-    grok.implements(IClub)
+    interface.implements(IClub)
 
 class SpikyClub(object):
-    grok.implements(IClub, ISpiky)
+    interface.implements(IClub, ISpiky)
 
-class Mammoth(grok.LocalUtility):
-    grok.implements(IMammoth, IClub)
+class Mammoth(grokcore.site.LocalUtility):
+    interface.implements(IMammoth, IClub)
 
-class SabretoothTiger(grok.LocalUtility):
-    grok.implements(IMammoth, IClub)
-    grok.provides(IMammoth)
+class SabretoothTiger(grokcore.site.LocalUtility):
+    interface.implements(IMammoth, IClub)
+    grokcore.site.provides(IMammoth)
 
 class IPainting(persistent.interfaces.IPersistent):
     pass
 
-class CavePainting(grok.LocalUtility):
-    grok.implements(IPainting)
+class CavePainting(grokcore.site.LocalUtility):
+    interface.implements(IPainting)
 
-class ColoredCavePainting(grok.LocalUtility):
-    grok.implements(IPainting)
-    grok.provides(IPainting)
+class ColoredCavePainting(grokcore.site.LocalUtility):
+    interface.implements(IPainting)
+    grokcore.site.provides(IPainting)
 
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace)
-    grok.local_utility(Club)
-    grok.local_utility(SpikyClub, provides=IClub, name='spiky')
-    grok.local_utility(Mammoth, provides=IMammoth)
-    grok.local_utility(SabretoothTiger, name='tiger')
-    grok.local_utility(CavePainting, name='blackandwhite', provides=IPainting)
-    grok.local_utility(ColoredCavePainting, name='color')
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace)
+    grokcore.site.local_utility(Club)
+    grokcore.site.local_utility(SpikyClub, provides=IClub, name='spiky')
+    grokcore.site.local_utility(Mammoth, provides=IMammoth)
+    grokcore.site.local_utility(SabretoothTiger, name='tiger')
+    grokcore.site.local_utility(CavePainting, name='blackandwhite', provides=IPainting)
+    grokcore.site.local_utility(ColoredCavePainting, name='color')

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local_override.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local_override.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/local_override.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -18,22 +18,21 @@
   >>> list(cave.getSiteManager().keys())
   [u'SpikyClub']
 """
-import grok
+import grokcore.site
 from zope import interface
-import persistent
 
 class IClub(interface.Interface):
     pass
 
-class Club(grok.LocalUtility):
-    grok.implements(IClub)
+class Club(grokcore.site.LocalUtility):
+    interface.implements(IClub)
 
-class SpikyClub(grok.LocalUtility):
-    grok.implements(IClub)
+class SpikyClub(grokcore.site.LocalUtility):
+    interface.implements(IClub)
 
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Club)
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Club)
 
 class SpikyCave(Cave):
-    grok.local_utility(SpikyClub)
+    grokcore.site.local_utility(SpikyClub)
 

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/public.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/public.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/public.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -25,17 +25,20 @@
 
 """
 
-import grok
+import grokcore.site
 from zope import interface
+from zope.app.container.btree import BTreeContainer
 
 class IFireplace(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
     
-class Cave(grok.Container, grok.Site):
-    grok.local_utility(Fireplace, public=True, name_in_container='fireplace')
+class Cave(BTreeContainer, grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace, public=True,
+                                name_in_container='fireplace')
 
-class Cave2(grok.Container, grok.Site):
-    grok.local_utility(Fireplace, public=False, name_in_container='fireplace')
+class Cave2(BTreeContainer, grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace, public=False,
+                                name_in_container='fireplace')

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/subclass.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/subclass.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/ftests/utility/subclass.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -38,7 +38,7 @@
   >>> painting = component.getUtility(IPainting)
   Traceback (most recent call last):
     ...
-  ComponentLookupError: (<InterfaceClass grok.ftests.utility.subclass.IPainting>, '')
+  ComponentLookupError: (<InterfaceClass grokcore.site.ftests.utility.subclass.IPainting>, '')
 
 This works various levels of inheritance deep:
 
@@ -64,7 +64,7 @@
   >>> bad_painting = component.getUtility(IPainting, 'bad')
 
 """
-import grok
+import grokcore.site
 from zope import interface
 
 class IFireplace(interface.Interface):
@@ -73,27 +73,27 @@
 class IPainting(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
 
-class Painting(grok.LocalUtility):
-    grok.implements(IPainting)
+class Painting(grokcore.site.LocalUtility):
+    interface.implements(IPainting)
 
-class Cave(grok.Model, grok.Site):
+class Cave(grokcore.site.Site):
     # we use name_in_container here to prevent multiple registrations
     # since storing the utilities multiple times under the same name
     # would raise a DuplicationError
-    grok.local_utility(Fireplace, name_in_container='fireplace')
+    grokcore.site.local_utility(Fireplace, name_in_container='fireplace')
 
 class BigCave(Cave):
     pass
 
 class HollowCave(Cave):
-    grok.local_utility(Painting)
+    grokcore.site.local_utility(Painting)
 
 class VeryHollowCave(HollowCave):
-    grok.local_utility(Painting, name='great')
-    grok.local_utility(Painting, name='bad')
+    grokcore.site.local_utility(Painting, name='great')
+    grokcore.site.local_utility(Painting, name='bad')
 
 # this cave subclasses from Cave twice
 class ScaryCave(VeryHollowCave, Cave):

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/interfaces.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/interfaces.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/interfaces.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -33,7 +33,11 @@
                  The site should in this case be a container.
         name_in_container - the name to use for storing the utility
         """
-
+        
+    def provides(interface):
+        """Explicitly specify with which interface a component will be
+        looked up."""
+    
 class IGrokcoreSiteAPI(IBaseClasses, IDirectives):
     """grokcore.site's public API."""
 

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -23,9 +23,6 @@
 
 import grokcore.site
 
-from grokcore.view.meta.views import (
-    default_view_name, default_fallback_to_name)
-
 class SiteGrokker(martian.ClassGrokker):
     martian.component(grokcore.site.Site)
     martian.priority(500)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.zcml
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.zcml	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/meta.zcml	2008-10-17 18:47:39 UTC (rev 92342)
@@ -2,10 +2,7 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:meta="http://namespaces.zope.org/meta"
     xmlns:grok="http://namespaces.zope.org/grok">
-
-  <include package="z3c.autoinclude" file="meta.zcml" />
-
-  <!-- Load the grokkers -->
+ 
   <include package="grokcore.component" file="meta.zcml" />
   <grok:grok package=".meta" />
 

Added: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/testing.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/testing.py	                        (rev 0)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/testing.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -0,0 +1,24 @@
+##############################################################################
+#
+# Copyright (c) 2007-2008 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.
+#
+##############################################################################
+"""Grok test helpers
+"""
+from zope.configuration.config import ConfigurationMachine
+from grokcore.component import zcml
+
+def grok(module_name):
+    config = ConfigurationMachine()
+    zcml.do_grok('grokcore.component.meta', config)
+    zcml.do_grok('grokcore.site.meta', config)
+    zcml.do_grok(module_name, config)
+    config.execute_actions()

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/test_grok.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/test_grok.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/test_grok.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -29,7 +29,7 @@
         if filename == '__init__.py':
             continue
 
-        dottedname = 'grok.tests.%s.%s' % (name, filename[:-3])
+        dottedname = 'grokcore.site.tests.%s.%s' % (name, filename[:-3])
         test = doctest.DocTestSuite(dottedname,
                                     setUp=setUpZope,
                                     tearDown=cleanUpZope,
@@ -42,11 +42,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    for name in ['adapter', 'error', 'event', 'security', 'catalog',
-                 'zcml', 'utility', 'xmlrpc', 'json', 'container',
-                 'traversal', 'grokker', 'directive',
-                 'baseclass', 'annotation', 'application',
-                 'viewlet', 'testsetup', 'conflict', 'order']:
+    for name in ['utility']:
         suite.addTest(suiteFromPackage(name))
     return suite
 

Deleted: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,21 +0,0 @@
-"""
-Subclasses of grok.GlobalUtility that implement more than one interface must
-specify which interface to use for the registration:
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-    ...
-  GrokError: <class 'grok.tests.utility.implementsmany.Club'> is implementing
-  more than one interface (use grok.provides to specify which one to use).
-"""
-import grok
-from zope import interface
-
-class IClub(interface.Interface):
-    pass
-
-class ISpikyClub(interface.Interface):
-    pass
-
-class Club(grok.GlobalUtility):
-    grok.implements(IClub, ISpikyClub)

Deleted: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany2.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany2.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsmany2.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,24 +0,0 @@
-"""
-Subclasses of grok.GlobalUtility that implement more than one interface must
-specify which interface to use for the registration:
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-    ...
-  GrokError: <class 'grok.tests.utility.implementsmany2.Club'> is implementing
-  more than one interface (use grok.provides to specify which one to use).
-"""
-import grok
-from zope import interface
-
-class IClub(interface.Interface):
-    pass
-
-class ISpikyClub(interface.Interface):
-    pass
-
-class Club(object):
-    grok.implements(IClub, ISpikyClub)
-
-grok.global_utility(Club)
-

Deleted: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,13 +0,0 @@
-"""
-Subclasses of grok.GlobalUtility must implement exactly one interface:
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-    ...
-  GrokError: <class 'grok.tests.utility.implementsnone.Club'> must
-  implement at least one interface (use grok.implements to specify).
-"""
-import grok
-
-class Club(grok.GlobalUtility):
-    pass

Deleted: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone2.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone2.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/implementsnone2.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,15 +0,0 @@
-"""
-Subclasses of grok.GlobalUtility must implement exactly one interface:
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-    ...
-  GrokError: <class 'grok.tests.utility.implementsnone2.Club'> must
-  implement at least one interface (use grok.implements to specify).
-"""
-import grok
-
-class Club(object):
-    pass
-
-grok.global_utility(Club)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -5,10 +5,10 @@
 In this test, the utility implements more than one interface, so it cannot be
 registered as a local utility.
 
-  >>> import grok.tests.utility.local_implementsmany_fixture
+  >>> import grokcore.site.tests.utility.local_implementsmany_fixture
   Traceback (most recent call last):
     ...
-  GrokError: <class 'grok.tests.utility.local_implementsmany_fixture.Fireplace'>
+  GrokError: <class 'grokcore.site.tests.utility.local_implementsmany_fixture.Fireplace'>
   is implementing more than one interface (use grok.provides to specify
   which one to use).
 

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany_fixture.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany_fixture.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsmany_fixture.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,4 +1,4 @@
-import grok
+import grokcore.site
 from zope import interface
 
 class IHome(interface.Interface):
@@ -10,5 +10,5 @@
 class Fireplace(object):
     interface.implements(IHome, IFireplace)
 
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace)
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -5,10 +5,10 @@
 In this test, the utility does not implement any interface, so it cannot be
 registered as a local utility.
 
-  >>> import grok.tests.utility.local_implementsnone_fixture
+  >>> import grokcore.site.tests.utility.local_implementsnone_fixture
   Traceback (most recent call last):
     ...
-  GrokError: <class 'grok.tests.utility.local_implementsnone_fixture.Fireplace'>
+  GrokError: <class 'grokcore.site.tests.utility.local_implementsnone_fixture.Fireplace'>
   must implement at least one interface (use grok.implements to specify).
 
 """

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,14 +1,14 @@
 """
-  >>> import grok.tests.utility.local_implementsnone2_fixture
+  >>> import grokcore.site.tests.utility.local_implementsnone2_fixture
   Traceback (most recent call last):
     ...
   GrokImportError: ("Cannot determine which interface to use for utility
   registration of
-  <class 'grok.tests.utility.local_implementsnone2_fixture.Fireplace'>.
+  <class 'grokcore.site.tests.utility.local_implementsnone2_fixture.Fireplace'>.
   It implements an interface that is a specialization of an interface
   implemented by grok.LocalUtility. Specify the interface by either
   using grok.provides on the utility or passing 'provides' to
   grok.local_utility.",
-  <class 'grok.tests.utility.local_implementsnone2_fixture.Fireplace'>)
+  <class 'grokcore.site.tests.utility.local_implementsnone2_fixture.Fireplace'>)
 
 """

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2_fixture.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2_fixture.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone2_fixture.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,12 +1,12 @@
-import grok
+import grokcore.site
 from zope import interface
 import persistent
 
 class ISpecialPersistent(persistent.interfaces.IPersistent):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(ISpecialPersistent)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(ISpecialPersistent)
 
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace)
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone_fixture.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone_fixture.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/local_implementsnone_fixture.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,8 +1,8 @@
-import grok
+import grokcore.site
 from zope import interface
 
 class Fireplace(object):
     pass
 
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace)
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -2,13 +2,13 @@
 When you try to register multiple classes with the same (interface, name)
 combination multiple times using grok.local_utility, we expect an error:
 
-  >>> import grok.tests.utility.multiple_class_fixture
+  >>> import grokcore.site.tests.utility.multiple_class_fixture
   Traceback (most recent call last):
     ...
   GrokImportError: ("Conflicting local utility registration
-  <class 'grok.tests.utility.multiple_class_fixture.Fireplace2'>.
+  <class 'grokcore.site.tests.utility.multiple_class_fixture.Fireplace2'>.
   Local utilities are registered multiple times for interface
-  <InterfaceClass grok.tests.utility.multiple_class_fixture.IFireplace>
+  <InterfaceClass grokcore.site.tests.utility.multiple_class_fixture.IFireplace>
   and name 'Foo'.",
-  <class 'grok.tests.utility.multiple_class_fixture.Fireplace2'>)
+  <class 'grokcore.site.tests.utility.multiple_class_fixture.Fireplace2'>)
 """

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class_fixture.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class_fixture.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_class_fixture.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,15 +1,15 @@
-import grok
+import grokcore.site
 from zope import interface
 
 class IFireplace(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
 
-class Fireplace2(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace2(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
     
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace, name='Foo')
-    grok.local_utility(Fireplace2, name='Foo')
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace, name='Foo')
+    grokcore.site.local_utility(Fireplace2, name='Foo')

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -2,13 +2,13 @@
 When you call the grok.local_utility directive multiple times specifying
 the same (interface, name) combination, we expect an error:
 
-  >>> import grok.tests.utility.multiple_directive_fixture
+  >>> import grokcore.site.tests.utility.multiple_directive_fixture
   Traceback (most recent call last):
     ...
   GrokImportError: ("Conflicting local utility registration
-  <class 'grok.tests.utility.multiple_directive_fixture.Fireplace2'>.
+  <class 'grokcore.site.tests.utility.multiple_directive_fixture.Fireplace2'>.
   Local utilities are registered multiple times for interface
-  <InterfaceClass grok.tests.utility.multiple_directive_fixture.IFireplace>
+  <InterfaceClass grokcore.site.tests.utility.multiple_directive_fixture.IFireplace>
   and name u''.",
-  <class 'grok.tests.utility.multiple_directive_fixture.Fireplace2'>)
+  <class 'grokcore.site.tests.utility.multiple_directive_fixture.Fireplace2'>)
 """

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive_fixture.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive_fixture.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/multiple_directive_fixture.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,15 +1,15 @@
-import grok
+import grokcore.site
 from zope import interface
 
 class IFireplace(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
 
-class Fireplace2(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace2(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
     
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace, provides=IFireplace)
-    grok.local_utility(Fireplace2, provides=IFireplace)
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace, provides=IFireplace)
+    grokcore.site.local_utility(Fireplace2, provides=IFireplace)

Modified: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/publicnoncontainer.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/publicnoncontainer.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/publicnoncontainer.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -2,22 +2,23 @@
 You cannot use local_utility with 'public' set to True if the site class
 isn't a container:
 
-  >>> grok.testing.grok(__name__)
+  >>> grokcore.site.testing.grok(__name__)
   Traceback (most recent call last):
     ...
   GrokError: Cannot set public to True with grok.local_utility as the site
-  (<class 'grok.tests.utility.publicnoncontainer.Cave'>) is not a container.
+  (<class 'grokcore.site.tests.utility.publicnoncontainer.Cave'>) is not a container.
 
 """
+import grokcore.site
 
-import grok
 from zope import interface
 
 class IFireplace(interface.Interface):
     pass
 
-class Fireplace(grok.LocalUtility):
-    grok.implements(IFireplace)
+class Fireplace(grokcore.site.LocalUtility):
+    interface.implements(IFireplace)
     
-class Cave(grok.Model, grok.Site):
-    grok.local_utility(Fireplace, public=True, name_in_container='fireplace')
+class Cave(grokcore.site.Site):
+    grokcore.site.local_utility(Fireplace, public=True,
+                                name_in_container='fireplace')

Deleted: Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/utility.py
===================================================================
--- Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/utility.py	2008-10-17 18:26:55 UTC (rev 92341)
+++ Sandbox/faassen/grokcore.site/trunk/src/grokcore/site/tests/utility/utility.py	2008-10-17 18:47:39 UTC (rev 92342)
@@ -1,199 +0,0 @@
-"""
-Global utilities can be created by subclassing grok.GlobalUtility:
-
-  >>> grok.testing.grok(__name__)
-  >>> from zope import component
-
-  >>> normal_club = component.getUtility(IClub)
-  >>> IClub.providedBy(normal_club)
-  True
-  >>> isinstance(normal_club, NormalClub)
-  True
-
-Named utilities are registered using grok.name:
-
-  >>> huge_club = component.getUtility(IClub, name='huge')
-  >>> IClub.providedBy(huge_club)
-  True
-  >>> isinstance(huge_club, HugeClub)
-  True
-
-A utility can explicitly specify which interface it should be looked up with.
-
-  >>> spiky_club = component.getUtility(IClub, name='spiky')
-  >>> isinstance(spiky_club, SpikyClub)
-  True
-
-  >>> component.getUtility(ISpikyClub, name='spiky')
-  Traceback (most recent call last):
-    ...
-  ComponentLookupError: (<InterfaceClass grok.tests.utility.utility.ISpikyClub>,
-                         'spiky')
-
-If a utility implements more than one interface, it has to specify the one to
-use with 'grok.provides':
-
-  >>> nightclub = component.getUtility(INightClub)
-  >>> INightClub.providedBy(nightclub)
-  True
-  >>> isinstance(nightclub, NightClub)
-  True
-
-You can make the class the utility by providing the grok.direct() directive,
-if you also use interface.classProvides instead of grok.provides.
-This is useful for utilities that do nothing but create instances:
-
-  >>> clubmaker = component.getUtility(IClubMaker, 'maker')
-  >>> IClubMaker.providedBy(clubmaker)
-  True
-  >>> clubmaker is ClubMaker
-  True
-
-Utilities (including classes that do not subclass from grok.GlobalUtility) can
-be (re-)registered using grok.global_utility:
-
-  >>> fireplace = component.getUtility(IFireplace)
-  >>> IFireplace.providedBy(fireplace)
-  True
-  >>> isinstance(fireplace, Fireplace)
-  True
-
-  >>> fireplace = component.getUtility(IFireplace, name='hot')
-  >>> IFireplace.providedBy(fireplace)
-  True
-  >>> isinstance(fireplace, Fireplace)
-  True
-
-  >>> home = component.getUtility(IHome)
-  >>> IHome.providedBy(home)
-  True
-  >>> isinstance(home, Home)
-  True
-
-  >>> night = component.getUtility(INightClub, name='cool')
-  >>> IClub.providedBy(night)
-  True
-  >>> isinstance(night, NightClub)
-  True
-  
-  >>> spiky = component.getUtility(ISpikyClub)
-  >>> ISpikyClub.providedBy(spiky)
-  True
-  >>> isinstance(spiky, NightClub)
-  True
-
-When re-registering a grok.GlobalUtility, the directives grok.name and
-grok.provides on the class will be used, but can be overriden in the
-grok.global_utility directive:
-
-  >>> small = component.getUtility(ISmallClub, name='tiny')
-  >>> ISmallClub.providedBy(small)
-  True
-  >>> isinstance(small, SmallClub)
-  True
-
-  >>> small2 = component.getUtility(ITinyClub, name='tiny')
-  >>> ISmallClub.providedBy(small2)
-  True
-  >>> isinstance(small2, SmallClub)
-  True
-  >>> small is not small2
-  True
-
-  >>> small3 = component.getUtility(ISmallClub, name='small')
-  >>> ISmallClub.providedBy(small3)
-  True
-  >>> isinstance(small3, SmallClub)
-  True
-  >>> small3 is not small2 and small3 is not small
-  True
-
-Normally one registers a utility factory, such as the class, as a
-global utility. It is also possible to register an arbitrary object directly
-as a global utility. You do this by passing a 'direct' argument set to
-'True'. This can be useful if one needs to register functions (such
-as factory functions) that can be looked up as a utility, or if the
-class you want to register as a global utility has an __init__ that
-takes arguments, where you want to do the instantiation yourself.
-Let's look up an instance we registered this way:
-
-  >>> small4 = component.getUtility(ISmallClub, name='smallish')
-  >>> ISmallClub.providedBy(small4)
-  True
-  >>> isinstance(small4, SmallClub)
-  True
-  
-"""
-
-import grok
-from zope import interface
-
-class IClub(interface.Interface):
-    pass
-
-class ISpikyClub(IClub):
-    pass
-
-class ISmallClub(IClub):
-    pass
-
-class ITinyClub(IClub):
-    pass
-
-class INightClub(interface.Interface):
-    pass
-
-class IClubMaker(interface.Interface):
-    pass
-
-class NormalClub(grok.GlobalUtility):
-    grok.implements(IClub)
-
-class HugeClub(grok.GlobalUtility):
-    grok.implements(IClub)
-    grok.name('huge')    
-
-class SpikyClub(grok.GlobalUtility):
-    grok.implements(ISpikyClub)
-    grok.provides(IClub)
-    grok.name('spiky')
-
-class NightClub(grok.GlobalUtility):
-    grok.implements(INightClub, ISpikyClub)
-    grok.provides(INightClub)
-
-class SmallClub(grok.GlobalUtility):
-    grok.implements(ISmallClub, ITinyClub)
-    grok.provides(ISmallClub)
-    grok.name('tiny')
-
-class ClubMaker(grok.GlobalUtility):
-    grok.implements(IClub)
-    interface.classProvides(IClubMaker)
-    grok.direct()
-    grok.name('maker')
-
-class IFireplace(interface.Interface):
-    pass
-
-class IHome(interface.Interface):
-    pass
-
-class Fireplace(object):
-    grok.implements(IFireplace)
-
-class Home(object):
-    grok.implements(IFireplace, IHome)
-
-grok.global_utility(Fireplace)
-grok.global_utility(Fireplace, name='hot')
-grok.global_utility(Home, provides=IHome)
-
-grok.global_utility(NightClub, name='cool')
-grok.global_utility(NightClub, provides=ISpikyClub)
-
-grok.global_utility(SmallClub, provides=ITinyClub)
-grok.global_utility(SmallClub, name='small')
-
-grok.global_utility(SmallClub(), name='smallish',
-                    direct=True)



More information about the Checkins mailing list