[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