[Checkins] SVN: five.grok/trunk/ Re-implement local site using five.localsitemanager (we have acquisition enabled utilities).
Sylvain Viollon
sylvain at infrae.com
Wed Jun 10 03:40:26 EDT 2009
Log message for revision 100781:
Re-implement local site using five.localsitemanager (we have acquisition enabled utilities).
Changed:
U five.grok/trunk/buildout.cfg
U five.grok/trunk/setup.py
U five.grok/trunk/src/five/grok/__init__.py
U five.grok/trunk/src/five/grok/components.py
U five.grok/trunk/src/five/grok/configure.zcml
U five.grok/trunk/src/five/grok/ftests/site/local_site.py
U five.grok/trunk/src/five/grok/meta.py
A five.grok/trunk/src/five/grok/subscribers.py
-=-
Modified: five.grok/trunk/buildout.cfg
===================================================================
--- five.grok/trunk/buildout.cfg 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/buildout.cfg 2009-06-10 07:40:26 UTC (rev 100781)
@@ -28,9 +28,10 @@
grokcore.security = 1.0
grokcore.view = 1.7
grokcore.viewlet = 1.0
+five.localsitemanager = 3.4
martian = 0.11
zope.app.publisher = 3.5.1
-zope.component = 3.5.1
+zope.component = 3.4
zope.i18n = 3.6.0
zope.interface = 3.5.0
zope.testing = 3.7.1
Modified: five.grok/trunk/setup.py
===================================================================
--- five.grok/trunk/setup.py 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/setup.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -29,6 +29,7 @@
install_requires=[
'setuptools',
'martian',
+ 'five.localsitemanager < 2.0dev',
'grokcore.component',
'grokcore.formlib',
'grokcore.view >= 1.2',
Modified: five.grok/trunk/src/five/grok/__init__.py
===================================================================
--- five.grok/trunk/src/five/grok/__init__.py 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/src/five/grok/__init__.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -19,7 +19,7 @@
from grokcore.viewlet import *
from grokcore.formlib import *
-from five.grok.components import Model, Container
+from five.grok.components import Model, Container, Site, LocalUtility
from five.grok.components import View, Form, AddForm
from five.grok.components import EditForm, DisplayForm
from five.grok.components import ViewletManager, Viewlet
Modified: five.grok/trunk/src/five/grok/components.py
===================================================================
--- five.grok/trunk/src/five/grok/components.py 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/src/five/grok/components.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -20,6 +20,7 @@
from zope.annotation.interfaces import IAttributeAnnotatable
from zope.app.pagetemplate.viewpagetemplatefile import ViewMapper
+from zope.app.component.interfaces import IPossibleSite
from zope import interface, component
from grokcore.component.interfaces import IContext
@@ -29,6 +30,7 @@
from grokcore.view.components import PageTemplate
from grokcore.viewlet.components import Viewlet as BaseViewlet
from grokcore.viewlet.components import ViewletManager as BaseViewletManager
+from grokcore.site.components import BaseSite
import grokcore.view
import grokcore.security
@@ -55,6 +57,14 @@
interface.implements(IAttributeAnnotatable, IContext)
+class Site(BaseSite):
+ interface.implements(IAttributeAnnotatable, IContext, IPossibleSite)
+
+
+class LocalUtility(SimpleItem):
+ pass
+
+
class View(grokcore.view.View, Acquisition.Explicit):
def __init__(self, *args):
Modified: five.grok/trunk/src/five/grok/configure.zcml
===================================================================
--- five.grok/trunk/src/five/grok/configure.zcml 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/src/five/grok/configure.zcml 2009-06-10 07:40:26 UTC (rev 100781)
@@ -2,26 +2,23 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:zcml="http://namespaces.zope.org/zcml"
+ xmlns:grok="http://namespaces.zope.org/grok"
i18n_domain="five.grok">
<include package="five.grok" file="meta.zcml" />
- <include package="grokcore.site" />
+ <include package="five.localsitemanager" />
<include package="grokcore.view" />
<include package="grokcore.viewlet" />
+ <grok:grok package=".subscribers" />
+ <utility component=".meta.setupUtility" />
+
<browser:defaultView
for="grokcore.component.interfaces.IContext"
name="index"
/>
- <!-- ZCML of zope.app.container to add local utility to local site -->
- <adapter
- provides="zope.app.container.interfaces.INameChooser"
- for="zope.app.container.interfaces.IWriteContainer"
- factory="zope.app.container.contained.NameChooser"
- />
-
<permission
id="zope.View"
title="View"
Modified: five.grok/trunk/src/five/grok/ftests/site/local_site.py
===================================================================
--- five.grok/trunk/src/five/grok/ftests/site/local_site.py 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/src/five/grok/ftests/site/local_site.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -12,10 +12,15 @@
>>> from zope.app.component.site import setSite
>>> setSite(universe.earth)
+ >>> universe.earth.getSiteManager()
+ <PersistentComponents ...>
+
>>> from zope import component
>>> manager = component.getUtility(IEnergyManager)
>>> manager
- <five.grok.ftests.site.local_site.EnergyManager object at ...>
+ <EnergyManager at ...>
+ >>> manager.aq_parent
+ <World at ...>
>>> verifyObject(IEnergyManager, manager)
True
Modified: five.grok/trunk/src/five/grok/meta.py
===================================================================
--- five.grok/trunk/src/five/grok/meta.py 2009-06-10 07:36:18 UTC (rev 100780)
+++ five.grok/trunk/src/five/grok/meta.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -17,8 +17,10 @@
import grokcore.security
import grokcore.view
import grokcore.component
+import grokcore.site.interfaces
from zope import interface, component
+from zope.app.container.interfaces import INameChooser
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from five.grok import components, formlib
from grokcore.view.meta.directoryresource import _get_resource_path
@@ -110,10 +112,10 @@
if not module_info.isPackage():
return False
resource_path = _get_resource_path(module_info, 'static')
-
+
if not os.path.exists(resource_path):
return False
-
+
name = module_info.dotted_name
layer = IDefaultBrowserLayer
return _register_resource(config, resource_path, name, layer)
@@ -148,3 +150,27 @@
)
return 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 in Zope2. It's different than Zope3,
+ because before Zope 2.12, setting up an object using [] doesn't
+ work. See the original implementation for more details.
+ """
+ site_manager = site.getSiteManager()
+
+ if not public:
+ container = site_manager
+ else:
+ container = site
+
+ if name_in_container is None:
+ name_in_container = INameChooser(container).chooseName(
+ utility.__class__.__name__, utility)
+ container._setObject(name_in_container, utility)
+
+ if setup is not None:
+ setup(utility)
+
+ site_manager.registerUtility(utility, provided=provides, name=name)
Added: five.grok/trunk/src/five/grok/subscribers.py
===================================================================
--- five.grok/trunk/src/five/grok/subscribers.py (rev 0)
+++ five.grok/trunk/src/five/grok/subscribers.py 2009-06-10 07:40:26 UTC (rev 100781)
@@ -0,0 +1,31 @@
+##############################################################################
+#
+# Copyright (c) 2006-2009 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.
+#
+##############################################################################
+
+import grokcore.component
+from zope.app.container.interfaces import IObjectAddedEvent
+from five.localsitemanager import make_objectmanager_site
+
+from five.grok.components import Site
+
+ at grokcore.component.subscribe(Site, IObjectAddedEvent)
+def addSiteHandler(site, event):
+ """Add a local site manager to a Grok site object upon its creation.
+
+ Grok registers this function so that it gets called each time a
+ `grok.Site` instance is added to a container. It creates a local
+ site manager and installs it on the newly created site.
+
+ """
+ make_objectmanager_site(site)
+
Property changes on: five.grok/trunk/src/five/grok/subscribers.py
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
More information about the Checkins
mailing list