[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