[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