[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