[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