[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