[z3-checkins] r18259 - in z3/Five/branch/castle-local-sitemanager:
. testing tests
regebro at codespeak.net
regebro at codespeak.net
Fri Oct 7 14:51:17 CEST 2005
Author: regebro
Date: Fri Oct 7 14:51:11 2005
New Revision: 18259
Modified:
z3/Five/branch/castle-local-sitemanager/fiveconfigure.py
z3/Five/branch/castle-local-sitemanager/fivedirectives.py
z3/Five/branch/castle-local-sitemanager/interfaces.py
z3/Five/branch/castle-local-sitemanager/localsite.py
z3/Five/branch/castle-local-sitemanager/localsite.zcml
z3/Five/branch/castle-local-sitemanager/meta.zcml
z3/Five/branch/castle-local-sitemanager/testing/localsite.py
z3/Five/branch/castle-local-sitemanager/tests/test_localservice.py
Log:
The tests are running (but I don't exactly expect this to be useful yet).
Modified: z3/Five/branch/castle-local-sitemanager/fiveconfigure.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/fiveconfigure.py (original)
+++ z3/Five/branch/castle-local-sitemanager/fiveconfigure.py Fri Oct 7 14:51:11 2005
@@ -277,21 +277,16 @@
del addCleanUp
from zope.interface.interface import InterfaceClass
-from zope.app.site.interfaces import IPossibleSite
+from zope.app.site.interfaces import IPossibleSite, ISite
from zope.app.component.metaconfigure import adapter
-from interfaces import IUtilityProvider
-from localsite import FiveSite
+from zope.app.utility.interfaces import ILocalUtilityService
+from localsite import FiveSite, SimpleLocalUtilityService
-def classSiteHook(class_):
- if hasattr(class_, '__five_possible_site__'):
- if (hasattr(class_, 'getSiteManager') and
- isFiveMethod(class_.getSiteManager)):
- return
+def classSiteHook(class_, site_class):
setattr(class_, 'getSiteManager',
- FiveSite.getSiteManager.im_func)
+ site_class.getSiteManager.im_func)
setattr(class_, 'setSiteManager',
- FiveSite.setSiteManager.im_func)
- setattr(class_, '__five_possible_site__', True)
+ site_class.setSiteManager.im_func)
count = 0
def next():
@@ -299,25 +294,39 @@
count += 1
return count
-def installSiteHook(_context, class_, utility_provider):
- _context.action(
- discriminator = (class_,),
- callable = classSiteHook,
- args=(class_,)
- )
- _context.action(
- discriminator = (class_, IPossibleSite),
- callable = classImplements,
- args=(class_, IPossibleSite)
- )
- if not IUtilityProvider.implementedBy(utility_provider):
- raise ConfigurationError('Global object does not implement '
- 'IUtilityProvider: %s' % utility_provider)
+def installSiteHook(_context, class_, site_class=None, utility_service=None):
+ if site_class is None:
+ if not IPossibleSite.implementedBy(class_):
+ # This is not a possible site, we need to monkey-patch it so that
+ # it is.
+ site_class = FiveSite
+ else:
+ if not IPossibleSite.implementedBy(site_class):
+ raise ConfigurationError('Site class does not implement '
+ 'IPossibleClass: %s' % site_class)
+ if site_class is not None:
+ _context.action(
+ discriminator = (class_,),
+ callable = classSiteHook,
+ args=(class_, site_class)
+ )
+ _context.action(
+ discriminator = (class_, ISite),
+ callable = classImplements,
+ args=(class_, ISite)
+ )
+ if utility_service is None:
+ utility_service = SimpleLocalUtilityService
+ else:
+ if not ILocalUtilityService.implementedBy(utility_service):
+ raise ConfigurationError('utility_service does not implement '
+ 'ILocalUtilityService: %s' % utility_service)
+
# Generate a marker interface that should be unique, so that
- # we can register the utility provider only for this class.
- iface = InterfaceClass('I%s' % next())
- adapter(_context, factory=(utility_provider,),
- provides=IUtilityProvider,
+ # we can register the utility service only for this class.
+ iface = InterfaceClass('IFiveSite%s' % next())
+ adapter(_context, factory=(utility_service,),
+ provides=ILocalUtilityService,
for_=(iface,))
_context.action(
discriminator = (class_, 'UtilityMarker'),
Modified: z3/Five/branch/castle-local-sitemanager/fivedirectives.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/fivedirectives.py (original)
+++ z3/Five/branch/castle-local-sitemanager/fivedirectives.py Fri Oct 7 14:51:11 2005
@@ -105,16 +105,18 @@
required=True
)
-class IFiveLocalSite(Interface):
- """Make instances of class hookable for Local Site.
+class ISiteDirective(Interface):
+ """Make instances of class hookable for Site.
- Actual implementation of ISite is delegated to a IFiveSite adapter.
+ site_class is an implementation of ISite, which will have it's methods
+ monkey_patched into the the class. If not given a default implementation
+ will be used.
"""
class_ = GlobalObject(
title=u"Class",
required=True
)
- utility_provider = GlobalObject(
- title=u"Utility Provider",
- required=True
+ site_class = GlobalObject(
+ title=u"Site Class",
+ required=False
)
Modified: z3/Five/branch/castle-local-sitemanager/interfaces.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/interfaces.py (original)
+++ z3/Five/branch/castle-local-sitemanager/interfaces.py Fri Oct 7 14:51:11 2005
@@ -39,17 +39,6 @@
"""Five specialization of ISite
"""
-class IUtilityProvider(Interface):
- """Lookup utilities for a given context
- """
-
- def queryUtility(interface, name='', default=None):
- """ See IUtilityService interface
- """
-
- def getUtilitiesFor(interface):
- """ See IUtilityService interface
- """
#
# BBB: Zope core interfaces
#
Modified: z3/Five/branch/castle-local-sitemanager/localsite.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/localsite.py (original)
+++ z3/Five/branch/castle-local-sitemanager/localsite.py Fri Oct 7 14:51:11 2005
@@ -15,6 +15,7 @@
from zope.interface import implements
from zope.component import getGlobalServices
from zope.component.interfaces import IServiceService, IUtilityService
+from zope.app.utility.interfaces import ILocalUtilityService
from zope.component.exceptions import ComponentLookupError
from zope.component.servicenames import Utilities
from zope.app.site.interfaces import ISite
@@ -26,24 +27,9 @@
from ExtensionClass import Base
from Acquisition import aq_base, aq_inner, aq_parent
from Products.SiteAccess.AccessRule import AccessRule
-from Products.Five.interfaces import IUtilityProvider
from ZPublisher.BeforeTraverse import registerBeforeTraverse
from ZPublisher.BeforeTraverse import unregisterBeforeTraverse
-class FiveSite:
-
- def getSiteManager(self):
- adapted = IFiveSite(self, None)
- if adapted is None:
- return None
- return adapted.getSiteManager()
-
- def setSiteManager(self, sm):
- adapted = IFiveSite(self, None)
- if adapted is None:
- return None
- return adapted.setSiteManager(sm)
-
def serviceServiceAdapter(ob):
"""An adapter * -> IServiceService.
@@ -122,7 +108,7 @@
return getGlobalServices().getService(name)
class SimpleLocalUtilityService:
- implements(IUtilityService)
+ implements(ILocalUtilityService)
def __init__(self, context):
self.context = context
@@ -138,23 +124,32 @@
def queryUtility(self, interface, name='', default=None):
"""See IUtilityService interface
"""
- return IUtilityProvider(self.context).queryUtility(interface,
- name, default)
+ utilities = getattr(self.context, 'utilities')
+ utility = utilities._getOb(name, None)
+ if utility is None:
+ return default
+ if not interface.providedBy(utility):
+ return default
+ return utility
def getUtilitiesFor(self, interface):
- return IUtilityProvider(self.context).getUtilitiesFor(interface)
+ utilities = getattr(self.context, 'utilities')
+ for utility in utilities.objectValues():
+ if interface.providedBy(utility):
+ yield utility
def getAllUtilitiesRegisteredFor(self, interface):
return ()
-class FiveSiteAdapter:
- implements(IFiveSite)
+
+class FiveSite:
+ implements(IPossibleSite)
def __init__(self, context):
self.context = context
def getSiteManager(self):
- return LocalService(self.context)
+ return LocalService(self)
def setSiteManager(self, sm):
return
Modified: z3/Five/branch/castle-local-sitemanager/localsite.zcml
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/localsite.zcml (original)
+++ z3/Five/branch/castle-local-sitemanager/localsite.zcml Fri Oct 7 14:51:11 2005
@@ -20,12 +20,6 @@
for="zope.interface.Interface"
/>
- <adapter
- for="*"
- provides="Products.Five.interfaces.IFiveSite"
- factory=".localsite.FiveSiteAdapter"
- />
-
<subscriber
factory="zope.app.component.localservice.threadSiteSubscriber"
for="zope.app.publication.interfaces.IBeforeTraverseEvent"
Modified: z3/Five/branch/castle-local-sitemanager/meta.zcml
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/meta.zcml (original)
+++ z3/Five/branch/castle-local-sitemanager/meta.zcml Fri Oct 7 14:51:11 2005
@@ -164,7 +164,7 @@
<meta:directive
name="localsite"
- schema=".fivedirectives.IFiveLocalSite"
+ schema=".fivedirectives.ISiteDirective"
handler=".fiveconfigure.installSiteHook"
/>
Modified: z3/Five/branch/castle-local-sitemanager/testing/localsite.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/testing/localsite.py (original)
+++ z3/Five/branch/castle-local-sitemanager/testing/localsite.py Fri Oct 7 14:51:11 2005
@@ -2,13 +2,13 @@
from zope.component.exceptions import ComponentLookupError
from zope.component.interfaces import IUtilityService
from zope.component.servicenames import Utilities
+from zope.app.utility.interfaces import ILocalUtilityService
from OFS.Folder import Folder
-from Products.Five.interfaces import IUtilityProvider
from Products.Five.testing.interfaces import IDummySite
-class UtilityProvider:
- implements(IUtilityProvider)
+class LocalUtilityService:
+ implements(ILocalUtilityService)
def __init__(self, context):
self.context = context
Modified: z3/Five/branch/castle-local-sitemanager/tests/test_localservice.py
==============================================================================
--- z3/Five/branch/castle-local-sitemanager/tests/test_localservice.py (original)
+++ z3/Five/branch/castle-local-sitemanager/tests/test_localservice.py Fri Oct 7 14:51:11 2005
@@ -107,8 +107,7 @@
zcml_text = """<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five">
- <five:localsite class="Products.Five.testing.localsite.DummySite"
- utility_provider="Products.Five.testing.localsite.UtilityProvider" />
+ <five:localsite class="Products.Five.testing.localsite.DummySite" />
</configure>"""
zcml.load_string(zcml_text)
@@ -282,8 +281,7 @@
zcml.load_config("meta.zcml", Products.Five)
zcml.load_config("localsite.zcml", Products.Five)
zcml_text = """<configure xmlns:five="http://namespaces.zope.org/five">
- <five:localsite class="Products.Five.testing.localsite.DummySite"
- utility_provider="Products.Five.testing.localsite.UtilityProvider" />
+ <five:localsite class="Products.Five.testing.localsite.DummySite" />
</configure>"""
zcml.load_string(zcml_text)
@@ -320,8 +318,7 @@
zcml.load_config("meta.zcml", Products.Five)
zcml.load_config("localsite.zcml", Products.Five)
zcml_text = """<configure xmlns:five="http://namespaces.zope.org/five">
- <five:localsite class="Products.Five.testing.localsite.DummySite"
- utility_provider="Products.Five.testing.localsite.UtilityProvider" />
+ <five:localsite class="Products.Five.testing.localsite.DummySite" />
</configure>"""
zcml.load_string(zcml_text)
manage_addDummySite(self.folder, 'site')
More information about the z3-checkins
mailing list