[z3-checkins] r18716 - in z3/Five/branch/regebro-sitemanager: site
tests
regebro at codespeak.net
regebro at codespeak.net
Mon Oct 17 14:10:41 CEST 2005
Author: regebro
Date: Mon Oct 17 14:10:38 2005
New Revision: 18716
Added:
z3/Five/branch/regebro-sitemanager/site/localsite.pt (contents, props changed)
z3/Five/branch/regebro-sitemanager/site/meta.zcml (contents, props changed)
Removed:
z3/Five/branch/regebro-sitemanager/tests/test_localservice.py
Modified:
z3/Five/branch/regebro-sitemanager/site/configure.zcml
z3/Five/branch/regebro-sitemanager/site/localsite.py
Log:
New and improvet local site support! Now with userinterface!
Modified: z3/Five/branch/regebro-sitemanager/site/configure.zcml
==============================================================================
--- z3/Five/branch/regebro-sitemanager/site/configure.zcml (original)
+++ z3/Five/branch/regebro-sitemanager/site/configure.zcml Mon Oct 17 14:10:38 2005
@@ -33,10 +33,10 @@
<browser:page
for="zope.app.site.interfaces.IPossibleSite"
- name="addServiceManager.html"
+ name="manage_localsite.html"
permission="zope2.Public"
- class=".localsite.MakeSite"
- attribute="makeSite"
+ class=".localsite.LocalSiteView"
+ template="localsite.pt"
/>
</configure>
Added: z3/Five/branch/regebro-sitemanager/site/localsite.pt
==============================================================================
--- (empty file)
+++ z3/Five/branch/regebro-sitemanager/site/localsite.pt Mon Oct 17 14:10:38 2005
@@ -0,0 +1,25 @@
+<tal:tag condition="view/update"/>
+<html metal:use-macro="context/@@standard_macros/view"
+ i18n:domain="zope">
+ <body>
+ <div metal:fill-slot="body">
+
+ <form action="." tal:attributes="action request/URL" method="POST"
+ enctype="multipart/form-data">
+ <div class="row">
+ <div class="controls">
+ <input type="submit" value="Make site" name="UPDATE_MAKESITE"
+ i18n:attributes="value"
+ tal:attributes="disabled view/isSite"/>
+ <input type="submit" value="Unmake site" name="UPDATE_UNMAKESITE"
+ i18n:attributes="value"
+ tal:attributes="disabled not:view/isSite"/>
+
+ </div>
+ </div>
+ </form>
+
+ </div>
+ </body>
+
+</html>
Modified: z3/Five/branch/regebro-sitemanager/site/localsite.py
==============================================================================
--- z3/Five/branch/regebro-sitemanager/site/localsite.py (original)
+++ z3/Five/branch/regebro-sitemanager/site/localsite.py Mon Oct 17 14:10:38 2005
@@ -127,7 +127,9 @@
# Singletons. Only one per interface allowed, so, let's call it
# by the interface.
name = interface.getName()
- utilities = getattr(self.context, 'utilities')
+ utilities = getattr(self.context, 'utilities', None)
+ if utilities is None:
+ return default
utility = utilities._getOb(name, None)
if utility is None:
return default
@@ -191,15 +193,32 @@
from Products.Five.browser import BrowserView
-class MakeSite(BrowserView):
+class LocalSiteView(BrowserView):
"""View for convering a possible site to a site
"""
+
+ def update(self):
+ form = self.request.form
+ if form.has_key('UPDATE_MAKESITE'):
+ self.makeSite()
+ elif form.has_key('UPDATE_UNMAKESITE'):
+ self.unmakeSite()
+ def isSite(self):
+ return ISite.providedBy(self.context)
+
def makeSite(self):
"""Convert a possible site to a site"""
- if ISite.providedBy(self.context):
+ if self.isSite():
raise ValueError('This is already a site')
enableLocalSiteHook(self.context)
return "This object is now a site"
-
\ No newline at end of file
+
+ def unmakeSite(self):
+ """Convert a site to a possblesite"""
+ if not self.isSite():
+ raise ValueError('This is not a site')
+
+ disableLocalSiteHook(self.context)
+ return "This object is no longer a site"
Added: z3/Five/branch/regebro-sitemanager/site/meta.zcml
==============================================================================
--- (empty file)
+++ z3/Five/branch/regebro-sitemanager/site/meta.zcml Mon Oct 17 14:10:38 2005
@@ -0,0 +1,15 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta">
+
+ <meta:directives namespace="http://namespaces.zope.org/five">
+
+ <meta:directive
+ name="localsite"
+ schema=".metadirectives.ILocalSiteDirective"
+ handler=".metaconfigure.installSiteHook"
+ />
+
+ </meta:directives>
+
+</configure>
Deleted: /z3/Five/branch/regebro-sitemanager/tests/test_localservice.py
==============================================================================
--- /z3/Five/branch/regebro-sitemanager/tests/test_localservice.py Mon Oct 17 14:10:38 2005
+++ (empty file)
@@ -1,373 +0,0 @@
-import os, sys
-
-if __name__ == '__main__':
- execfile(os.path.join(sys.path[0], 'framework.py'))
-
-import unittest
-from Testing import ZopeTestCase
-ZopeTestCase.installProduct('Five')
-
-from zope.interface import implements
-from zope.interface import directlyProvides, directlyProvidedBy
-from zope.interface import Interface
-from zope.component.exceptions import ComponentLookupError
-from zope.component.interfaces import IServiceService
-from zope.component.service import serviceManager
-from zope.component.servicenames import Utilities
-from zope.component import getGlobalServices, getServices, getService
-from zope.app.component.hooks import getServices_hook
-from zope.app.component.hooks import setSite, getSite
-from zope.app.site.interfaces import IPossibleSite, ISite, ISiteManager
-from zope.app.traversing.interfaces import IContainmentRoot
-from zope.app.tests.placelesssetup import setUp, tearDown
-
-from Acquisition import Implicit
-from OFS.ObjectManager import ObjectManager
-from OFS.SimpleItem import SimpleItem
-
-import Products.Five
-from Products.Five import zcml
-
-class ServiceManager(Implicit):
- implements(ISiteManager)
-
- def __init__(self):
- self.dummy_service = object()
-
- def getService(self, name):
- if name == 'dummy':
- return self.dummy_service
- raise ComponentLookupError(name)
-
-class Folder(ObjectManager):
- implements(IPossibleSite)
-
- sm = None
-
- def getId(self):
- return self.id
-
- def getSiteManager(self, default=None):
- return self.sm
-
- def setSiteManager(self, sm):
- self.sm = sm
- directlyProvides(self, ISite, directlyProvidedBy(self))
-
-class Package(Implicit):
- pass
-
-class Root(Folder):
- implements(IContainmentRoot, ISite)
- def getSiteManager(self):
- return getGlobalServices()
-
-class ServiceServiceStub(object):
- implements(IServiceService)
-
-def Wrapper(ob, container):
- return ob.__of__(container)
-
-class IDummyUtility(Interface):
- pass
-
-class DummyUtility(SimpleItem):
- implements(IDummyUtility)
-
-class Test(ZopeTestCase.ZopeTestCase):
-
- def afterSetUp(self):
- setUp()
- root = Wrapper(self.folder, Root())
-
- f1 = Wrapper(Folder(), root)
- sm1 = ServiceManager()
- f1.setSiteManager(sm1)
- p1 = Wrapper(Package(), sm1)
-
- f2 = Wrapper(Folder(), f1)
- sm2 = ServiceManager()
- f2.setSiteManager(sm2)
- p2 = Wrapper(Package(), sm2)
-
- sm1.next = serviceManager
- sm2.next = sm1
-
- self.root = root
- self.f1 = f1
- self.f2 = f2
- self.sm1 = sm1
- self.sm2 = sm2
- self.p1 = p1
- self.p2 = p2
- self.unparented_folder = Folder()
- self.unrooted_subfolder = Wrapper(Folder(), self.unparented_folder)
- zcml.load_config("meta.zcml", Products.Five)
- zcml.load_config("localsite.zcml", Products.Five)
- zcml_text = """<configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:five="http://namespaces.zope.org/five">
- <five:localsite class="Products.Five.testing.localsite.DummySite" />
- </configure>"""
- zcml.load_string(zcml_text)
-
- def beforeTearDown(self):
- setSite()
- tearDown()
-
- def test_getServices(self):
- self.assertEqual(getServices_hook(None), serviceManager)
- self.assertEqual(getServices_hook(self.root), serviceManager)
- self.assertEqual(getServices_hook(self.f1), self.sm1)
- self.assertEqual(getServices_hook(self.f2), self.sm2)
- setSite(self.f2)
- self.assertEqual(getServices_hook(None), self.sm2)
-
- def test_queryNextService(self):
- from zope.app.component.localservice import queryNextService
- self.assert_(queryNextService(self.sm2, 'dummy') is
- self.sm1.dummy_service)
- self.assert_(queryNextService(self.p2, 'dummy') is
- self.sm1.dummy_service)
- marker = object()
- self.assert_(queryNextService(self.p1, 'dummy', marker) is marker)
-
- def test_getNextService(self):
- from zope.app.component.localservice import getNextService
- self.assert_(getNextService(self.sm2, 'dummy') is
- self.sm1.dummy_service)
- self.assert_(getNextService(self.p2, 'dummy') is
- self.sm1.dummy_service)
- self.assertRaises(ComponentLookupError,
- getNextService, self.p1, 'dummy')
-
-
- def test_queryNextServices(self):
- from zope.app.component.localservice import queryNextServices
- marker = object()
- self.assert_(queryNextServices(self.root, marker) is marker)
- self.assert_(queryNextServices(self.f1, marker) is marker)
- self.assert_(queryNextServices(self.f2, marker) is marker)
- self.assertEqual(queryNextServices(self.sm1), serviceManager)
- self.assertEqual(queryNextServices(self.sm2), self.sm1)
- self.assertEqual(queryNextServices(self.p1), serviceManager)
- self.assertEqual(queryNextServices(self.p2), self.sm1)
-
- self.assert_(queryNextServices(self.unparented_folder, marker)
- is marker)
- self.assert_(queryNextServices(self.unrooted_subfolder, marker)
- is marker)
-
- def test_getNextServices(self):
- from zope.app.component.localservice import getNextServices
- self.assertRaises(ComponentLookupError,
- getNextServices, self.root)
- self.assertRaises(ComponentLookupError,
- getNextServices, self.f1)
- self.assertRaises(ComponentLookupError,
- getNextServices, self.f2)
- self.assertEqual(getNextServices(self.sm1), serviceManager)
- self.assertEqual(getNextServices(self.sm2), self.sm1)
- self.assertEqual(getNextServices(self.p1), serviceManager)
- self.assertEqual(getNextServices(self.p2), self.sm1)
-
- self.assertRaises(ComponentLookupError,
- getNextServices, self.unparented_folder)
- self.assertRaises(ComponentLookupError,
- getNextServices, self.unrooted_subfolder)
-
-# XXX Maybe we need to test this with RestrictedPython in the context
-# of Zope2? Maybe we just don't care.
-#
-# def test_getNextServices_security(self):
-# from zope.app.component.localservice import getNextServices
-# from zope.security.checker import ProxyFactory, NamesChecker
-# sm = ProxyFactory(self.sm1, NamesChecker(('next',)))
-# # Check that serviceManager is not proxied
-# self.assert_(getNextServices(sm) is serviceManager)
-
- def test_queryLocalServices(self):
- from zope.app.component.localservice import queryLocalServices
- marker = object()
- self.assert_(queryLocalServices(self.root, marker) is marker)
- self.assert_(queryLocalServices(self.f1, marker) is marker)
- self.assert_(queryLocalServices(self.f2, marker) is marker)
- self.assertEqual(queryLocalServices(self.sm1), self.sm1)
- self.assertEqual(queryLocalServices(self.sm2), self.sm2)
- self.assertEqual(queryLocalServices(self.p1), self.sm1)
- self.assertEqual(queryLocalServices(self.p2), self.sm2)
-
- self.assert_(queryLocalServices(self.unparented_folder, marker)
- is marker)
- self.assert_(queryLocalServices(self.unrooted_subfolder, marker)
- is marker)
-
- def test_getLocalServices(self):
- from zope.app.component.localservice import getLocalServices
- self.assertRaises(ComponentLookupError,
- getLocalServices, self.root)
- self.assertRaises(ComponentLookupError,
- getLocalServices, self.f1)
- self.assertRaises(ComponentLookupError,
- getLocalServices, self.f2)
- self.assertEqual(getLocalServices(self.sm1), self.sm1)
- self.assertEqual(getLocalServices(self.sm2), self.sm2)
- self.assertEqual(getLocalServices(self.p1), self.sm1)
- self.assertEqual(getLocalServices(self.p2), self.sm2)
-
- unparented_folder = Folder()
- self.assertRaises(ComponentLookupError,
- getLocalServices, unparented_folder)
- unrooted_subfolder = Wrapper(Folder(), unparented_folder)
- self.assertRaises(ComponentLookupError,
- getLocalServices, unrooted_subfolder)
-
- def test_serviceServiceAdapter(self):
- from Products.Five.localsite import serviceServiceAdapter
-
- # If it is a site, return the service service.
- ss = ServiceServiceStub()
- site = Folder()
- site.setSiteManager(ss)
- self.assertEqual(serviceServiceAdapter(site), ss)
-
- # If it has an acquisition context, "acquire" the site
- # and return the service service
- ob = Folder()
- ob = ob.__of__(site)
- self.assertEqual(serviceServiceAdapter(ob), ss)
- ob2 = Folder()
- ob2 = ob2.__of__(ob)
- self.assertEqual(serviceServiceAdapter(ob2), ss)
-
- # If it does we are unable to find a service service, raise
- # ComponentLookupError
- orphan = Folder()
- self.assertRaises(ComponentLookupError, serviceServiceAdapter, orphan)
-
- def test_setThreadSite_clearThreadSite(self):
- from zope.app.component.localservice import threadSiteSubscriber
- from zope.app.component.localservice import clearSite
- from zope.app.publication.zopepublication import BeforeTraverseEvent
-
- self.assertEqual(getSite(), None)
-
- # A non-site is traversed
- ob = object()
- request = object()
- ev = BeforeTraverseEvent(ob, request)
- threadSiteSubscriber(ev)
-
- self.assertEqual(getSite(), None)
-
- # A site is traversed
- ss = ServiceServiceStub()
- site = Folder()
- site.setSiteManager(ss)
-
- ev = BeforeTraverseEvent(site, request)
- threadSiteSubscriber(ev)
-
- self.assertEqual(getSite(), site)
-
- clearSite()
-
- self.assertEqual(getSite(), None)
-
-class BeforeTraversalTest(ZopeTestCase.FunctionalTestCase):
-
- def afterSetUp(self):
- setUp()
- 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" />
- </configure>"""
- zcml.load_string(zcml_text)
-
- def beforeTearDown(self):
- from zope.app.component.localservice import clearSite
- clearSite()
- tearDown()
-
- def test_before_traversal_event_and_hook(self):
- return
- from Products.Five.localsite import enableLocalSiteHook
- f1 = Folder()
- f1.id = 'f1'
- self.folder._setObject('f1', f1)
- f1 = self.folder._getOb('f1')
- ss = ServiceServiceStub()
- f1.setSiteManager(ss)
- enableLocalSiteHook(f1)
- path = '/'.join(f1.getPhysicalPath())
- response = self.publish(path)
- self.assertEqual(getServices(), ss)
-
- def test_no_before_traversal_event(self):
- path = '/'.join(self.folder.getPhysicalPath())
- response = self.publish(path)
- self.assertEqual(getSite(), None)
-
-class LocalUtilityServiceTest(ZopeTestCase.FunctionalTestCase):
-
- def afterSetUp(self):
- setUp()
- from Products.Five.localsite import enableLocalSiteHook
- from Products.Five.testing.localsite import manage_addDummySite
- 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" />
- </configure>"""
- zcml.load_string(zcml_text)
- manage_addDummySite(self.folder, 'site')
- self.site = self.folder.site
- self.site.manage_addFolder('utilities')
- self.utils = self.site.utilities
- enableLocalSiteHook(self.site)
- self.path = '/'.join(self.site.getPhysicalPath())
- # Traverse to the site so that the local-thread site gets
- # setup correctly.
- self.publish(self.path)
-
- def beforeTearDown(self):
- from zope.app.component.localservice import clearSite
- clearSite()
- tearDown()
-
- def test_getServicesHook(self):
- from Products.Five.localsite import LocalService
- local_sm = getServices(None)
- self.failIf(local_sm is serviceManager)
- self.failUnless(isinstance(local_sm, LocalService))
-
- local_sm = getServices(self.site)
- self.failIf(local_sm is serviceManager)
- self.failUnless(isinstance(local_sm, LocalService))
-
- def test_getUtilityService(self):
- from Products.Five.localsite import SimpleLocalUtilityService
- utils = getService(Utilities)
- self.failUnless(isinstance(utils, SimpleLocalUtilityService))
-
- self.assertRaises(ComponentLookupError, utils.getUtility, IDummyUtility)
-
- self.utils._setObject('dummy', DummyUtility('dummy'))
- dummy = self.utils._getOb('dummy')
- self.assertEquals(utils.getUtility(IDummyUtility, name='dummy'), dummy)
-
- self.assertEquals(list(utils.getUtilitiesFor(IDummyUtility)),
- [('',dummy)])
- self.assertEquals(list(utils.getAllUtilitiesRegisteredFor(
- IDummyUtility)), [dummy])
-
-def test_suite():
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(Test))
- suite.addTest(unittest.makeSuite(BeforeTraversalTest))
- suite.addTest(unittest.makeSuite(LocalUtilityServiceTest))
- return suite
-
-if __name__ == '__main__':
- framework()
More information about the z3-checkins
mailing list