[Checkins] SVN: zope.site/trunk/src/zope/site/ move the site management from zope.app.folder to zope.site.folder
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Fri Jan 30 06:22:02 EST 2009
Log message for revision 95543:
move the site management from zope.app.folder to zope.site.folder
Changed:
U zope.site/trunk/src/zope/site/configure.zcml
A zope.site/trunk/src/zope/site/folder.py
U zope.site/trunk/src/zope/site/interfaces.py
A zope.site/trunk/src/zope/site/tests/test_folder.py
-=-
Modified: zope.site/trunk/src/zope/site/configure.zcml
===================================================================
--- zope.site/trunk/src/zope/site/configure.zcml 2009-01-30 10:52:22 UTC (rev 95542)
+++ zope.site/trunk/src/zope/site/configure.zcml 2009-01-30 11:22:02 UTC (rev 95543)
@@ -67,5 +67,33 @@
handler=".site.changeSiteConfigurationAfterMove"
/>
+ <class class=".folder.Folder">
+ <factory
+ id="zope.app.content.Folder"
+ title="Folder"
+ description="Minimal folder"
+ />
+ <allow
+ attributes="getSiteManager"
+ />
+ <require
+ permission="zope.ManageServices"
+ attributes="setSiteManager"
+ />
+ <require
+ permission="zope.View"
+ interface="zope.container.interfaces.IReadContainer"
+ />
+ <require
+ permission="zope.ManageContent"
+ interface="zope.container.interfaces.IWriteContainer"
+ />
+ </class>
+ <adapter
+ provides="zope.location.interfaces.ISublocations"
+ for=".interfaces.IFolder"
+ factory=".folder.FolderSublocations"
+ />
+
</configure>
Added: zope.site/trunk/src/zope/site/folder.py
===================================================================
--- zope.site/trunk/src/zope/site/folder.py (rev 0)
+++ zope.site/trunk/src/zope/site/folder.py 2009-01-30 11:22:02 UTC (rev 95543)
@@ -0,0 +1,60 @@
+from zope.interface import implements
+
+from zope.site.interfaces import IFolder, IRootFolder
+from zope.site.site import SiteManagerContainer
+from zope.location.interfaces import ISite
+
+from zope.container.folder import Folder
+
+class Folder(Folder, SiteManagerContainer):
+
+ implements(IFolder)
+
+def rootFolder():
+ f = Folder()
+ directlyProvides(f, IRootFolder)
+ return f
+
+class FolderSublocations(object):
+ """Get the sublocations of a folder
+
+ The subobjects of a folder include it's contents and it's site manager if
+ it is a site.
+
+ >>> from zope.container.contained import Contained
+ >>> folder = Folder()
+ >>> folder['ob1'] = Contained()
+ >>> folder['ob2'] = Contained()
+ >>> folder['ob3'] = Contained()
+ >>> subs = list(FolderSublocations(folder).sublocations())
+ >>> subs.remove(folder['ob1'])
+ >>> subs.remove(folder['ob2'])
+ >>> subs.remove(folder['ob3'])
+ >>> subs
+ []
+
+ >>> sm = Contained()
+ >>> from zope.interface import directlyProvides
+ >>> from zope.component.interfaces import IComponentLookup
+ >>> directlyProvides(sm, IComponentLookup)
+ >>> folder.setSiteManager(sm)
+ >>> directlyProvides(folder, ISite)
+ >>> subs = list(FolderSublocations(folder).sublocations())
+ >>> subs.remove(folder['ob1'])
+ >>> subs.remove(folder['ob2'])
+ >>> subs.remove(folder['ob3'])
+ >>> subs.remove(sm)
+ >>> subs
+ []
+ """
+
+ def __init__(self, folder):
+ self.folder = folder
+
+ def sublocations(self):
+ folder = self.folder
+ for key in folder:
+ yield folder[key]
+
+ if ISite.providedBy(folder):
+ yield folder.getSiteManager()
Modified: zope.site/trunk/src/zope/site/interfaces.py
===================================================================
--- zope.site/trunk/src/zope/site/interfaces.py 2009-01-30 10:52:22 UTC (rev 95542)
+++ zope.site/trunk/src/zope/site/interfaces.py 2009-01-30 11:22:02 UTC (rev 95543)
@@ -19,6 +19,11 @@
import zope.interface
import zope.component.interfaces
import zope.container.interfaces
+
+from zope.location.interfaces import IPossibleSite
+from zope.traversing.interfaces import IContainmentRoot
+from zope.annotation.interfaces import IAttributeAnnotatable
+
class INewLocalSite(zope.interface.Interface):
"""Event: a local site was created
@@ -75,3 +80,9 @@
# just use regular folders, which is probably the beter choice.
# zope.container.constraints.containers(ILocalSiteManager)
+class IFolder(zope.container.interfaces.IContainer, IPossibleSite,
+ IAttributeAnnotatable):
+ """The standard Zope Folder object interface."""
+
+class IRootFolder(IFolder, IContainmentRoot):
+ """The standard Zope root Folder object interface."""
Added: zope.site/trunk/src/zope/site/tests/test_folder.py
===================================================================
--- zope.site/trunk/src/zope/site/tests/test_folder.py (rev 0)
+++ zope.site/trunk/src/zope/site/tests/test_folder.py 2009-01-30 11:22:02 UTC (rev 95543)
@@ -0,0 +1,22 @@
+from unittest import TestSuite, makeSuite
+
+from zope.testing.doctestunit import DocTestSuite
+from zope.testing import doctest
+
+from zope.site.folder import Folder
+from zope.site.tests.test_site import BaseTestSiteManagerContainer
+
+
+class FolderTest(BaseTestSiteManagerContainer):
+
+ def makeTestObject(self):
+ return Folder()
+
+def test_suite():
+ from zope.app.testing.placelesssetup import setUp, tearDown
+ flags = doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE
+ return TestSuite((
+ makeSuite(FolderTest),
+ DocTestSuite('zope.site.folder',
+ setUp=setUp, tearDown=tearDown),
+ ))
More information about the Checkins
mailing list