[Checkins] SVN: zope.container/trunk/ Drop support for Python 2.4 and 2.5.

Tres Seaver cvs-admin at zope.org
Thu May 17 22:32:08 UTC 2012


Log message for revision 125997:
  Drop support for Python 2.4 and 2.5.
  
  Replace deprecated 'zope.component.adapts' usage with equivalent
  'zope.component.adapter' decorator.
  
  Replace deprecated 'zope.interface.implements' usage with equivalent
  'zope.interface.implementer' decorator.
  
  

Changed:
  U   zope.container/trunk/CHANGES.txt
  U   zope.container/trunk/setup.py
  U   zope.container/trunk/src/zope/container/btree.py
  U   zope.container/trunk/src/zope/container/constraints.py
  U   zope.container/trunk/src/zope/container/constraints.txt
  U   zope.container/trunk/src/zope/container/contained.py
  U   zope.container/trunk/src/zope/container/directory.py
  U   zope.container/trunk/src/zope/container/find.py
  U   zope.container/trunk/src/zope/container/folder.py
  U   zope.container/trunk/src/zope/container/ordered.py
  U   zope.container/trunk/src/zope/container/sample.py
  U   zope.container/trunk/src/zope/container/size.py
  U   zope.container/trunk/src/zope/container/tests/test_contained.py
  U   zope.container/trunk/src/zope/container/tests/test_containertraversable.py
  U   zope.container/trunk/src/zope/container/tests/test_containertraverser.py
  U   zope.container/trunk/src/zope/container/tests/test_dependencies.py
  U   zope.container/trunk/src/zope/container/tests/test_find.py
  U   zope.container/trunk/src/zope/container/tests/test_size.py
  U   zope.container/trunk/src/zope/container/traversal.py

-=-
Modified: zope.container/trunk/CHANGES.txt
===================================================================
--- zope.container/trunk/CHANGES.txt	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/CHANGES.txt	2012-05-17 22:32:04 UTC (rev 125997)
@@ -2,9 +2,17 @@
 CHANGES
 =======
 
-3.12.1 (unreleased)
+4.0.0 (unreleased)
 -------------------
 
+- Replaced deprecated ``zope.component.adapts`` usage with equivalent
+  ``zope.component.adapter`` decorator.
+
+- Replaced deprecated ``zope.interface.implements`` usage with equivalent
+  ``zope.interface.implementer`` decorator.
+
+- Dropped support for Python 2.4 and 2.5.
+
 - Send ``IContainerModifiedEvent`` *after* the container is modified
   (LP#705600).
 

Modified: zope.container/trunk/setup.py
===================================================================
--- zope.container/trunk/setup.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/setup.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -25,7 +25,7 @@
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
 setup(name='zope.container',
-      version = '3.12.1dev',
+      version = '4.0.0dev',
       author='Zope Foundation and Contributors',
       author_email='zope-dev at zope.org',
       description='Zope Container',
@@ -45,11 +45,14 @@
           'Intended Audience :: Developers',
           'License :: OSI Approved :: Zope Public License',
           'Programming Language :: Python',
+          'Programming Language :: Python :: 2',
+          'Programming Language :: Python :: 2.6',
+          'Programming Language :: Python :: 2.7',
           'Natural Language :: English',
           'Operating System :: OS Independent',
-
           'Topic :: Internet :: WWW/HTTP',
-          'Framework :: Zope3'],
+          'Framework :: Zope3',
+          ],
       url='http://pypi.python.org/pypi/zope.container',
       license='ZPL 2.1',
       packages=find_packages('src'),

Modified: zope.container/trunk/src/zope/container/btree.py
===================================================================
--- zope.container/trunk/src/zope/container/btree.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/btree.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -21,7 +21,7 @@
 
 from zope.container.interfaces import IBTreeContainer
 from zope.container.contained import Contained, setitem, uncontained
-from zope.interface import implements
+from zope.interface import implementer
 
 
 class Lazy(object):
@@ -44,10 +44,9 @@
         return value
 
 
+ at implementer(IBTreeContainer)
 class BTreeContainer(Contained, Persistent):
 
-    implements(IBTreeContainer)
-
     def __init__(self):
         # We keep the previous attribute to store the data
         # for backward compatibility

Modified: zope.container/trunk/src/zope/container/constraints.py
===================================================================
--- zope.container/trunk/src/zope/container/constraints.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/constraints.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -34,8 +34,8 @@
    ...     __setitem__.precondition = preNoZ
 
    >>> from zope.container.interfaces import IContainer
-   >>> class C1(object):
-   ...     zope.interface.implements(I1, IContainer)
+   >>> @zope.interface.implementer(I1, IContainer)
+   ... class C1(object):
    ...     def __repr__(self):
    ...         return 'C1'
 
@@ -66,8 +66,9 @@
    >>> class I2(zope.interface.Interface):
    ...     __parent__ = zope.schema.Field(constraint = con1)
 
-   >>> class O(object):
-   ...     zope.interface.implements(I2)
+   >>> @zope.interface.implementer(I2)
+   ... class O(object):
+   ...     pass
 
    If the constraint isn't satisfied, we'll get a validation error when we
    check whether the object can be added:
@@ -90,8 +91,9 @@
    >>> class I2(zope.interface.Interface):
    ...     __parent__ = zope.schema.Field(constraint = con1)
 
-   >>> class O(object):
-   ...     zope.interface.implements(I2)
+   >>> @zope.interface.implementer(I2)
+   ... class O(object):
+   ...     pass
 
    >>> checkObject(c1, "bob", O())
    Traceback (most recent call last):
@@ -279,6 +281,7 @@
             self.types = types
 
 
+ at zope.interface.implementer(IItemTypePrecondition)
 class ItemTypePrecondition(_TypesBased):
     """Specify a `__setitem__` precondition that restricts item types
 
@@ -326,7 +329,6 @@
 
     """
 
-    zope.interface.implements(IItemTypePrecondition)
 
     def __call__(self, container, name, object):
         for iface in self.types:
@@ -399,6 +401,7 @@
         """
 
 
+ at zope.interface.implementer(IContainerTypesConstraint)
 class ContainerTypesConstraint(_TypesBased):
     """Constrain a container to be one of a number of types
 
@@ -423,9 +426,6 @@
     True
 
     """
-
-    zope.interface.implements(IContainerTypesConstraint)
-
     def __call__(self, object):
        for iface in self.types:
            if iface.providedBy(object):

Modified: zope.container/trunk/src/zope/container/constraints.txt
===================================================================
--- zope.container/trunk/src/zope/container/constraints.txt	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/constraints.txt	2012-05-17 22:32:04 UTC (rev 125997)
@@ -31,11 +31,13 @@
 
     >>> from zope import interface
 
-    >>> class Buddy:
-    ...     interface.implements(IBuddy)
+    >>> @interface.implementer(IBuddy)
+    ... class Buddy:
+    ...     pass
 
-    >>> class BuddyFolder:
-    ...     interface.implements(IBuddyFolder)
+    >>> @interface.implementer(IBuddyFolder)
+    ... class BuddyFolder:
+    ...     pass
 
     >>> from zope.container.constraints import checkObject, checkFactory
     >>> from zope.component.factory import Factory
@@ -46,11 +48,13 @@
 
 If we try to use other containers or folders, we'll get errors:
 
-    >>> class Container:
-    ...     interface.implements(IContainer)
+    >>> @interface.implementer(IContainer)
+    ... class Container:
+    ...     pass
 
-    >>> class Contained:
-    ...     interface.implements(IContained)
+    >>> @interface.implementer(IContained)
+    ... class Contained:
+    ...     pass
 
     >>> checkObject(Container(), 'x', Buddy())
     ... # doctest: +ELLIPSIS
@@ -77,11 +81,13 @@
     >>> class IContacts(IContainer):
     ...     contains(IContact)
 
-    >>> class Contact:
-    ...     interface.implements(IContact)
+    >>> @interface.implementer(IContact)
+    ... class Contact:
+    ...     pass
 
-    >>> class Contacts:
-    ...     interface.implements(IContacts)
+    >>> @interface.implementer(IContacts)
+    ... class Contacts:
+    ...     pass
 
     >>> checkObject(Contacts(), 'x', Contact())
 

Modified: zope.container/trunk/src/zope/container/contained.py
===================================================================
--- zope.container/trunk/src/zope/container/contained.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/contained.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -44,17 +44,17 @@
     from zope.broken.interfaces import IBroken
 
 
+ at zope.interface.implementer(IContained)
 class Contained(object):
     """Stupid mix-in that defines `__parent__` and `__name__` attributes"""
 
-    zope.interface.implements(IContained)
-
     __parent__ = __name__ = None
 
+
+ at zope.interface.implementer(IContainerModifiedEvent)
 class ContainerModifiedEvent(ObjectModifiedEvent):
     """The container has been modified."""
 
-    zope.interface.implements(IContainerModifiedEvent)
 
 
 def dispatchToSublocations(object, event):
@@ -67,8 +67,8 @@
 
        Suppose, for example, that we define some location objects.
 
-         >>> class L(object):
-         ...     zope.interface.implements(ILocation)
+         >>> @zope.interface.implementer(ILocation)
+         ... class L(object):
          ...     def __init__(self, name):
          ...         self.__name__ = name
          ...         self.__parent__ = None
@@ -76,8 +76,8 @@
          ...         return '%s(%s)' % (
          ...                 self.__class__.__name__, str(self.__name__))
 
-         >>> class C(L):
-         ...     zope.interface.implements(ISublocations)
+         >>> @zope.interface.implementer(ISublocations)
+         ... class C(L):
          ...     def __init__(self, name, *subs):
          ...         L.__init__(self, name)
          ...         self.subs = subs
@@ -342,8 +342,8 @@
 
     >>> class IItem(zope.interface.Interface):
     ...     pass
-    >>> class Item(Contained):
-    ...     zope.interface.implements(IItem)
+    >>> @zope.interface.implementer(IItem)
+    ... class Item(Contained):
     ...     def setAdded(self, event):
     ...         self.added = event
     ...     def setMoved(self, event):
@@ -683,10 +683,9 @@
         object.__name__ = None
     notifyContainerModified(container)
 
+ at zope.interface.implementer(INameChooser)
 class NameChooser(object):
 
-    zope.interface.implements(INameChooser)
-
     def __init__(self, context):
         self.context = context
 
@@ -730,9 +729,9 @@
         to a container:
 
         >>> from zope.container.interfaces import IContainer
-        >>> class ReservedNames(object):
-        ...     zope.component.adapts(IContainer)
-        ...     zope.interface.implements(IReservedNames)
+        >>> @zope.component.adapter(IContainer)
+        ... @zope.interface.implementer(IReservedNames)
+        ... class ReservedNames(object):
         ...
         ...     def __init__(self, context):
         ...         self.reservedNames = set(('reserved', 'other'))
@@ -855,15 +854,18 @@
     >>> class I4(Interface):
     ...     pass
 
-    >>> class D1(ContainedProxy):
-    ...   implements(I1)
+    >>> @implementer(I1)
+    ... class D1(ContainedProxy):
+    ...   pass
 
 
-    >>> class D2(ContainedProxy):
-    ...   implements(I2)
+    >>> @implementer(I2)
+    ... class D2(ContainedProxy):
+    ...   pass
 
-    >>> class X:
-    ...   implements(I3)
+    >>> @implementer(I3)
+    ... class X:
+    ...   pass
 
     >>> x = X()
     >>> directlyProvides(x, I4)
@@ -923,6 +925,7 @@
         inst = getProxiedObject(inst)
         del inst.__provides__
 
+ at zope.interface.implementer(IContained)
 class ContainedProxy(ContainedProxyBase):
 
     # Prevent proxies from having their own instance dictionaries:
@@ -930,8 +933,6 @@
 
     __safe_for_unpickling__ = True
 
-    zope.interface.implements(IContained)
-
     __providedBy__ = DecoratorSpecificationDescriptor()
 
     __Security_checker__ = DecoratedSecurityCheckerDescriptor()

Modified: zope.container/trunk/src/zope/container/directory.py
===================================================================
--- zope.container/trunk/src/zope/container/directory.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/directory.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -23,7 +23,7 @@
 """
 __docformat__ = 'restructuredtext'
 
-from zope.interface import implements
+from zope.interface import implementer
 
 from zope.component.interfaces import ISite
 from zope.security.proxy import removeSecurityProxy
@@ -40,15 +40,13 @@
     return container
 
 
+ at implementer(zope.filerepresentation.interfaces.IDirectoryFactory)
 class Cloner(object):
     """`IContainer` to `IDirectoryFactory` adapter that clones
 
     This adapter provides a factory that creates a new empty container
     of the same class as it's context.
     """
-
-    implements(zope.filerepresentation.interfaces.IDirectoryFactory)
-
     def __init__(self, context):
         self.context = context
 

Modified: zope.container/trunk/src/zope/container/find.py
===================================================================
--- zope.container/trunk/src/zope/container/find.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/find.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -15,14 +15,13 @@
 """
 __docformat__ = 'restructuredtext'
 
-from zope.interface import implements
+from zope.interface import implementer
 from interfaces import IFind, IIdFindFilter, IObjectFindFilter
 from interfaces import IReadContainer
 
+ at implementer(IFind)
 class FindAdapter(object):
 
-    implements(IFind)
-
     __used_for__ = IReadContainer
 
     def __init__(self, context):
@@ -62,10 +61,9 @@
     for id, object in container.items():
         _find_helper(id, object, container, id_filters, object_filters, result)
 
+ at implementer(IIdFindFilter)
 class SimpleIdFindFilter(object):
 
-    implements(IIdFindFilter)
-
     def __init__(self, ids):
         self._ids = ids
 
@@ -73,9 +71,9 @@
         'See INameFindFilter'
         return id in self._ids
     
+ at implementer(IObjectFindFilter)
 class SimpleInterfacesFindFilter(object):
     """Filter objects on the provided interfaces"""
-    implements(IObjectFindFilter)
     
     def __init__(self, *interfaces):
         self.interfaces = interfaces

Modified: zope.container/trunk/src/zope/container/folder.py
===================================================================
--- zope.container/trunk/src/zope/container/folder.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/folder.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -19,7 +19,7 @@
 from persistent import Persistent
 from zope.container.interfaces import IContainer, IContentContainer
 from zope.container.contained import Contained, setitem, uncontained
-from zope.interface import implements, directlyProvides
+from zope.interface import implementer
 
 # XXX This container implementation is really only used by 
 # zope.site.folder.Folder. Please do not use it. 
@@ -27,10 +27,10 @@
 # XXX Check whether this IContainer implementation cannot really
 # be replaced by the BTreeContainer.
 
+ at implementer(IContentContainer)
 class Folder(Persistent, Contained):
     """The standard Zope Folder implementation."""
 
-    implements(IContentContainer)
 
     def __init__(self):
         self.data = OOBTree()

Modified: zope.container/trunk/src/zope/container/ordered.py
===================================================================
--- zope.container/trunk/src/zope/container/ordered.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/ordered.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -16,7 +16,7 @@
 __docformat__ = 'restructuredtext'
 
 from zope.container.interfaces import IOrderedContainer
-from zope.interface import implements
+from zope.interface import implementer
 from persistent import Persistent
 from persistent.dict import PersistentDict
 from persistent.list import PersistentList
@@ -24,6 +24,7 @@
 from zope.container.contained import Contained, setitem, uncontained
 from zope.container.contained import notifyContainerModified
 
+ at implementer(IOrderedContainer)
 class OrderedContainer(Persistent, Contained):
     """ `OrderedContainer` maintains entries' order as added and moved.
 
@@ -33,9 +34,6 @@
     >>> len(oc)
     0
     """
-
-    implements(IOrderedContainer)
-
     def __init__(self):
 
         self._data = PersistentDict()

Modified: zope.container/trunk/src/zope/container/sample.py
===================================================================
--- zope.container/trunk/src/zope/container/sample.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/sample.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -21,17 +21,17 @@
 __docformat__ = 'restructuredtext'
 
 from zope.container.interfaces import IContainer
-from zope.interface import implements
+from zope.interface import implementer
 from zope.container.contained import Contained, setitem, uncontained
 
 
+ at implementer(IContainer)
 class SampleContainer(Contained):
     """Sample container implementation suitable for testing.
 
     It is not suitable, directly as a base class unless the subclass
     overrides `_newContainerData` to return a persistent mapping object.
     """
-    implements(IContainer)
 
     def __init__(self):
         self.__data = self._newContainerData()

Modified: zope.container/trunk/src/zope/container/size.py
===================================================================
--- zope.container/trunk/src/zope/container/size.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/size.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -18,12 +18,11 @@
 
 from zope.container.i18n import ZopeMessageFactory as _
 from zope.size.interfaces import ISized
-from zope.interface import implements
+from zope.interface import implementer
 
+ at implementer(ISized)
 class ContainerSized(object):
 
-    implements(ISized)
-
     def __init__(self, container):
         self._container = container
 

Modified: zope.container/trunk/src/zope/container/tests/test_contained.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_contained.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_contained.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -97,8 +97,9 @@
 
       >>> class I1(zope.interface.Interface):
       ...     pass
-      >>> class C(object):
-      ...     zope.interface.implements(I1)
+      >>> @zope.interface.implementer(I1)
+      ... class C(object):
+      ...     pass
 
       >>> c = C()
       >>> p = ContainedProxy(c)
@@ -350,9 +351,9 @@
         self.assertEqual(True, checkName(u'r\xe9served', object()))
 
         # reserved names
+        @zope.component.adapter(IContainer)
+        @zope.interface.implementer(IReservedNames)
         class ReservedNames(object):
-            zope.component.adapts(IContainer)
-            zope.interface.implements(IReservedNames)
             def __init__(self, context):
                 self.reservedNames = set(('reserved', 'other'))
         zope.component.getSiteManager().registerAdapter(ReservedNames)

Modified: zope.container/trunk/src/zope/container/tests/test_containertraversable.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_containertraversable.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_containertraversable.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -15,16 +15,15 @@
 """
 import unittest
 from zope.testing.cleanup import CleanUp
-from zope.interface import implements
+from zope.interface import implementer
 from zope.traversing.interfaces import TraversalError
 
 from zope.container.traversal import ContainerTraversable
 from zope.container.interfaces import IContainer
 
+ at implementer(IContainer)
 class Container(object):
 
-    implements(IContainer)
-
     def __init__(self, attrs={}, objs={}):
         for attr,value in attrs.iteritems():
             setattr(self, attr, value)

Modified: zope.container/trunk/src/zope/container/tests/test_containertraverser.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_containertraverser.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_containertraverser.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -14,7 +14,7 @@
 """Container Traverser Tests
 """
 import unittest
-from zope.interface import Interface, implements
+from zope.interface import Interface, implementer
 from zope import component
 from zope.publisher.interfaces import NotFound, IDefaultViewName
 from zope.publisher.browser import TestRequest
@@ -24,8 +24,8 @@
 from zope.container.interfaces import IReadContainer
 from zope.container import testing
 
+ at implementer(IReadContainer)
 class TestContainer(object):
-    implements(IReadContainer)
 
     def __init__(self, **kw):
         for name, value in kw.items():

Modified: zope.container/trunk/src/zope/container/tests/test_dependencies.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_dependencies.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_dependencies.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -1,7 +1,7 @@
 import unittest
 
 from zope.configuration.xmlconfig import XMLConfig
-from zope.interface import implements
+from zope.interface import implementer
 from zope.publisher.browser import TestRequest
 from zope.publisher.interfaces.browser import IBrowserPublisher
 
@@ -22,8 +22,9 @@
 
         request = TestRequest()
 
+        @implementer(IItemContainer)
         class SampleItemContainer(object):
-            implements(IItemContainer)
+            pass
 
         sampleitemcontainer = SampleItemContainer()
         res = zope.component.getMultiAdapter(
@@ -31,8 +32,9 @@
         self.failUnless(isinstance(res, ItemTraverser))
         self.failUnless(res.context is sampleitemcontainer)
 
+        @implementer(ISimpleReadContainer)
         class SampleSimpleReadContainer(object):
-            implements(ISimpleReadContainer)
+            pass
 
         samplesimplereadcontainer = SampleSimpleReadContainer()
         res = zope.component.getMultiAdapter(

Modified: zope.container/trunk/src/zope/container/tests/test_find.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_find.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_find.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -18,10 +18,10 @@
 from zope.container.interfaces import IObjectFindFilter
 from zope.container.find import FindAdapter, SimpleIdFindFilter
 from zope.container.find import SimpleInterfacesFindFilter
-from zope.interface import implements, Interface, directlyProvides
+from zope.interface import implementer, Interface, directlyProvides
 
+ at implementer(IReadContainer)
 class FakeContainer(object):
-    implements(IReadContainer)
 
     def __init__(self, id, objects):
         self._id = id
@@ -67,8 +67,8 @@
 class FakeInterfaceSpam(Interface):
     """Test interface Spam"""
 
+ at implementer(IObjectFindFilter)
 class TestObjectFindFilter(object):
-    implements(IObjectFindFilter)
 
     def __init__(self, count):
         self._count = count

Modified: zope.container/trunk/src/zope/container/tests/test_size.py
===================================================================
--- zope.container/trunk/src/zope/container/tests/test_size.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/tests/test_size.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -15,14 +15,13 @@
 """
 import unittest
 
-from zope.interface import implements
+from zope.interface import implementer
 from zope.size.interfaces import ISized
 from zope.container.interfaces import IContainer
 
+ at implementer(IContainer)
 class DummyContainer(object):
 
-    implements(IContainer)
-
     def __init__(self, numitems):
         self._numitems = numitems
 

Modified: zope.container/trunk/src/zope/container/traversal.py
===================================================================
--- zope.container/trunk/src/zope/container/traversal.py	2012-05-17 22:30:51 UTC (rev 125996)
+++ zope.container/trunk/src/zope/container/traversal.py	2012-05-17 22:32:04 UTC (rev 125997)
@@ -15,7 +15,7 @@
 """
 __docformat__ = 'restructuredtext'
 
-from zope.interface import implements, providedBy
+from zope.interface import implementer, providedBy
 from zope.component import queryMultiAdapter, getSiteManager
 from zope.component import ComponentLookupError
 from zope.traversing.interfaces import TraversalError, ITraversable
@@ -29,10 +29,10 @@
 # Note that the next two classes are included here because they
 # can be used for multiple view types.
 
+ at implementer(IBrowserPublisher, IXMLRPCPublisher)
 class ContainerTraverser(object):
     """A traverser that knows how to look up objects by name in a container."""
 
-    implements(IBrowserPublisher, IXMLRPCPublisher)
     __used_for__ = ISimpleReadContainer
 
     def __init__(self, container, request):
@@ -84,10 +84,10 @@
 
 _marker = object()
 
+ at implementer(ITraversable)
 class ContainerTraversable(object):
     """Traverses containers via `getattr` and `get`."""
 
-    implements(ITraversable)
     __used_for__ = IReadContainer
 
     def __init__(self, container):



More information about the checkins mailing list