[Checkins] SVN: zope.app.tree/tags/3.5.0/ Tag 3.5.0

Dan Korostelev nadako at gmail.com
Sat Jan 17 11:37:20 EST 2009


Log message for revision 94800:
  Tag 3.5.0

Changed:
  A   zope.app.tree/tags/3.5.0/
  D   zope.app.tree/tags/3.5.0/CHANGES.txt
  A   zope.app.tree/tags/3.5.0/CHANGES.txt
  D   zope.app.tree/tags/3.5.0/buildout.cfg
  A   zope.app.tree/tags/3.5.0/buildout.cfg
  D   zope.app.tree/tags/3.5.0/setup.py
  A   zope.app.tree/tags/3.5.0/setup.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/SETUP.cfg
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py
  A   zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/tree-configure.zcml
  D   zope.app.tree/tags/3.5.0/src/zope/app/tree/version.txt

-=-
Deleted: zope.app.tree/tags/3.5.0/CHANGES.txt
===================================================================
--- zope.app.tree/trunk/CHANGES.txt	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/CHANGES.txt	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,8 +0,0 @@
-=======
-CHANGES
-=======
-
-3.4.0 (2007-10-28)
-------------------
-
-- Initial release independent of the main Zope tree.

Copied: zope.app.tree/tags/3.5.0/CHANGES.txt (from rev 94797, zope.app.tree/trunk/CHANGES.txt)
===================================================================
--- zope.app.tree/tags/3.5.0/CHANGES.txt	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/CHANGES.txt	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,27 @@
+=======
+CHANGES
+=======
+
+3.5.0 (2009-01-17)
+------------------
+
+- Get rid of zope.app.zapi dependency, replacing its uses with
+  direct imports.
+
+- Clean up dependencies, move testing and rotterdam dependencies
+  to extra requires.
+
+- Fix mailing list address to zope-dev at zope.org instead of retired
+  zope3-dev at zope.org. Change `cheeseshop` to `pypi` in the package
+  url.
+
+- Replace __used_for__ in adapters.py with zope.component.adapts
+  calls to make more sense. 
+
+- Remove obsolete zpkg files, zcml include file for mkzopeinstance-based
+  installations, versions.txt that makes no sense now. 
+
+3.4.0 (2007-10-28)
+------------------
+
+- Initial release independent of the main Zope tree.

Deleted: zope.app.tree/tags/3.5.0/buildout.cfg
===================================================================
--- zope.app.tree/trunk/buildout.cfg	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/buildout.cfg	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,7 +0,0 @@
-[buildout]
-develop = .
-parts = test
-
-[test]
-recipe = zc.recipe.testrunner
-eggs = zope.app.tree

Copied: zope.app.tree/tags/3.5.0/buildout.cfg (from rev 94799, zope.app.tree/trunk/buildout.cfg)
===================================================================
--- zope.app.tree/tags/3.5.0/buildout.cfg	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/buildout.cfg	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,7 @@
+[buildout]
+develop = .
+parts = test
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = zope.app.tree [test]

Deleted: zope.app.tree/tags/3.5.0/setup.py
===================================================================
--- zope.app.tree/trunk/setup.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/setup.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,73 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2006 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.
-#
-##############################################################################
-"""Setup for zope.app.tree package
-
-$Id$
-"""
-import os
-from setuptools import setup, find_packages
-
-def read(*rnames):
-    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-
-setup(name = 'zope.app.tree',
-      version = '3.5.0',
-      author='Zope Corporation and Contributors',
-      author_email='zope3-dev at zope.org',
-      description='Static Tree Implementation',
-      long_description=(
-          read('README.txt')
-          + '\n\n' +
-          'Detailed Dcoumentation\n' +
-          '======================\n'
-          + '\n\n' +
-          read('src', 'zope', 'app', 'tree', 'README.txt')
-          + '\n\n' +
-          read('CHANGES.txt')
-          ),
-      keywords = "zope3 tree static zpt",
-      classifiers = [
-          'Development Status :: 5 - Production/Stable',
-          'Environment :: Web Environment',
-          'Intended Audience :: Developers',
-          'License :: OSI Approved :: Zope Public License',
-          'Programming Language :: Python',
-          'Natural Language :: English',
-          'Operating System :: OS Independent',
-          'Topic :: Internet :: WWW/HTTP',
-          'Framework :: Zope3'],
-      url='http://cheeseshop.python.org/pypi/zope.app.tree',
-      license='ZPL 2.1',
-      packages=find_packages('src'),
-      package_dir = {'': 'src'},
-      namespace_packages=['zope', 'zope.app'],
-      install_requires = ['setuptools',
-                          'zope.app.component',
-                          'zope.app.container',
-                          'zope.app.folder',
-                          'zope.app.rotterdam',
-                          'zope.app.skins',
-                          'zope.app.testing',
-                          'zope.component',
-                          'zope.interface',
-                          'zope.location',
-                          'zope.publisher',
-                          'zope.schema',
-                          'zope.security',
-                          'zope.testing',
-                          'zope.traversing',
-                          ],
-      include_package_data = True,
-      zip_safe = False,
-      )

Copied: zope.app.tree/tags/3.5.0/setup.py (from rev 94797, zope.app.tree/trunk/setup.py)
===================================================================
--- zope.app.tree/tags/3.5.0/setup.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/setup.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,70 @@
+##############################################################################
+#
+# Copyright (c) 2006 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.
+#
+##############################################################################
+"""Setup for zope.app.tree package
+
+$Id$
+"""
+import os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+setup(name = 'zope.app.tree',
+      version = '3.5.0',
+      author='Zope Corporation and Contributors',
+      author_email='zope-dev at zope.org',
+      description='Static Tree Implementation',
+      long_description=(
+          read('README.txt')
+          + '\n\n' +
+          'Detailed Dcoumentation\n' +
+          '======================\n'
+          + '\n\n' +
+          read('src', 'zope', 'app', 'tree', 'README.txt')
+          + '\n\n' +
+          read('CHANGES.txt')
+          ),
+      keywords = "zope3 tree static zpt",
+      classifiers = [
+          'Development Status :: 5 - Production/Stable',
+          'Environment :: Web Environment',
+          'Intended Audience :: Developers',
+          'License :: OSI Approved :: Zope Public License',
+          'Programming Language :: Python',
+          'Natural Language :: English',
+          'Operating System :: OS Independent',
+          'Topic :: Internet :: WWW/HTTP',
+          'Framework :: Zope3'],
+      url='http://pypi.python.org/pypi/zope.app.tree',
+      license='ZPL 2.1',
+      packages=find_packages('src'),
+      package_dir = {'': 'src'},
+      namespace_packages=['zope', 'zope.app'],
+      extras_require={'test': ['zope.app.testing'],
+                      'skin': ['zope.app.rotterdam']
+                      },
+      install_requires = ['setuptools',
+                          'zope.app.container',
+                          'zope.component',
+                          'zope.interface',
+                          'zope.location',
+                          'zope.publisher',
+                          'zope.schema',
+                          'zope.security',
+                          'zope.traversing',
+                          ],
+      include_package_data = True,
+      zip_safe = False,
+      )

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/SETUP.cfg
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/SETUP.cfg	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/SETUP.cfg	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,5 +0,0 @@
-# Tell zpkg how to install the ZCML slugs.
-
-<data-files zopeskel/etc/package-includes>
-  tree-*.zcml
-</data-files>

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/adapters.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,147 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-"""Object adapters
-
-This module contains adapters necessary to use common objects with
-statictree. The most prominent ones are those for ILocation and
-IContainer. We also provide adapters for any object, so we don't end
-up with ComponentLookupErrors whenever encounter unknown objects.
-
-$Id$
-"""
-from zope.interface import Interface, implements
-from zope.component.interfaces import ComponentLookupError
-from zope.security import canAccess
-from zope.security.interfaces import Unauthorized
-from zope.location.interfaces import ILocation
-from zope.traversing.api import getParents
-
-from zope.app.container.interfaces import IReadContainer
-from zope.app.component.interfaces import ISite
-
-from zope.app.tree.interfaces import IUniqueId, IChildObjects
-
-class StubUniqueId(object):
-    implements(IUniqueId)
-    __used_for__ = Interface
-
-    def __init__(self, context):
-        self.context = context
-
-    def getId(self):
-        # this does not work for persistent objects
-        return str(id(self.context))
-
-class StubChildObjects(object):
-    implements(IChildObjects)
-    __used_for__ = Interface
-
-    def __init__(self, context):
-        pass
-
-    def hasChildren(self):
-        return False
-
-    def getChildObjects(self):
-        return []
-
-class LocationUniqueId(object):
-    implements(IUniqueId)
-    __used_for__ = ILocation
-
-    def __init__(self, context):
-        self.context = context
-
-    def getId(self):
-        context = self.context
-        if not context.__name__:
-            # always try to be unique
-            return str(id(context))
-        parents = [context.__name__]
-        parents += [parent.__name__ for parent in getParents(context)
-                    if parent.__name__]
-        return '\\'.join(parents)
-
-class ContainerChildObjects(object):
-    implements(IChildObjects)
-    __used_for__ = IReadContainer
-
-    def __init__(self, context):
-        self.context = context
-
-    def hasChildren(self):
-        # make sure we check for access
-        try:
-            lenght = bool(len(self.context))
-            if lenght > 0:
-                return True
-            else:
-                return False
-        except Unauthorized:
-            return False
-
-    def getChildObjects(self):
-        if self.hasChildren():
-            return self.context.values()
-        else:
-            return []
-
-class ContainerSiteChildObjects(ContainerChildObjects):
-    """Adapter for read containers which are sites as well. The site
-    manager will be treated as just another child object.
-    """
-    __used_for__ = ISite
-
-    def hasChildren(self):
-        if super(ContainerSiteChildObjects, self).hasChildren():
-            return True
-        if self._canAccessSiteManager():
-            return True
-        else:
-            return False
-
-    def getChildObjects(self):
-        if self.hasChildren():
-            values = super(ContainerSiteChildObjects, self).getChildObjects()
-            if self._canAccessSiteManager():
-                return [self.context.getSiteManager()] + list(values)
-            else:
-                return values
-        else:
-            return []
-
-    def _canAccessSiteManager(self):
-        try:
-            # the ++etc++ namespace is public this means we get the sitemanager
-            # without permissions. But this does not mean we can access it
-            # Right now we check the __getitem__ method on the sitemamanger
-            # but this means we don't show the ++etc++site link if we have
-            # registred views on the sitemanager which have other permission
-            # then the __getitem__ method form the interface IReadContainer
-            # in the LocalSiteManager.
-            # If this will be a problem in the future, we can add a 
-            # attribute to the SiteManager which we can give individual 
-            # permissions and check it via canAccess.
-            sitemanager = self.context.getSiteManager()
-            authorized = canAccess(sitemanager, '__getitem__')
-            if authorized:
-                return True
-            else:
-                return False
-        except ComponentLookupError:
-            return False
-        except TypeError:
-            # we can't check unproxied objects, but unproxied objects
-            # are public.
-            return True

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/adapters.py)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/adapters.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,147 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+"""Object adapters
+
+This module contains adapters necessary to use common objects with
+statictree. The most prominent ones are those for ILocation and
+IContainer. We also provide adapters for any object, so we don't end
+up with ComponentLookupErrors whenever encounter unknown objects.
+
+$Id$
+"""
+from zope.interface import Interface, implements
+from zope.component import adapts
+from zope.component.interfaces import ComponentLookupError
+from zope.security import canAccess
+from zope.security.interfaces import Unauthorized
+from zope.location.interfaces import ILocation, ISite
+from zope.traversing.api import getParents
+
+from zope.app.container.interfaces import IReadContainer
+
+from zope.app.tree.interfaces import IUniqueId, IChildObjects
+
+class StubUniqueId(object):
+    implements(IUniqueId)
+    adapts(Interface)
+
+    def __init__(self, context):
+        self.context = context
+
+    def getId(self):
+        # this does not work for persistent objects
+        return str(id(self.context))
+
+class StubChildObjects(object):
+    implements(IChildObjects)
+    adapts(Interface)
+
+    def __init__(self, context):
+        pass
+
+    def hasChildren(self):
+        return False
+
+    def getChildObjects(self):
+        return []
+
+class LocationUniqueId(object):
+    implements(IUniqueId)
+    adapts(ILocation)
+
+    def __init__(self, context):
+        self.context = context
+
+    def getId(self):
+        context = self.context
+        if not context.__name__:
+            # always try to be unique
+            return str(id(context))
+        parents = [context.__name__]
+        parents += [parent.__name__ for parent in getParents(context)
+                    if parent.__name__]
+        return '\\'.join(parents)
+
+class ContainerChildObjects(object):
+    implements(IChildObjects)
+    adapts(IReadContainer)
+
+    def __init__(self, context):
+        self.context = context
+
+    def hasChildren(self):
+        # make sure we check for access
+        try:
+            lenght = bool(len(self.context))
+            if lenght > 0:
+                return True
+            else:
+                return False
+        except Unauthorized:
+            return False
+
+    def getChildObjects(self):
+        if self.hasChildren():
+            return self.context.values()
+        else:
+            return []
+
+class ContainerSiteChildObjects(ContainerChildObjects):
+    """Adapter for read containers which are sites as well. The site
+    manager will be treated as just another child object.
+    """
+    adapts(ISite)
+
+    def hasChildren(self):
+        if super(ContainerSiteChildObjects, self).hasChildren():
+            return True
+        if self._canAccessSiteManager():
+            return True
+        else:
+            return False
+
+    def getChildObjects(self):
+        if self.hasChildren():
+            values = super(ContainerSiteChildObjects, self).getChildObjects()
+            if self._canAccessSiteManager():
+                return [self.context.getSiteManager()] + list(values)
+            else:
+                return values
+        else:
+            return []
+
+    def _canAccessSiteManager(self):
+        try:
+            # the ++etc++ namespace is public this means we get the sitemanager
+            # without permissions. But this does not mean we can access it
+            # Right now we check the __getitem__ method on the sitemamanger
+            # but this means we don't show the ++etc++site link if we have
+            # registred views on the sitemanager which have other permission
+            # then the __getitem__ method form the interface IReadContainer
+            # in the LocalSiteManager.
+            # If this will be a problem in the future, we can add a 
+            # attribute to the SiteManager which we can give individual 
+            # permissions and check it via canAccess.
+            sitemanager = self.context.getSiteManager()
+            authorized = canAccess(sitemanager, '__getitem__')
+            if authorized:
+                return True
+            else:
+                return False
+        except ComponentLookupError:
+            return False
+        except TypeError:
+            # we can't check unproxied objects, but unproxied objects
+            # are public.
+            return True

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/browser/__init__.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,55 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-"""Browser views
-
-$Id$
-"""
-__docformat__ = 'restructuredtext'
-
-import zope.component
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.publisher.browser import BrowserView
-
-from zope.app.tree.interfaces import ITreeStateEncoder
-from zope.app.tree.node import Node
-from zope.app.rotterdam import Rotterdam
-
-class IStaticTreeLayer(IBrowserRequest):
-    """Layer that we can register our own navigation macro for."""
-
-class IStaticTreeSkin(IStaticTreeLayer, Rotterdam):
-    """Skin based on Rotterdam that includes the static tree
-    navigation macro."""
-
-# BBB 2006/02/18, to be removed after 12 months
-try:
-    import zope.app.skins
-    zope.app.skins.set('StaticTree', IStaticTreeSkin)
-except ImportError:
-    pass
-
-class StatefulTreeView(BrowserView):
-
-    def statefulTree(self, root=None, filter=None, tree_state=None):
-        """Build a tree with tree state information from a request.
-        """
-        if root is None:
-            root = self.context
-        expanded_nodes = []
-        if tree_state is not None:
-            encoder = zope.component.getUtility(ITreeStateEncoder)
-            expanded_nodes = encoder.decodeTreeState(tree_state)
-        node = Node(root, expanded_nodes, filter)
-        node.expand()
-        return node

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/browser/__init__.py)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/__init__.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,51 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+"""Browser views
+
+$Id$
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.component
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.publisher.browser import BrowserView
+
+from zope.app.tree.interfaces import ITreeStateEncoder
+from zope.app.tree.node import Node
+
+class IStaticTreeLayer(IBrowserRequest):
+    """Layer that we can register our own navigation macro for."""
+
+try: # we try not to depend on zope.app.rotterdam hardly
+    from zope.app.rotterdam import Rotterdam
+    class IStaticTreeSkin(IStaticTreeLayer, Rotterdam):
+        """Skin based on Rotterdam that includes the static tree
+        navigation macro."""
+except ImportError:
+    pass
+
+class StatefulTreeView(BrowserView):
+
+    def statefulTree(self, root=None, filter=None, tree_state=None):
+        """Build a tree with tree state information from a request.
+        """
+        if root is None:
+            root = self.context
+        expanded_nodes = []
+        if tree_state is not None:
+            encoder = zope.component.getUtility(ITreeStateEncoder)
+            expanded_nodes = encoder.decodeTreeState(tree_state)
+        node = Node(root, expanded_nodes, filter)
+        node.expand()
+        return node

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/browser/configure.zcml	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,67 +0,0 @@
-<configure
-    xmlns="http://namespaces.zope.org/zope"
-    xmlns:browser="http://namespaces.zope.org/browser"
-    xmlns:zcml="http://namespaces.zope.org/zcml"
-    i18n_domain="zope"
-    >
-
-  <!-- Register icons -->
-
-  <browser:resourceDirectory
-      name="tree_images"
-      directory="images" />
-
-  <!-- Cookie tree -->
-
-  <browser:pages
-      for="*"
-      class=".cookie.CookieTreeView"
-      permission="zope.View"
-      >
-    <browser:page
-        name="cookie_tree"
-        attribute="cookieTree"
-        />
-    <browser:page
-        name="folder_cookie_tree"
-        attribute="folderTree"
-        />
-    <browser:page
-        name="site_cookie_tree"
-        attribute="siteTree"
-        />
-    <browser:page
-        name="root_cookie_tree"
-        attribute="rootTree"
-        />
-    <browser:page
-        name="virtualhost_cookie_tree"
-        attribute="virtualHostTree"
-        />
-  </browser:pages>
-
-  <!-- Set up the 'StaticTree' skin -->
-
-  <!-- BBB 2006/02/18, to be removed after 12 months -->
-  <browser:layer
-      zcml:condition="have deprecatedlayers"
-      interface=".IStaticTreeLayer"
-      name="statictree"
-      bbb_aware="true"
-      />
-
-  <interface
-      interface=".IStaticTreeSkin"
-      type="zope.publisher.interfaces.browser.IBrowserSkinType"
-      name="StaticTree"
-      />
-
-  <browser:page
-      for="*"
-      name="navigation_macros"
-      permission="zope.View"
-      layer=".IStaticTreeLayer"
-      template="navigation_macros.pt"
-      />
-
-</configure>

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/browser/configure.zcml)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/configure.zcml	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,60 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    xmlns:zcml="http://namespaces.zope.org/zcml"
+    i18n_domain="zope"
+    >
+
+  <!-- Register icons -->
+
+  <browser:resourceDirectory
+      name="tree_images"
+      directory="images" />
+
+  <!-- Cookie tree -->
+
+  <browser:pages
+      for="*"
+      class=".cookie.CookieTreeView"
+      permission="zope.View"
+      >
+    <browser:page
+        name="cookie_tree"
+        attribute="cookieTree"
+        />
+    <browser:page
+        name="folder_cookie_tree"
+        attribute="folderTree"
+        />
+    <browser:page
+        name="site_cookie_tree"
+        attribute="siteTree"
+        />
+    <browser:page
+        name="root_cookie_tree"
+        attribute="rootTree"
+        />
+    <browser:page
+        name="virtualhost_cookie_tree"
+        attribute="virtualHostTree"
+        />
+  </browser:pages>
+
+  <!-- Set up the 'StaticTree' skin -->
+
+  <interface
+      zcml:condition="installed zope.app.rotterdam"
+      interface=".IStaticTreeSkin"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      name="StaticTree"
+      />
+
+  <browser:page
+      for="*"
+      name="navigation_macros"
+      permission="zope.View"
+      layer=".IStaticTreeLayer"
+      template="navigation_macros.pt"
+      />
+
+</configure>

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/browser/cookie.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,79 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-"""Stateful cookie tree
-
-$Id$
-"""
-import zope.traversing.api
-from zope.traversing.interfaces import IContainmentRoot
-from zope.component.interfaces import IComponentLookup
-
-from zope.app.container.interfaces import IContainer
-from zope.app.folder.interfaces import IFolder
-from zope.app.component.interfaces import ISite
-
-from zope.app.tree.filters import OnlyInterfacesFilter
-from zope.app.tree.browser import StatefulTreeView
-
-class CookieTreeView(StatefulTreeView):
-    """A stateful tree view using cookies to remember the tree state"""
-
-    request_variable = 'tree-state'
-    
-    def cookieTree(self, root=None, filter=None):
-        """Build a tree with tree state information from a request.
-        """
-        request = self.request
-        tree_state = request.get(self.request_variable, "")
-        tree_state = str(tree_state)
-        tree_state = tree_state or None
-        if tree_state is not None:
-            # set a cookie right away
-            request.response.setCookie(self.request_variable,
-                                       tree_state)
-        return self.statefulTree(root, filter, tree_state)
-
-    def folderTree(self, root=None):
-        """Cookie tree with only folders (and site managers).
-        """
-        filter = OnlyInterfacesFilter(IContainer)
-        return self.cookieTree(root, filter)
-
-    def siteTree(self):
-        """Cookie tree with only folders and the nearest site as root
-        node.
-        """
-        parent = self.context
-        for parent in zope.traversing.api.getParents(self.context):
-            if ISite.providedBy(parent):
-                break
-        return self.folderTree(parent)
-
-    def rootTree(self):
-        """Cookie tree with only folders and the root container as
-        root node.
-        """
-        root = zope.traversing.api.getRoot(self.context)
-        return self.folderTree(root)
-
-    def virtualHostTree(self):
-        """Cookie tree with only folders and the root container as
-        root node.
-        """
-        vh = self.request.getVirtualHostRoot()
-        if vh:
-            return self.folderTree(vh)
-        else:
-            root = zope.traversing.api.getRoot(self.context)
-            return self.folderTree(root)

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/browser/cookie.py)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/cookie.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,78 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+"""Stateful cookie tree
+
+$Id$
+"""
+import zope.traversing.api
+from zope.traversing.interfaces import IContainmentRoot
+from zope.component.interfaces import IComponentLookup
+from zope.location.interfaces import ISite
+
+from zope.app.container.interfaces import IContainer
+
+from zope.app.tree.filters import OnlyInterfacesFilter
+from zope.app.tree.browser import StatefulTreeView
+
+class CookieTreeView(StatefulTreeView):
+    """A stateful tree view using cookies to remember the tree state"""
+
+    request_variable = 'tree-state'
+    
+    def cookieTree(self, root=None, filter=None):
+        """Build a tree with tree state information from a request.
+        """
+        request = self.request
+        tree_state = request.get(self.request_variable, "")
+        tree_state = str(tree_state)
+        tree_state = tree_state or None
+        if tree_state is not None:
+            # set a cookie right away
+            request.response.setCookie(self.request_variable,
+                                       tree_state)
+        return self.statefulTree(root, filter, tree_state)
+
+    def folderTree(self, root=None):
+        """Cookie tree with only folders (and site managers).
+        """
+        filter = OnlyInterfacesFilter(IContainer)
+        return self.cookieTree(root, filter)
+
+    def siteTree(self):
+        """Cookie tree with only folders and the nearest site as root
+        node.
+        """
+        parent = self.context
+        for parent in zope.traversing.api.getParents(self.context):
+            if ISite.providedBy(parent):
+                break
+        return self.folderTree(parent)
+
+    def rootTree(self):
+        """Cookie tree with only folders and the root container as
+        root node.
+        """
+        root = zope.traversing.api.getRoot(self.context)
+        return self.folderTree(root)
+
+    def virtualHostTree(self):
+        """Cookie tree with only folders and the root container as
+        root node.
+        """
+        vh = self.request.getVirtualHostRoot()
+        if vh:
+            return self.folderTree(vh)
+        else:
+            root = zope.traversing.api.getRoot(self.context)
+            return self.folderTree(root)

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/browser/tests.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,102 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-"""Static Tree Tests
-
-$Id$
-"""
-
-import unittest
-import zope.component
-from zope.component import getMultiAdapter
-from zope.publisher.browser import TestRequest
-from zope.interface import alsoProvides
-from zope.traversing.interfaces import IContainmentRoot
-from zope.location.traversing import LocationPhysicallyLocatable
-from zope.app.testing import ztapi
-from zope.app.component.interfaces import ISite
-
-from zope.app.tree.utils import TreeStateEncoder
-from zope.app.tree.browser import StatefulTreeView
-from zope.app.tree.browser.cookie import CookieTreeView
-from zope.app.tree.tests.basetest import BaseTestCase
-
-class StatefulTreeViewTest(BaseTestCase):
-
-    def setUp(self):
-        super(StatefulTreeViewTest, self).setUp()
-        self.makeItems()
-        # provide the view for all objects (None)
-        ztapi.browserView(None, 'stateful_tree', StatefulTreeView)
-
-    def makeRequest(self):
-        request = self.request = TestRequest()
-
-    # TODO: test stateful tree view
-
-class CookieTreeViewTest(StatefulTreeViewTest):
-
-    def setUp(self):
-        super(CookieTreeViewTest, self).setUp()
-        ztapi.browserView(None, 'cookie_tree', CookieTreeView)
-        zope.component.provideAdapter(LocationPhysicallyLocatable)
-
-    def makeRequestWithVar(self):
-        varname = CookieTreeView.request_variable 
-        encoder = TreeStateEncoder()
-        tree_state = encoder.encodeTreeState(self.expanded_nodes)
-        environ = {varname: tree_state}
-        request = TestRequest(environ=environ)
-        return request
-
-    def test_cookie_tree_pre_expanded(self):
-        request = self.makeRequestWithVar()
-        view = getMultiAdapter((self.root_obj, request),
-                                    name='cookie_tree')
-        cookie_tree = view.cookieTree()
-        self.assert_(self.root_node.expanded)
-        for node in self.root_node.getFlatNodes():
-            self.assertEqual(node.expanded, node.getId() in self.expanded_nodes)
-
-    def test_cookie_tree_sets_cookie(self):
-        request = self.makeRequestWithVar()
-        view = getMultiAdapter((self.root_obj, request),
-                               name='cookie_tree')
-        cookie_tree = view.cookieTree()
-        self.failIf(request.response.getCookie(view.request_variable) is None)
-
-    def test_cookie_tree_site_tree(self):
-        request = self.makeRequestWithVar()
-        alsoProvides(self.items['a'], IContainmentRoot)
-        alsoProvides(self.items['c'], ISite)
-        view = getMultiAdapter((self.items['f'], request),
-                               name='cookie_tree')
-        cookie_tree = view.siteTree()
-        self.assert_(cookie_tree.context is self.items['c'])
-
-    def test_cookie_tree_root_tree(self):
-        request = self.makeRequestWithVar()
-        alsoProvides(self.items['c'], IContainmentRoot)
-        view = getMultiAdapter((self.items['f'], request),
-                               name='cookie_tree')
-        cookie_tree = view.rootTree()
-        self.assert_(cookie_tree.context is self.items['c'])
-        
-
-def test_suite():
-    suite = unittest.makeSuite(StatefulTreeViewTest)
-    suite.addTest(unittest.makeSuite(CookieTreeViewTest))
-    return suite
-
-if __name__ == '__main__':
-    unittest.main(defaultTest='test_suite')

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/browser/tests.py)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/browser/tests.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,102 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+"""Static Tree Tests
+
+$Id$
+"""
+
+import unittest
+import zope.component
+from zope.component import getMultiAdapter
+from zope.publisher.browser import TestRequest
+from zope.interface import alsoProvides
+from zope.traversing.interfaces import IContainmentRoot
+from zope.location.interfaces import ISite
+from zope.location.traversing import LocationPhysicallyLocatable
+from zope.app.testing import ztapi
+
+from zope.app.tree.utils import TreeStateEncoder
+from zope.app.tree.browser import StatefulTreeView
+from zope.app.tree.browser.cookie import CookieTreeView
+from zope.app.tree.tests.basetest import BaseTestCase
+
+class StatefulTreeViewTest(BaseTestCase):
+
+    def setUp(self):
+        super(StatefulTreeViewTest, self).setUp()
+        self.makeItems()
+        # provide the view for all objects (None)
+        ztapi.browserView(None, 'stateful_tree', StatefulTreeView)
+
+    def makeRequest(self):
+        request = self.request = TestRequest()
+
+    # TODO: test stateful tree view
+
+class CookieTreeViewTest(StatefulTreeViewTest):
+
+    def setUp(self):
+        super(CookieTreeViewTest, self).setUp()
+        ztapi.browserView(None, 'cookie_tree', CookieTreeView)
+        zope.component.provideAdapter(LocationPhysicallyLocatable)
+
+    def makeRequestWithVar(self):
+        varname = CookieTreeView.request_variable 
+        encoder = TreeStateEncoder()
+        tree_state = encoder.encodeTreeState(self.expanded_nodes)
+        environ = {varname: tree_state}
+        request = TestRequest(environ=environ)
+        return request
+
+    def test_cookie_tree_pre_expanded(self):
+        request = self.makeRequestWithVar()
+        view = getMultiAdapter((self.root_obj, request),
+                                    name='cookie_tree')
+        cookie_tree = view.cookieTree()
+        self.assert_(self.root_node.expanded)
+        for node in self.root_node.getFlatNodes():
+            self.assertEqual(node.expanded, node.getId() in self.expanded_nodes)
+
+    def test_cookie_tree_sets_cookie(self):
+        request = self.makeRequestWithVar()
+        view = getMultiAdapter((self.root_obj, request),
+                               name='cookie_tree')
+        cookie_tree = view.cookieTree()
+        self.failIf(request.response.getCookie(view.request_variable) is None)
+
+    def test_cookie_tree_site_tree(self):
+        request = self.makeRequestWithVar()
+        alsoProvides(self.items['a'], IContainmentRoot)
+        alsoProvides(self.items['c'], ISite)
+        view = getMultiAdapter((self.items['f'], request),
+                               name='cookie_tree')
+        cookie_tree = view.siteTree()
+        self.assert_(cookie_tree.context is self.items['c'])
+
+    def test_cookie_tree_root_tree(self):
+        request = self.makeRequestWithVar()
+        alsoProvides(self.items['c'], IContainmentRoot)
+        view = getMultiAdapter((self.items['f'], request),
+                               name='cookie_tree')
+        cookie_tree = view.rootTree()
+        self.assert_(cookie_tree.context is self.items['c'])
+        
+
+def test_suite():
+    suite = unittest.makeSuite(StatefulTreeViewTest)
+    suite.addTest(unittest.makeSuite(CookieTreeViewTest))
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/configure.zcml	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,66 +0,0 @@
-<configure
-    xmlns="http://namespaces.zope.org/zope"
-    i18n_domain="zope"
-    >
-
-  <class class=".node.Node">
-    <allow interface=".interfaces.INode" />
-  </class>
-
-  <utility
-      provides=".interfaces.ITreeStateEncoder"
-      factory=".utils.TreeStateEncoder"
-      />
-
-  <!-- stub adapters -->
-
-  <adapter
-      provides=".interfaces.IUniqueId"
-      for="*"
-      factory=".adapters.StubUniqueId"
-      />
-
-  <adapter
-      provides=".interfaces.IChildObjects"
-      for="*"
-      factory=".adapters.StubChildObjects"
-      />
-
-  <!-- adapters for zope.app.container machinery -->
-
-  <adapter
-      provides=".interfaces.IUniqueId"
-      for="zope.location.interfaces.ILocation"
-      factory=".adapters.LocationUniqueId"
-      />
-
-  <adapter
-      provides=".interfaces.IChildObjects"
-      for="zope.app.container.interfaces.IReadContainer"
-      factory=".adapters.ContainerChildObjects"
-      />
-
-  <adapter
-      provides=".interfaces.IChildObjects"
-      for="zope.app.component.interfaces.ISite"
-      factory=".adapters.ContainerSiteChildObjects"
-      />
-
-  <include package=".browser" />
-
-  <!-- Registering documentation with API doc -->
-  <configure
-      xmlns:apidoc="http://namespaces.zope.org/apidoc"
-      xmlns:zcml="http://namespaces.zope.org/zcml"
-      zcml:condition="have apidoc">
-
-    <apidoc:bookchapter
-        id="tree"
-        title="Zope Tree"
-        doc_path="README.txt"
-        />
-
-  </configure>
-
-</configure>
-

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml (from rev 94798, zope.app.tree/trunk/src/zope/app/tree/configure.zcml)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/configure.zcml	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,66 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="zope"
+    >
+
+  <class class=".node.Node">
+    <allow interface=".interfaces.INode" />
+  </class>
+
+  <utility
+      provides=".interfaces.ITreeStateEncoder"
+      factory=".utils.TreeStateEncoder"
+      />
+
+  <!-- stub adapters -->
+
+  <adapter
+      provides=".interfaces.IUniqueId"
+      for="*"
+      factory=".adapters.StubUniqueId"
+      />
+
+  <adapter
+      provides=".interfaces.IChildObjects"
+      for="*"
+      factory=".adapters.StubChildObjects"
+      />
+
+  <!-- adapters for zope.app.container machinery -->
+
+  <adapter
+      provides=".interfaces.IUniqueId"
+      for="zope.location.interfaces.ILocation"
+      factory=".adapters.LocationUniqueId"
+      />
+
+  <adapter
+      provides=".interfaces.IChildObjects"
+      for="zope.app.container.interfaces.IReadContainer"
+      factory=".adapters.ContainerChildObjects"
+      />
+
+  <adapter
+      provides=".interfaces.IChildObjects"
+      for="zope.location.interfaces.ISite"
+      factory=".adapters.ContainerSiteChildObjects"
+      />
+
+  <include package=".browser" />
+
+  <!-- Registering documentation with API doc -->
+  <configure
+      xmlns:apidoc="http://namespaces.zope.org/apidoc"
+      xmlns:zcml="http://namespaces.zope.org/zcml"
+      zcml:condition="have apidoc">
+
+    <apidoc:bookchapter
+        id="tree"
+        title="Zope Tree"
+        doc_path="README.txt"
+        />
+
+  </configure>
+
+</configure>
+

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/tests/test_adapters.py	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1,181 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-"""Tree adapter tests
-
-$Id$
-"""
-import unittest
-
-from zope.interface import implements, directlyProvides
-from zope.component.interfaces import ComponentLookupError
-from zope.security.checker import defineChecker
-from zope.security.checker import NamesChecker
-from zope.traversing.interfaces import IContainmentRoot
-from zope.location.interfaces import ILocation
-
-from zope.app.component.interfaces import ISite
-from zope.app.container.interfaces import IReadContainer
-from zope.app.container.sample import SampleContainer
-from zope.app.container.contained import setitem
-from zope.app.testing.placelesssetup import PlacelessSetup
-from zope.app.testing import ztapi
-
-from zope.app.tree.interfaces import IUniqueId, IChildObjects, \
-     ITreeStateEncoder
-from zope.app.tree.utils import TreeStateEncoder
-from zope.app.tree.adapters import StubUniqueId, StubChildObjects, \
-     LocationUniqueId, ContainerChildObjects, ContainerSiteChildObjects
-
-class SampleContent(object):
-    pass
-
-class SampleSite(SampleContainer):
-    implements(ISite)
-
-    def setSiteManager(self, sm):
-        self._sm = sm
-
-    def getSiteManager(self):
-        try:
-            return self._sm
-        except AttributeError:
-            raise ComponentLookupError
-
-class SiteManagerStub(object):
-    """This stub is used for to check the permission on __getitem__."""
-
-    def __getitem__(key):
-        return 'nada'
-
-class AdapterTestCase(PlacelessSetup, unittest.TestCase):
-
-    def setUp(self):
-        super(AdapterTestCase, self).setUp()
-        # provide necessary components
-        ztapi.provideAdapter(None, IUniqueId, StubUniqueId)
-        ztapi.provideAdapter(None, IChildObjects, StubChildObjects)
-        ztapi.provideAdapter(ILocation, IUniqueId, LocationUniqueId)
-        ztapi.provideAdapter(IReadContainer, IChildObjects, ContainerChildObjects)
-        ztapi.provideAdapter(ISite, IChildObjects, ContainerSiteChildObjects)
-        ztapi.provideUtility(ITreeStateEncoder, TreeStateEncoder())
-        self.makeObjects()
-
-    def makeObjects(self):
-        checker = NamesChecker(['__getitem__'])
-        defineChecker(SiteManagerStub, checker)
-        self.futurama = futurama = SampleSite()
-        directlyProvides(futurama, IContainmentRoot)
-        planetexpress = SampleContainer()
-        robotfactory = SampleContainer()
-        nimbus = SampleContainer()
-        omicronpersei = SampleSite()
-
-        bender = SampleContent()
-        fry = SampleContent()
-        leela = SampleContent()
-        mom = SampleContent()
-        zapp = SampleContent()
-        kif = SampleContent()
-
-        setitem(futurama, futurama.__setitem__, 'planetexpress', planetexpress)
-        setitem(futurama, futurama.__setitem__, 'robotfactory', robotfactory)
-        setitem(futurama, futurama.__setitem__, 'nimbus', nimbus)
-        setitem(futurama, futurama.__setitem__, 'omicronpersei', omicronpersei)
-
-        setitem(planetexpress, planetexpress.__setitem__, 'bender', bender)
-        setitem(planetexpress, planetexpress.__setitem__, 'fry', fry)
-        setitem(planetexpress, planetexpress.__setitem__, 'leela', leela)
-        setitem(robotfactory, robotfactory.__setitem__, 'mom', mom)
-        setitem(nimbus, nimbus.__setitem__, 'zapp', zapp)
-        setitem(nimbus, nimbus.__setitem__, 'kif', kif)
-
-    def test_stub_adapters(self):
-        # test content unique id
-        farnesworth = SampleContent()
-        elzar = SampleContent()
-        adapter = IUniqueId(farnesworth)
-        adapter2 = IUniqueId(elzar)
-        self.failIf(adapter.getId() == 'farnesworth')
-        self.failIf(adapter2.getId() == 'elzar')
-        # test for uniqueness
-        self.failIf(adapter.getId() == adapter2.getId())
-
-        # test content child objects
-        adapter = IChildObjects(elzar)
-        self.failIf(adapter.hasChildren())
-        self.assert_(len(adapter.getChildObjects()) == 0)
-        # test with acquired content
-        bender = self.futurama['planetexpress']['bender']
-        adapter = IChildObjects(bender)
-        self.failIf(adapter.hasChildren())
-        self.assert_(len(adapter.getChildObjects()) == 0)
-
-    def test_location_uniqueid(self):
-        # futurama does not have a name
-        futurama = self.futurama
-        adapter = IUniqueId(futurama)
-        self.assertEqual(adapter.getId(), str(id(futurama)))
-
-        # test container
-        planetexpress = self.futurama['planetexpress']
-        adapter = IUniqueId(planetexpress)
-        self.assertEqual(adapter.getId(), 'planetexpress')
-
-        # test content
-        bender = self.futurama['planetexpress']['bender']
-        adapter = IUniqueId(bender)
-        self.assertEqual(adapter.getId(), r'bender\planetexpress')
-
-    def test_container_childobjects(self):
-        # test container with children
-        futurama = self.futurama
-        adapter = IChildObjects(futurama)
-        self.assert_(adapter.hasChildren())
-        self.assertEqual(adapter.getChildObjects(), futurama.values())
-
-        # test acquired container with children
-        planetexpress = self.futurama['planetexpress']
-        adapter = IChildObjects(planetexpress)
-        self.assert_(adapter.hasChildren())
-        self.assertEqual(adapter.getChildObjects(), planetexpress.values())
-
-        # test acquired container w/o children
-        omicronpersei = self.futurama['omicronpersei']
-        adapter = IChildObjects(omicronpersei)
-        self.failIf(adapter.hasChildren())
-        self.assertEqual(adapter.getChildObjects(), [])
-
-    def test_container_site(self):
-        sm = SiteManagerStub()
-        futurama = self.futurama
-        omicronpersei = self.futurama['omicronpersei']
-
-        # test behaviour before and after setting a site
-        adapter = IChildObjects(futurama)
-        self.assert_(adapter.hasChildren())
-        self.assertEqual(adapter.getChildObjects(), futurama.values())
-        futurama.setSiteManager(sm)
-        self.assert_(sm in adapter.getChildObjects())
-
-        adapter = IChildObjects(omicronpersei)
-        self.failIf(adapter.hasChildren())
-        omicronpersei.setSiteManager(sm)
-        self.assert_(adapter.hasChildren())
-        self.assertEqual(adapter.getChildObjects(), [sm])
-
-def test_suite():
-    return unittest.makeSuite(AdapterTestCase)
-
-if __name__ == '__main__':
-    unittest.main(defaultTest='test_suite')

Copied: zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py (from rev 94797, zope.app.tree/trunk/src/zope/app/tree/tests/test_adapters.py)
===================================================================
--- zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py	                        (rev 0)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/tests/test_adapters.py	2009-01-17 16:37:20 UTC (rev 94800)
@@ -0,0 +1,180 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+"""Tree adapter tests
+
+$Id$
+"""
+import unittest
+
+from zope.interface import implements, directlyProvides
+from zope.component.interfaces import ComponentLookupError
+from zope.security.checker import defineChecker
+from zope.security.checker import NamesChecker
+from zope.traversing.interfaces import IContainmentRoot
+from zope.location.interfaces import ILocation, ISite
+
+from zope.app.container.interfaces import IReadContainer
+from zope.app.container.sample import SampleContainer
+from zope.app.container.contained import setitem
+from zope.app.testing.placelesssetup import PlacelessSetup
+from zope.app.testing import ztapi
+
+from zope.app.tree.interfaces import IUniqueId, IChildObjects, \
+     ITreeStateEncoder
+from zope.app.tree.utils import TreeStateEncoder
+from zope.app.tree.adapters import StubUniqueId, StubChildObjects, \
+     LocationUniqueId, ContainerChildObjects, ContainerSiteChildObjects
+
+class SampleContent(object):
+    pass
+
+class SampleSite(SampleContainer):
+    implements(ISite)
+
+    def setSiteManager(self, sm):
+        self._sm = sm
+
+    def getSiteManager(self):
+        try:
+            return self._sm
+        except AttributeError:
+            raise ComponentLookupError
+
+class SiteManagerStub(object):
+    """This stub is used for to check the permission on __getitem__."""
+
+    def __getitem__(key):
+        return 'nada'
+
+class AdapterTestCase(PlacelessSetup, unittest.TestCase):
+
+    def setUp(self):
+        super(AdapterTestCase, self).setUp()
+        # provide necessary components
+        ztapi.provideAdapter(None, IUniqueId, StubUniqueId)
+        ztapi.provideAdapter(None, IChildObjects, StubChildObjects)
+        ztapi.provideAdapter(ILocation, IUniqueId, LocationUniqueId)
+        ztapi.provideAdapter(IReadContainer, IChildObjects, ContainerChildObjects)
+        ztapi.provideAdapter(ISite, IChildObjects, ContainerSiteChildObjects)
+        ztapi.provideUtility(ITreeStateEncoder, TreeStateEncoder())
+        self.makeObjects()
+
+    def makeObjects(self):
+        checker = NamesChecker(['__getitem__'])
+        defineChecker(SiteManagerStub, checker)
+        self.futurama = futurama = SampleSite()
+        directlyProvides(futurama, IContainmentRoot)
+        planetexpress = SampleContainer()
+        robotfactory = SampleContainer()
+        nimbus = SampleContainer()
+        omicronpersei = SampleSite()
+
+        bender = SampleContent()
+        fry = SampleContent()
+        leela = SampleContent()
+        mom = SampleContent()
+        zapp = SampleContent()
+        kif = SampleContent()
+
+        setitem(futurama, futurama.__setitem__, 'planetexpress', planetexpress)
+        setitem(futurama, futurama.__setitem__, 'robotfactory', robotfactory)
+        setitem(futurama, futurama.__setitem__, 'nimbus', nimbus)
+        setitem(futurama, futurama.__setitem__, 'omicronpersei', omicronpersei)
+
+        setitem(planetexpress, planetexpress.__setitem__, 'bender', bender)
+        setitem(planetexpress, planetexpress.__setitem__, 'fry', fry)
+        setitem(planetexpress, planetexpress.__setitem__, 'leela', leela)
+        setitem(robotfactory, robotfactory.__setitem__, 'mom', mom)
+        setitem(nimbus, nimbus.__setitem__, 'zapp', zapp)
+        setitem(nimbus, nimbus.__setitem__, 'kif', kif)
+
+    def test_stub_adapters(self):
+        # test content unique id
+        farnesworth = SampleContent()
+        elzar = SampleContent()
+        adapter = IUniqueId(farnesworth)
+        adapter2 = IUniqueId(elzar)
+        self.failIf(adapter.getId() == 'farnesworth')
+        self.failIf(adapter2.getId() == 'elzar')
+        # test for uniqueness
+        self.failIf(adapter.getId() == adapter2.getId())
+
+        # test content child objects
+        adapter = IChildObjects(elzar)
+        self.failIf(adapter.hasChildren())
+        self.assert_(len(adapter.getChildObjects()) == 0)
+        # test with acquired content
+        bender = self.futurama['planetexpress']['bender']
+        adapter = IChildObjects(bender)
+        self.failIf(adapter.hasChildren())
+        self.assert_(len(adapter.getChildObjects()) == 0)
+
+    def test_location_uniqueid(self):
+        # futurama does not have a name
+        futurama = self.futurama
+        adapter = IUniqueId(futurama)
+        self.assertEqual(adapter.getId(), str(id(futurama)))
+
+        # test container
+        planetexpress = self.futurama['planetexpress']
+        adapter = IUniqueId(planetexpress)
+        self.assertEqual(adapter.getId(), 'planetexpress')
+
+        # test content
+        bender = self.futurama['planetexpress']['bender']
+        adapter = IUniqueId(bender)
+        self.assertEqual(adapter.getId(), r'bender\planetexpress')
+
+    def test_container_childobjects(self):
+        # test container with children
+        futurama = self.futurama
+        adapter = IChildObjects(futurama)
+        self.assert_(adapter.hasChildren())
+        self.assertEqual(adapter.getChildObjects(), futurama.values())
+
+        # test acquired container with children
+        planetexpress = self.futurama['planetexpress']
+        adapter = IChildObjects(planetexpress)
+        self.assert_(adapter.hasChildren())
+        self.assertEqual(adapter.getChildObjects(), planetexpress.values())
+
+        # test acquired container w/o children
+        omicronpersei = self.futurama['omicronpersei']
+        adapter = IChildObjects(omicronpersei)
+        self.failIf(adapter.hasChildren())
+        self.assertEqual(adapter.getChildObjects(), [])
+
+    def test_container_site(self):
+        sm = SiteManagerStub()
+        futurama = self.futurama
+        omicronpersei = self.futurama['omicronpersei']
+
+        # test behaviour before and after setting a site
+        adapter = IChildObjects(futurama)
+        self.assert_(adapter.hasChildren())
+        self.assertEqual(adapter.getChildObjects(), futurama.values())
+        futurama.setSiteManager(sm)
+        self.assert_(sm in adapter.getChildObjects())
+
+        adapter = IChildObjects(omicronpersei)
+        self.failIf(adapter.hasChildren())
+        omicronpersei.setSiteManager(sm)
+        self.assert_(adapter.hasChildren())
+        self.assertEqual(adapter.getChildObjects(), [sm])
+
+def test_suite():
+    return unittest.makeSuite(AdapterTestCase)
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/tree-configure.zcml
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/tree-configure.zcml	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/tree-configure.zcml	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1 +0,0 @@
-<include package="zope.app.tree"/>

Deleted: zope.app.tree/tags/3.5.0/src/zope/app/tree/version.txt
===================================================================
--- zope.app.tree/trunk/src/zope/app/tree/version.txt	2009-01-17 13:37:36 UTC (rev 94794)
+++ zope.app.tree/tags/3.5.0/src/zope/app/tree/version.txt	2009-01-17 16:37:20 UTC (rev 94800)
@@ -1 +0,0 @@
-ZopeTree 1.2
\ No newline at end of file



More information about the Checkins mailing list