[Checkins] SVN: grokcore.site/trunk/src/grokcore/site/ Add 'hooks' to let a Zope 2 implementation work.

Sylvain Viollon sylvain at infrae.com
Wed Jun 10 03:36:18 EDT 2009


Log message for revision 100780:
  Add 'hooks' to let a Zope 2 implementation work.
  
  

Changed:
  U   grokcore.site/trunk/src/grokcore/site/components.py
  U   grokcore.site/trunk/src/grokcore/site/configure.zcml
  U   grokcore.site/trunk/src/grokcore/site/interfaces.py
  U   grokcore.site/trunk/src/grokcore/site/meta.py

-=-
Modified: grokcore.site/trunk/src/grokcore/site/components.py
===================================================================
--- grokcore.site/trunk/src/grokcore/site/components.py	2009-06-10 07:17:39 UTC (rev 100779)
+++ grokcore.site/trunk/src/grokcore/site/components.py	2009-06-10 07:36:18 UTC (rev 100780)
@@ -23,7 +23,15 @@
 from zope.app.container.contained import Contained
 
 
-class Site(SiteManagerContainer):
+class BaseSite(object):
+    """Mixin to grok sites in Grok applications.
+
+    It's used to let different implementation of sites to exists, and
+    still being grokked correctly.
+    """
+
+
+class Site(BaseSite, SiteManagerContainer):
     """Mixin for creating sites in Grok applications.
 
     When an application `grok.Model` or `grok.Container` also inherits

Modified: grokcore.site/trunk/src/grokcore/site/configure.zcml
===================================================================
--- grokcore.site/trunk/src/grokcore/site/configure.zcml	2009-06-10 07:17:39 UTC (rev 100779)
+++ grokcore.site/trunk/src/grokcore/site/configure.zcml	2009-06-10 07:36:18 UTC (rev 100780)
@@ -6,5 +6,6 @@
   <include package="." file="meta.zcml" />
 
   <grok:grok package=".subscriber" />
+  <utility component=".meta.setupUtility" />
 
 </configure>

Modified: grokcore.site/trunk/src/grokcore/site/interfaces.py
===================================================================
--- grokcore.site/trunk/src/grokcore/site/interfaces.py	2009-06-10 07:17:39 UTC (rev 100779)
+++ grokcore.site/trunk/src/grokcore/site/interfaces.py	2009-06-10 07:36:18 UTC (rev 100780)
@@ -15,6 +15,17 @@
 from zope.interface import Interface, Attribute
 
 
+class IUtilityInstaller(Interface):
+    """This install an utility in a site. Let you have different
+    'installation' method if you want (one for Zope2 / Zope3).
+    """
+
+    def __call__(site, utility, provides, name=u'',
+                 name_in_container=None, public=False, setup=None):
+        """Setup an utility.
+        """
+
+
 class IBaseClasses(Interface):
     Site = Attribute("Mixin class for sites.")
     LocalUtility = Attribute("Base class for local utilities.")

Modified: grokcore.site/trunk/src/grokcore/site/meta.py
===================================================================
--- grokcore.site/trunk/src/grokcore/site/meta.py	2009-06-10 07:17:39 UTC (rev 100779)
+++ grokcore.site/trunk/src/grokcore/site/meta.py	2009-06-10 07:36:18 UTC (rev 100780)
@@ -20,11 +20,13 @@
 import martian
 from martian.error import GrokError
 
+import grokcore.component
 import grokcore.site
+import grokcore.site.components
+import grokcore.site.interfaces
 
-
 class SiteGrokker(martian.ClassGrokker):
-    martian.component(grokcore.site.Site)
+    martian.component(grokcore.site.components.BaseSite)
     martian.priority(500)
     martian.directive(grokcore.site.local_utility, name='infos')
 
@@ -61,6 +63,7 @@
     if installed:
         return
 
+    setupUtility = component.getUtility(grokcore.site.interfaces.IUtilityInstaller)
     for info in getattr(site.__class__, '__grok_utilities_to_install__', []):
         setupUtility(site, info.factory(), info.provides, name=info.name,
                      name_in_container=info.name_in_container,
@@ -71,6 +74,7 @@
     site.__grok_utilities_installed__ = True
 
 
+ at grokcore.component.provider(grokcore.site.interfaces.IUtilityInstaller)
 def setupUtility(site, utility, provides, name=u'',
                  name_in_container=None, public=False, setup=None):
     """Set up a utility in a site.



More information about the Checkins mailing list